Merge commit '54d26887d84af0b201dd86c02ef116552ee867dc' into dev-release
diff --git a/.gitignore b/.gitignore
index 90f5857..018c71b 100644
--- a/.gitignore
+++ b/.gitignore
@@ -12,10 +12,12 @@
*~
.#*
.gradle/
+**/.gradle/
.gradle_user_home
.idea/
android-data*/
build/
+**/build/
buildSrc/out/
src/*/out
d8_r8/*/out
@@ -269,6 +271,8 @@
third_party/rhino-android-1.1.1.tar.gz
third_party/sample_libraries
third_party/sample_libraries.tar.gz
+third_party/smali
+third_party/smali.tar.gz
third_party/tachiyomi
third_party/tachiyomi.tar.gz
third_party/youtube/*
diff --git a/build.gradle b/build.gradle
index a4752c4..332b74a 100644
--- a/build.gradle
+++ b/build.gradle
@@ -7,7 +7,6 @@
import desugaredlibrary.CustomConversionAsmRewriterTask
import net.ltgt.gradle.errorprone.CheckSeverity
import org.gradle.internal.os.OperatingSystem
-import smali.SmaliTask
import tasks.DownloadDependency
import tasks.GetJarsFromConfiguration
@@ -372,6 +371,7 @@
"r8-releases/2.0.74",
"r8-releases/3.2.54",
"r8mappings",
+ "smali",
"tachiyomi"
],
// All dex-vms have a fixed OS of Linux, as they are only supported on Linux, and will be run in a Docker
@@ -1632,53 +1632,6 @@
}
}
-task buildSmali {
- def smaliDir = file("src/test/smali")
- smaliDir.eachDirRecurse() { dir ->
- def name = dir.getName();
- def relativeDir = smaliDir.toPath().relativize(dir.toPath());
- def smaliOutputDir = file("build/test/smali/" + relativeDir);
- smaliOutputDir.mkdirs()
- outputs.dir smaliOutputDir
- def taskName = "smali_build_${relativeDir.toString().replace('/', '_').replace('\\', '_')}"
- def smaliFiles = fileTree(dir: dir, include: '*.smali')
- def javaFiles = fileTree(dir: dir, include: '*.java')
- def destDir = smaliOutputDir;
- def destFile = destDir.toPath().resolve("${name}.dex").toFile()
- def intermediateFileName = "${name}-intermediate.dex";
- def intermediateFile = destDir.toPath().resolve(intermediateFileName).toFile()
- if (javaFiles.empty) {
- if (!smaliFiles.empty) {
- dependsOn "${taskName}_smali"
- task "${taskName}_smali"(type: SmaliTask) {
- source = smaliFiles
- destination = destFile
- }
- }
- } else {
- dependsOn "${taskName}_smali"
- dependsOn "${taskName}_jar"
- task "${taskName}_smali"(type: SmaliTask) {
- source = smaliFiles
- destination = destFile
- }
- task "${taskName}_java"(type: JavaCompile) {
- source = javaFiles
- destinationDir destDir
- classpath = sourceSets.main.compileClasspath
- sourceCompatibility = JavaVersion.VERSION_1_7
- targetCompatibility = JavaVersion.VERSION_1_7
- options.compilerArgs += ["-Xlint:-options"]
- }
- task "${taskName}_jar"(type: Jar, dependsOn: "${taskName}_java") {
- archiveName = "Test.jar"
- destinationDir = destDir
- from fileTree(dir: destDir, include: 'Test.class')
- }
- }
- }
-}
-
tasks.withType(Test) {
println("NOTE: Number of processors " + Runtime.runtime.availableProcessors())
def userDefinedCoresPerFork = System.getenv('R8_GRADLE_CORES_PER_FORK')
@@ -2282,7 +2235,6 @@
dependsOn downloadDeps
dependsOn buildExamples
dependsOn buildKotlinR8TestResources
- dependsOn buildSmali
dependsOn buildPreNJdwpTestsJar
dependsOn compileTestNGRunner
dependsOn provideArtFrameworksDependencies
diff --git a/buildSrc/src/main/java/smali/SmaliTask.java b/buildSrc/src/main/java/smali/SmaliTask.java
deleted file mode 100644
index d35102e..0000000
--- a/buildSrc/src/main/java/smali/SmaliTask.java
+++ /dev/null
@@ -1,91 +0,0 @@
-// Copyright (c) 2019, 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 smali;
-
-import static java.util.stream.Collectors.toList;
-
-import com.android.tools.smali.smali.Smali;
-import com.android.tools.smali.smali.SmaliOptions;
-import java.io.File;
-import java.io.IOException;
-import java.io.UncheckedIOException;
-import java.util.List;
-import javax.inject.Inject;
-import org.gradle.api.DefaultTask;
-import org.gradle.api.file.FileTree;
-import org.gradle.api.file.RegularFileProperty;
-import org.gradle.api.provider.SetProperty;
-import org.gradle.api.tasks.InputFiles;
-import org.gradle.api.tasks.OutputFile;
-import org.gradle.api.tasks.TaskAction;
-import org.gradle.workers.WorkAction;
-import org.gradle.workers.WorkParameters;
-import org.gradle.workers.WorkerExecutor;
-
-public class SmaliTask extends DefaultTask {
-
- private final WorkerExecutor workerExecutor;
-
- private FileTree source;
- private File destination;
-
- @Inject
- public SmaliTask(WorkerExecutor workerExecutor) {
- this.workerExecutor = workerExecutor;
- }
-
- @InputFiles
- public FileTree getSource() {
- return source;
- }
-
- public void setSource(FileTree source) {
- this.source = source;
- }
-
- @OutputFile
- public File getDestination() {
- return destination;
- }
-
- public void setDestination(File destination) {
- this.destination = destination;
- }
-
- @TaskAction
- void exec() {
- workerExecutor
- .noIsolation()
- .submit(
- RunSmali.class,
- parameters -> {
- parameters.getSources().set(source.getFiles());
- parameters.getDestination().set(destination);
- });
- }
-
- public interface RunSmaliParameters extends WorkParameters {
-
- SetProperty<File> getSources();
-
- RegularFileProperty getDestination();
- }
-
- public abstract static class RunSmali implements WorkAction<RunSmaliParameters> {
-
- @Override
- public void execute() {
- try {
- RunSmaliParameters parameters = getParameters();
- List<String> fileNames =
- parameters.getSources().get().stream().map(File::toString).collect(toList());
- SmaliOptions options = new SmaliOptions();
- options.outputDexFile = parameters.getDestination().getAsFile().get().getCanonicalPath();
- Smali.assemble(options, fileNames);
- } catch (IOException e) {
- throw new UncheckedIOException(e);
- }
- }
- }
-}
diff --git a/d8_r8/commonBuildSrc/src/main/kotlin/DependenciesPlugin.kt b/d8_r8/commonBuildSrc/src/main/kotlin/DependenciesPlugin.kt
index a1796c3..ab4a518 100644
--- a/d8_r8/commonBuildSrc/src/main/kotlin/DependenciesPlugin.kt
+++ b/d8_r8/commonBuildSrc/src/main/kotlin/DependenciesPlugin.kt
@@ -2,23 +2,28 @@
// 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 java.io.File
+import java.net.URI
+import java.nio.file.Paths
+import org.gradle.api.JavaVersion
import org.gradle.api.Plugin
import org.gradle.api.Project
-import org.gradle.api.JavaVersion
import org.gradle.api.Task
-import org.gradle.api.tasks.Exec
-import java.io.File
-import java.nio.file.Path
-import java.nio.file.Paths
-import java.net.URI
+import org.gradle.api.file.ConfigurableFileCollection
+import org.gradle.api.plugins.JavaPluginExtension
+import org.gradle.api.tasks.SourceSet
+import org.gradle.jvm.tasks.Jar
+import org.gradle.kotlin.dsl.register
+import org.gradle.nativeplatform.platform.OperatingSystem
+import org.gradle.nativeplatform.platform.internal.DefaultNativePlatform
class DependenciesPlugin: Plugin<Project> {
override fun apply(target: Project) {
val dependenciesPath = "file:" +
- "${target.getRoot().resolve("third_party").resolve("dependencies").getAbsolutePath()}"
+ target.getRoot().resolve("third_party").resolve("dependencies").getAbsolutePath()
val dependenciesNewPath = "file:" +
- "${target.getRoot().resolve("third_party").resolve("dependencies_new").getAbsolutePath()}"
+ target.getRoot().resolve("third_party").resolve("dependencies_new").getAbsolutePath()
val repositories = target.getRepositories()
repositories.maven { name = "LOCAL_MAVEN_REPO"; url = URI(dependenciesPath) }
repositories.maven { name = "LOCAL_MAVEN_REPO_NEW"; url = URI(dependenciesNewPath) }
@@ -26,9 +31,39 @@
}
enum class Jdk(val folder : String) {
+ JDK_8("jdk8"),
+ JDK_9("openjdk-9.0.4"),
JDK_11("jdk-11"),
JDK_17("jdk-17"),
JDK_20("jdk-20");
+
+ fun isJdk8() : Boolean {
+ return this == JDK_8
+ }
+
+ fun getThirdPartyDependency() : ThirdPartyDependency {
+ val os: OperatingSystem = DefaultNativePlatform.getCurrentOperatingSystem()
+ val subFolder : String
+ val fileName : String
+ if (os.isLinux) {
+ subFolder = if(isJdk8()) "linux-x86" else "linux"
+ fileName = "java"
+ } else if (os.isMacOsX) {
+ subFolder = if(isJdk8()) "darwin-x86" else "osx"
+ fileName = "java"
+ } else {
+ assert(os.isWindows())
+ if (isJdk8()) {
+ throw RuntimeException("No Jdk8 on Windows")
+ }
+ subFolder = "windows"
+ fileName = "java.bat"
+ }
+ return ThirdPartyDependency(
+ name,
+ Paths.get("third_party", "openjdk", folder, subFolder, "bin", fileName).toFile(),
+ Paths.get("third_party", "openjdk", folder, "$subFolder.tar.gz.sha1").toFile())
+ }
}
fun Project.getRoot() : File {
@@ -43,6 +78,71 @@
return "****** ${title} ******"
}
+fun Project.ensureThirdPartyDependencies(name : String, deps : List<ThirdPartyDependency>) : Task {
+ val outputFiles : MutableList<File> = mutableListOf()
+ val depsTasks = deps.map({
+ tasks.register<DownloadDependencyTask>("download-third-party-${it.packageName}") {
+ setDependency(
+ it.packageName,
+ getRoot().resolve(it.sha1File),
+ getRoot().resolve(it.path).parentFile,
+ it.type)
+ outputFiles.add(it.path)
+ }})
+ return tasks.register("ensure-third-party-$name") {
+ dependsOn(depsTasks)
+ outputs.files(outputFiles)
+ }.get()
+}
+
+/**
+ * Builds a jar for each subfolder in an examples test source set.
+ *
+ * <p> As an example, src/test/examplesJava9 contains subfolders: backport, collectionof, ..., .
+ * These are compiled to individual jars and placed in <repo-root>/build/test/examplesJava9/ as:
+ * backport.jar, collectionof.jar, ..., .
+ *
+ * Calling this from a project will amend the task graph with the task named
+ * getExamplesJarsTaskName(examplesName) such that it can be referenced from the test runners.
+ */
+fun Project.buildJavaExamplesJars(examplesName : String) : Task {
+ val outputFiles : MutableList<File> = mutableListOf()
+ val jarTasks : MutableList<Task> = mutableListOf()
+ var testSourceSet = extensions
+ .getByType(JavaPluginExtension::class.java)
+ .sourceSets
+ // The TEST_SOURCE_SET_NAME is the source set defined by writing java { sourcesets.test { ... }}
+ .getByName(SourceSet.TEST_SOURCE_SET_NAME)
+ testSourceSet
+ .java
+ .sourceDirectories
+ .files
+ .forEach { srcDir ->
+ srcDir.listFiles(File::isDirectory)?.forEach { exampleDir ->
+ jarTasks.add(tasks.register<Jar>("jar-examples$examplesName-${exampleDir.name}") {
+ dependsOn("compileTestJava")
+ archiveFileName.set("${exampleDir.name}.jar")
+ destinationDirectory.set(getRoot().resolveAll("build", "test", "examples$examplesName"))
+ from(testSourceSet.output.classesDirs.files.map{ it.resolve(exampleDir.name) }) {
+ include("**/*.class")
+ }
+ }.get())
+ }
+ }
+ return tasks.register(getExamplesJarsTaskName(examplesName)) {
+ dependsOn(jarTasks)
+ outputs.files(outputFiles)
+ }.get()
+}
+
+fun Project.getExamplesJarsTaskName(name: String) : String {
+ return "build-example-jars-$name"
+}
+
+fun Project.resolve(thirdPartyDependency: ThirdPartyDependency) : ConfigurableFileCollection {
+ return files(project.getRoot().resolve(thirdPartyDependency.path))
+}
+
/**
* When using composite builds, referecing tasks in other projects do not give a Task but a
* TaskReference. To get outputs from other tasks we need to have a proper task and gradle do not
@@ -83,11 +183,12 @@
}
fun Project.baseCompilerCommandLine(
- jar : File, deps : File, compiler : String, args : List<String> = listOf()) : List<String> {
+ jar: File, deps: File, compiler: String, args: List<String> = listOf(),
+) : List<String> {
// Execute r8 commands against a stable r8 with dependencies.
// TODO(b/139725780): See if we can remove or lower the heap size (-Xmx8g).
return listOf(
- "${getJavaPath(Jdk.JDK_17)}",
+ getJavaPath(Jdk.JDK_17),
"-Xmx8g",
"-ea",
"-cp",
@@ -97,11 +198,12 @@
}
fun Project.baseCompilerCommandLine(
- jar : File, compiler : String, args : List<String> = listOf()) : List<String> {
+ jar: File, compiler: String, args: List<String> = listOf(),
+) : List<String> {
// Execute r8 commands against a stable r8 with dependencies.
// TODO(b/139725780): See if we can remove or lower the heap size (-Xmx8g).
return listOf(
- "${getJavaPath(Jdk.JDK_17)}",
+ getJavaPath(Jdk.JDK_17),
"-Xmx8g",
"-ea",
"-cp",
@@ -111,14 +213,14 @@
}
fun Project.createR8LibCommandLine(
- r8Compiler : File,
- input : File,
+ r8Compiler: File,
+ input: File,
output: File,
- pgConf : List<File>,
- excludingDepsVariant : Boolean,
- lib : List<File> = listOf(),
- classpath : List<File> = listOf(),
- args : List<String> = listOf()) : List<String> {
+ pgConf: List<File>,
+ excludingDepsVariant: Boolean,
+ lib: List<File> = listOf(),
+ classpath: List<File> = listOf()
+) : List<String> {
val pgList = pgConf.flatMap({ listOf("--pg-conf", "$it") })
val libList = lib.flatMap({ listOf("--lib", "$it") })
val cpList = classpath.flatMap({ listOf("--classpath", "$it") })
@@ -142,15 +244,16 @@
object Versions {
const val asmVersion = "9.5"
+ const val errorproneVersion = "2.18.0"
const val fastUtilVersion = "7.2.1"
const val gsonVersion = "2.7"
const val guavaVersion = "31.1-jre"
+ const val javassist = "3.29.2-GA"
const val junitVersion = "4.13-beta-2"
const val kotlinVersion = "1.8.10"
const val kotlinMetadataVersion = "0.6.2"
+ const val mockito = "2.10.0"
const val smaliVersion = "3.0.3"
- const val errorproneVersion = "2.18.0"
- const val javassist = "3.29.2-GA"
}
object Deps {
@@ -166,6 +269,108 @@
"org.jetbrains.kotlinx:kotlinx-metadata-jvm:${Versions.kotlinMetadataVersion}" }
val kotlinStdLib by lazy { "org.jetbrains.kotlin:kotlin-stdlib:${Versions.kotlinVersion}" }
val kotlinReflect by lazy { "org.jetbrains.kotlin:kotlin-reflect:${Versions.kotlinVersion}" }
+ val mockito by lazy { "org.mockito:mockito-core:${Versions.mockito}" }
val smali by lazy { "com.android.tools.smali:smali:${Versions.smaliVersion}" }
val errorprone by lazy { "com.google.errorprone:error_prone_core:${Versions.errorproneVersion}" }
}
+
+object ThirdPartyDeps {
+ val apiDatabase = ThirdPartyDependency(
+ "apiDatabase",
+ Paths.get(
+ "third_party",
+ "api_database",
+ "api_database",
+ "resources",
+ "new_api_database.ser").toFile(),
+ Paths.get("third_party", "api_database", "api_database.tar.gz.sha1").toFile())
+ val ddmLib = ThirdPartyDependency(
+ "ddmlib",
+ Paths.get("third_party", "ddmlib", "ddmlib.jar").toFile(),
+ Paths.get("third_party", "ddmlib.tar.gz.sha1").toFile())
+ val jasmin = ThirdPartyDependency(
+ "jasmin",
+ Paths.get("third_party", "jasmin", "jasmin-2.4.jar").toFile(),
+ Paths.get("third_party", "jasmin.tar.gz.sha1").toFile())
+ val jdwpTests = ThirdPartyDependency(
+ "jdwp-tests",
+ Paths.get("third_party", "jdwp-tests", "apache-harmony-jdwp-tests-host.jar").toFile(),
+ Paths.get("third_party", "jdwp-tests.tar.gz.sha1").toFile())
+ val androidJars : List<ThirdPartyDependency> = getThirdPartyAndroidJars()
+ val java8Runtime = ThirdPartyDependency(
+ "openjdk-rt-1.8",
+ Paths.get("third_party", "openjdk", "openjdk-rt-1.8", "rt.jar").toFile(),
+ Paths.get("third_party", "openjdk", "openjdk-rt-1.8.tar.gz.sha1").toFile()
+ )
+ val androidVMs : List<ThirdPartyDependency> = getThirdPartyAndroidVms()
+ val jdks : List<ThirdPartyDependency> = getJdks()
+}
+
+fun getThirdPartyAndroidJars() : List<ThirdPartyDependency> {
+ return listOf(
+ "libcore_latest",
+ "lib-master",
+ "lib-v14",
+ "lib-v15",
+ "lib-v19",
+ "lib-v21",
+ "lib-v22",
+ "lib-v23",
+ "lib-v24",
+ "lib-v25",
+ "lib-v26",
+ "lib-v27",
+ "lib-v28",
+ "lib-v29",
+ "lib-v30",
+ "lib-v31",
+ "lib-v32",
+ "lib-v33",
+ "lib-v34"
+ ).map(::getThirdPartyAndroidJar)
+}
+
+fun getThirdPartyAndroidJar(version : String) : ThirdPartyDependency {
+ return ThirdPartyDependency(
+ version,
+ Paths.get("third_party", "android_jar", version, "android.jar").toFile(),
+ Paths.get("third_party", "android_jar", "$version.tar.gz.sha1").toFile())
+}
+
+fun getThirdPartyAndroidVms() : List<ThirdPartyDependency> {
+ return listOf(
+ listOf("host", "art-master"),
+ listOf("host", "art-14.0.0-dp1"),
+ listOf("host", "art-13.0.0"),
+ listOf("host", "art-12.0.0-beta4"),
+ listOf("art-10.0.0"),
+ listOf("art-5.1.1"),
+ listOf("art-6.0.1"),
+ listOf("art-7.0.0"),
+ listOf("art-8.1.0"),
+ listOf("art-9.0.0"),
+ listOf("art"),
+ listOf("dalvik-4.0.4"),
+ listOf("dalvik")).map(::getThirdPartyAndroidVm)
+}
+
+fun getThirdPartyAndroidVm(version : List<String>) : ThirdPartyDependency {
+ val output = Paths.get("tools", "linux", *version.toTypedArray(), "bin", "art").toFile()
+ return ThirdPartyDependency(
+ version.last(),
+ output,
+ Paths.get(
+ "tools",
+ "linux",
+ *version.slice(0..version.size - 2).toTypedArray(),
+ "${version.last()}.tar.gz.sha1").toFile())
+}
+
+fun getJdks() : List<ThirdPartyDependency> {
+ val os: OperatingSystem = DefaultNativePlatform.getCurrentOperatingSystem()
+ if (os.isLinux || os.isMacOsX) {
+ return Jdk.values().map{ it.getThirdPartyDependency()}
+ } else {
+ return Jdk.values().filter{ !it.isJdk8() }.map{ it.getThirdPartyDependency()}
+ }
+}
\ No newline at end of file
diff --git a/d8_r8/commonBuildSrc/src/main/kotlin/DownloadDependencyTask.kt b/d8_r8/commonBuildSrc/src/main/kotlin/DownloadDependencyTask.kt
new file mode 100644
index 0000000..24185c6
--- /dev/null
+++ b/d8_r8/commonBuildSrc/src/main/kotlin/DownloadDependencyTask.kt
@@ -0,0 +1,143 @@
+// Copyright (c) 2023, 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 java.io.BufferedReader
+import java.io.File
+import java.io.IOException
+import java.io.InputStreamReader
+import java.nio.charset.StandardCharsets
+import java.util.Arrays
+import java.util.stream.Collectors
+import javax.inject.Inject
+import org.gradle.api.DefaultTask
+import org.gradle.api.file.RegularFileProperty
+import org.gradle.api.provider.Property
+import org.gradle.api.tasks.OutputDirectory
+import org.gradle.api.tasks.TaskAction
+import org.gradle.api.tasks.options.Option
+import org.gradle.internal.os.OperatingSystem
+import org.gradle.workers.WorkAction
+import org.gradle.workers.WorkParameters
+import org.gradle.workers.WorkerExecutor
+
+abstract class DownloadDependencyTask : DefaultTask() {
+
+ private var dependencyType: DependencyType = DependencyType.GOOGLE_STORAGE
+ private var _outputDir: File? = null
+ private var _tarGzFile: File? = null
+ private var _sha1File: File? = null
+
+ @OutputDirectory
+ fun getOutputDir(): File? {
+ return _outputDir
+ }
+
+ @Inject
+ protected abstract fun getWorkerExecutor(): WorkerExecutor?
+
+ @Option(
+ option = "dependency",
+ description = "Sets the dependency information for a cloud stored file")
+ fun setDependency(
+ dependencyName : String, sha1File: File, outputDir : File, dependencyType: DependencyType) {
+ _outputDir = outputDir
+ _sha1File = sha1File
+ _tarGzFile = sha1File.resolveSibling(sha1File.name.replace(".sha1", ""))
+ this.dependencyType = dependencyType
+ }
+
+ @TaskAction
+ fun execute() {
+ val sha1File = _sha1File!!
+ val outputDir = _outputDir!!
+ val tarGzFile = _tarGzFile!!
+ if (!sha1File.exists()) {
+ throw RuntimeException("Missing sha1 file: $sha1File")
+ }
+ // First run will write the tar.gz file, causing the second run to still be out-of-date.
+ // Check if the modification time of the tar is newer than the sha in which case we are done.
+ // Also, check the contents of the out directory because gradle appears to create it for us...
+ if (outputDir.exists()
+ && outputDir.isDirectory
+ && outputDir.list().isNotEmpty() && tarGzFile.exists()
+ && sha1File.lastModified() <= tarGzFile.lastModified()) {
+ return
+ }
+ if (outputDir.exists() && outputDir.isDirectory) {
+ outputDir.delete()
+ }
+ getWorkerExecutor()!!
+ .noIsolation()
+ .submit(RunDownload::class.java) {
+ this.type.set(dependencyType)
+ this.sha1File.set(sha1File)
+ }
+ }
+
+
+ interface RunDownloadParameters : WorkParameters {
+ val type : Property<DependencyType>
+ val sha1File : RegularFileProperty
+ }
+
+ abstract class RunDownload : WorkAction<RunDownloadParameters> {
+ override fun execute() {
+ try {
+ val parameters: RunDownloadParameters = parameters
+ val type: DependencyType = parameters.type.get()
+ val sha1File: File = parameters.sha1File.asFile.get()
+ if (type == DependencyType.GOOGLE_STORAGE) {
+ downloadFromGoogleStorage(sha1File)
+ } else if (type == DependencyType.X20) {
+ downloadFromX20(sha1File)
+ } else {
+ throw RuntimeException("Unexpected or missing dependency type: $type")
+ }
+ } catch (e: Exception) {
+ throw RuntimeException(e)
+ }
+ }
+
+ @Throws(IOException::class, InterruptedException::class)
+ private fun downloadFromGoogleStorage(sha1File: File) {
+ val args = Arrays.asList("-n", "-b", "r8-deps", "-s", "-u", sha1File.toString())
+ if (OperatingSystem.current().isWindows) {
+ val command: MutableList<String> = ArrayList()
+ command.add("download_from_google_storage.bat")
+ command.addAll(args)
+ runProcess(ProcessBuilder().command(command))
+ } else {
+ runProcess(
+ ProcessBuilder()
+ .command("bash",
+ "-c",
+ "download_from_google_storage " + java.lang.String.join(" ", args)))
+ }
+ }
+
+ @Throws(IOException::class, InterruptedException::class)
+ private fun downloadFromX20(sha1File: File) {
+ if (OperatingSystem.current().isWindows) {
+ throw RuntimeException("Downloading from x20 unsupported on windows")
+ }
+ runProcess(
+ ProcessBuilder()
+ .command("bash", "-c", "tools/download_from_x20.py $sha1File"))
+ }
+
+ @Throws(IOException::class, InterruptedException::class)
+ private fun runProcess(builder: ProcessBuilder) {
+ val command = java.lang.String.join(" ", builder.command())
+ val p = builder.start()
+ val exit = p.waitFor()
+ if (exit != 0) {
+ throw IOException("Process failed for $command\n"
+ + BufferedReader(
+ InputStreamReader(p.errorStream, StandardCharsets.UTF_8))
+ .lines()
+ .collect(Collectors.joining("\n")))
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/d8_r8/commonBuildSrc/src/main/kotlin/ThirdPartyDependency.kt b/d8_r8/commonBuildSrc/src/main/kotlin/ThirdPartyDependency.kt
new file mode 100644
index 0000000..510892d
--- /dev/null
+++ b/d8_r8/commonBuildSrc/src/main/kotlin/ThirdPartyDependency.kt
@@ -0,0 +1,16 @@
+// Copyright (c) 2023, 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 java.io.File
+
+enum class DependencyType {
+ GOOGLE_STORAGE,
+ X20
+}
+
+data class ThirdPartyDependency(
+ val packageName : String,
+ val path : File,
+ val sha1File : File,
+ val type: DependencyType = DependencyType.GOOGLE_STORAGE)
diff --git a/d8_r8/main/build.gradle.kts b/d8_r8/main/build.gradle.kts
index 34a1c14..a04d4f1 100644
--- a/d8_r8/main/build.gradle.kts
+++ b/d8_r8/main/build.gradle.kts
@@ -23,8 +23,8 @@
dependencies {
implementation(":keepanno")
compileOnly(Deps.asm)
- compileOnly(Deps.asmUtil)
compileOnly(Deps.asmCommons)
+ compileOnly(Deps.asmUtil)
compileOnly(Deps.fastUtil)
compileOnly(Deps.gson)
compileOnly(Deps.guava)
@@ -32,6 +32,10 @@
errorprone(Deps.errorprone)
}
+val thirdPartyResourceDependenciesTask = ensureThirdPartyDependencies(
+ "resourceDeps",
+ listOf(ThirdPartyDeps.apiDatabase))
+
val keepAnnoJarTask = projectTask("keepanno", "jar")
fun mainJarDependencies() : FileCollection {
@@ -52,6 +56,10 @@
}
}
+ withType<ProcessResources> {
+ dependsOn(thirdPartyResourceDependenciesTask)
+ }
+
val swissArmyKnife by registering(Jar::class) {
from(sourceSets.main.get().output)
manifest {
@@ -64,7 +72,9 @@
val depsJar by registering(Jar::class) {
dependsOn(keepAnnoJarTask)
- println(header("R8 full dependencies"))
+ doFirst {
+ println(header("R8 full dependencies"))
+ }
mainJarDependencies().forEach({ println(it) })
from(mainJarDependencies().map(::zipTree))
from(keepAnnoJarTask.outputs.files.map(::zipTree))
diff --git a/d8_r8/settings.gradle.kts b/d8_r8/settings.gradle.kts
index 70bb38b..402137e 100644
--- a/d8_r8/settings.gradle.kts
+++ b/d8_r8/settings.gradle.kts
@@ -29,7 +29,7 @@
)
println("Executing command: ${cmd.joinToString(" ")}")
var process = ProcessBuilder().command(cmd).start()
- process.waitFor(5, java.util.concurrent.TimeUnit.SECONDS)
+ process.waitFor()
if (process.exitValue() != 0) {
throw GradleException(
"Bootstrapping dependencies_new download failed:\n"
diff --git a/d8_r8/test/settings.gradle.kts b/d8_r8/test/settings.gradle.kts
index 401f476..ed1f4ea 100644
--- a/d8_r8/test/settings.gradle.kts
+++ b/d8_r8/test/settings.gradle.kts
@@ -6,4 +6,13 @@
val root = rootProject.projectDir.parentFile
includeBuild(root.resolve("main"))
+includeBuild(root.resolve("test_modules").resolve("tests_java_examples"))
+includeBuild(root.resolve("test_modules").resolve("tests_java_examplesAndroidN"))
+includeBuild(root.resolve("test_modules").resolve("tests_java_examplesAndroidP"))
+includeBuild(root.resolve("test_modules").resolve("tests_java_examplesAndroidO"))
includeBuild(root.resolve("test_modules").resolve("tests_java_8"))
+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"))
+includeBuild(root.resolve("test_modules").resolve("tests_java_17"))
+includeBuild(root.resolve("test_modules").resolve("tests_java_20"))
diff --git a/d8_r8/test_modules/tests_java_10/build.gradle.kts b/d8_r8/test_modules/tests_java_10/build.gradle.kts
new file mode 100644
index 0000000..f24610d
--- /dev/null
+++ b/d8_r8/test_modules/tests_java_10/build.gradle.kts
@@ -0,0 +1,36 @@
+// Copyright (c) 2023, 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.test.configure {
+ java.srcDir(root.resolveAll("src", "test", "examplesJava10"))
+ }
+ sourceCompatibility = JavaVersion.VERSION_1_10
+ targetCompatibility = JavaVersion.VERSION_1_10
+}
+
+dependencies { }
+
+// We just need to register the examples jars for it to be referenced by other modules.
+val buildExampleJars = buildJavaExamplesJars("Java10")
+
+tasks {
+ withType<JavaCompile> {
+ options.setFork(true)
+ options.forkOptions.memoryMaximumSize = "3g"
+ options.forkOptions.executable = getCompilerPath(Jdk.JDK_11)
+ }
+}
+
diff --git a/d8_r8/test_modules/tests_java_10/gradle.properties b/d8_r8/test_modules/tests_java_10/gradle.properties
new file mode 100644
index 0000000..1de43f9
--- /dev/null
+++ b/d8_r8/test_modules/tests_java_10/gradle.properties
@@ -0,0 +1,17 @@
+# Copyright (c) 2023, 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.
+
+org.gradle.jvmargs=-Xmx2048M -Dfile.encoding=UTF-8
+kotlin.daemon.jvmargs=-Xmx3g -Dkotlin.js.compiler.legacy.force_enabled=true
+systemProp.file.encoding=UTF-8
+
+# Enable new incremental compilation
+kotlin.incremental.useClasspathSnapshot=true
+
+org.gradle.parallel=true
+org.gradle.caching=true
+
+# Do not download any jdks or detect them. We provide them.
+org.gradle.java.installations.auto-detect=false
+org.gradle.java.installations.auto-download=false
diff --git a/d8_r8/test_modules/tests_java_10/settings.gradle.kts b/d8_r8/test_modules/tests_java_10/settings.gradle.kts
new file mode 100644
index 0000000..247cb9c
--- /dev/null
+++ b/d8_r8/test_modules/tests_java_10/settings.gradle.kts
@@ -0,0 +1,5 @@
+// Copyright (c) 2023, 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.
+
+rootProject.name = "tests_java_10"
diff --git a/d8_r8/test_modules/tests_java_11/build.gradle.kts b/d8_r8/test_modules/tests_java_11/build.gradle.kts
new file mode 100644
index 0000000..1ff3ea8
--- /dev/null
+++ b/d8_r8/test_modules/tests_java_11/build.gradle.kts
@@ -0,0 +1,36 @@
+// Copyright (c) 2023, 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.test.configure {
+ java.srcDir(root.resolveAll("src", "test", "examplesJava11"))
+ }
+ sourceCompatibility = JavaVersion.VERSION_11
+ targetCompatibility = JavaVersion.VERSION_11
+}
+
+dependencies { }
+
+// We just need to register the examples jars for it to be referenced by other modules.
+val buildExampleJars = buildJavaExamplesJars("Java11")
+
+tasks {
+ withType<JavaCompile> {
+ options.setFork(true)
+ options.forkOptions.memoryMaximumSize = "3g"
+ options.forkOptions.executable = getCompilerPath(Jdk.JDK_11)
+ }
+}
+
diff --git a/d8_r8/test_modules/tests_java_11/gradle.properties b/d8_r8/test_modules/tests_java_11/gradle.properties
new file mode 100644
index 0000000..1de43f9
--- /dev/null
+++ b/d8_r8/test_modules/tests_java_11/gradle.properties
@@ -0,0 +1,17 @@
+# Copyright (c) 2023, 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.
+
+org.gradle.jvmargs=-Xmx2048M -Dfile.encoding=UTF-8
+kotlin.daemon.jvmargs=-Xmx3g -Dkotlin.js.compiler.legacy.force_enabled=true
+systemProp.file.encoding=UTF-8
+
+# Enable new incremental compilation
+kotlin.incremental.useClasspathSnapshot=true
+
+org.gradle.parallel=true
+org.gradle.caching=true
+
+# Do not download any jdks or detect them. We provide them.
+org.gradle.java.installations.auto-detect=false
+org.gradle.java.installations.auto-download=false
diff --git a/d8_r8/test_modules/tests_java_11/settings.gradle.kts b/d8_r8/test_modules/tests_java_11/settings.gradle.kts
new file mode 100644
index 0000000..e737a8a
--- /dev/null
+++ b/d8_r8/test_modules/tests_java_11/settings.gradle.kts
@@ -0,0 +1,5 @@
+// Copyright (c) 2023, 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.
+
+rootProject.name = "tests_java_11"
diff --git a/d8_r8/test_modules/tests_java_17/build.gradle.kts b/d8_r8/test_modules/tests_java_17/build.gradle.kts
new file mode 100644
index 0000000..9e0f2b7
--- /dev/null
+++ b/d8_r8/test_modules/tests_java_17/build.gradle.kts
@@ -0,0 +1,36 @@
+// Copyright (c) 2023, 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.test.configure {
+ java.srcDir(root.resolveAll("src", "test", "examplesJava17"))
+ }
+ sourceCompatibility = JavaVersion.VERSION_17
+ targetCompatibility = JavaVersion.VERSION_17
+}
+
+dependencies { }
+
+// We just need to register the examples jars for it to be referenced by other modules.
+val buildExampleJars = buildJavaExamplesJars("Java17")
+
+tasks {
+ withType<JavaCompile> {
+ options.setFork(true)
+ options.forkOptions.memoryMaximumSize = "3g"
+ options.forkOptions.executable = getCompilerPath(Jdk.JDK_17)
+ }
+}
+
diff --git a/d8_r8/test_modules/tests_java_17/gradle.properties b/d8_r8/test_modules/tests_java_17/gradle.properties
new file mode 100644
index 0000000..1de43f9
--- /dev/null
+++ b/d8_r8/test_modules/tests_java_17/gradle.properties
@@ -0,0 +1,17 @@
+# Copyright (c) 2023, 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.
+
+org.gradle.jvmargs=-Xmx2048M -Dfile.encoding=UTF-8
+kotlin.daemon.jvmargs=-Xmx3g -Dkotlin.js.compiler.legacy.force_enabled=true
+systemProp.file.encoding=UTF-8
+
+# Enable new incremental compilation
+kotlin.incremental.useClasspathSnapshot=true
+
+org.gradle.parallel=true
+org.gradle.caching=true
+
+# Do not download any jdks or detect them. We provide them.
+org.gradle.java.installations.auto-detect=false
+org.gradle.java.installations.auto-download=false
diff --git a/d8_r8/test_modules/tests_java_17/settings.gradle.kts b/d8_r8/test_modules/tests_java_17/settings.gradle.kts
new file mode 100644
index 0000000..aa2b7b1
--- /dev/null
+++ b/d8_r8/test_modules/tests_java_17/settings.gradle.kts
@@ -0,0 +1,5 @@
+// Copyright (c) 2023, 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.
+
+rootProject.name = "tests_java_17"
diff --git a/d8_r8/test_modules/tests_java_20/build.gradle.kts b/d8_r8/test_modules/tests_java_20/build.gradle.kts
new file mode 100644
index 0000000..85cd393
--- /dev/null
+++ b/d8_r8/test_modules/tests_java_20/build.gradle.kts
@@ -0,0 +1,36 @@
+// Copyright (c) 2023, 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.test.configure {
+ java.srcDir(root.resolveAll("src", "test", "examplesJava20"))
+ }
+ sourceCompatibility = JavaVersion.VERSION_20
+ targetCompatibility = JavaVersion.VERSION_20
+}
+
+dependencies { }
+
+// We just need to register the examples jars for it to be referenced by other modules.
+val buildExampleJars = buildJavaExamplesJars("Java20")
+
+tasks {
+ withType<JavaCompile> {
+ options.setFork(true)
+ options.forkOptions.memoryMaximumSize = "3g"
+ options.forkOptions.executable = getCompilerPath(Jdk.JDK_20)
+ }
+}
+
diff --git a/d8_r8/test_modules/tests_java_20/gradle.properties b/d8_r8/test_modules/tests_java_20/gradle.properties
new file mode 100644
index 0000000..1de43f9
--- /dev/null
+++ b/d8_r8/test_modules/tests_java_20/gradle.properties
@@ -0,0 +1,17 @@
+# Copyright (c) 2023, 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.
+
+org.gradle.jvmargs=-Xmx2048M -Dfile.encoding=UTF-8
+kotlin.daemon.jvmargs=-Xmx3g -Dkotlin.js.compiler.legacy.force_enabled=true
+systemProp.file.encoding=UTF-8
+
+# Enable new incremental compilation
+kotlin.incremental.useClasspathSnapshot=true
+
+org.gradle.parallel=true
+org.gradle.caching=true
+
+# Do not download any jdks or detect them. We provide them.
+org.gradle.java.installations.auto-detect=false
+org.gradle.java.installations.auto-download=false
diff --git a/d8_r8/test_modules/tests_java_20/settings.gradle.kts b/d8_r8/test_modules/tests_java_20/settings.gradle.kts
new file mode 100644
index 0000000..eaac41f
--- /dev/null
+++ b/d8_r8/test_modules/tests_java_20/settings.gradle.kts
@@ -0,0 +1,5 @@
+// Copyright (c) 2023, 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.
+
+rootProject.name = "tests_java_20"
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 55ee7a8..3493286 100644
--- a/d8_r8/test_modules/tests_java_8/build.gradle.kts
+++ b/d8_r8/test_modules/tests_java_8/build.gradle.kts
@@ -17,8 +17,8 @@
sourceSets.test.configure {
java.srcDir(root.resolveAll("src", "test", "java"))
}
- // We cannot use languageVersion.set(JavaLanguageVersion.of(8)) because gradle cannot figure
- // out that the jdk is 1_8 and will try to download it.
+ // 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
}
@@ -29,6 +29,8 @@
implementation(projectTask("keepanno", "jar").outputs.files)
implementation(projectTask("main", "jar").outputs.files)
implementation(Deps.asm)
+ implementation(Deps.asmCommons)
+ implementation(Deps.asmUtil)
implementation(Deps.gson)
implementation(Deps.guava)
implementation(Deps.javassist)
@@ -36,16 +38,39 @@
implementation(Deps.kotlinStdLib)
implementation(Deps.kotlinReflect)
implementation(Deps.kotlinMetadata)
- implementation(files(root.resolveAll("third_party", "ddmlib", "ddmlib.jar")))
- implementation(
- files(
- root.resolveAll("third_party", "jdwp-tests", "apache-harmony-jdwp-tests-host.jar")))
- implementation(files(root.resolveAll("third_party", "jasmin", "jasmin-2.4.jar")))
+ implementation(resolve(ThirdPartyDeps.ddmLib))
+ implementation(resolve(ThirdPartyDeps.jasmin))
+ implementation(resolve(ThirdPartyDeps.jdwpTests))
implementation(Deps.fastUtil)
implementation(Deps.smali)
- implementation(Deps.asmUtil)
}
+val thirdPartyCompileDependenciesTask = ensureThirdPartyDependencies(
+ "compileDeps",
+ listOf(
+ ThirdPartyDeps.apiDatabase,
+ ThirdPartyDeps.ddmLib,
+ ThirdPartyDeps.jasmin,
+ ThirdPartyDeps.jdwpTests))
+
+val thirdPartyRuntimeDependenciesTask = ensureThirdPartyDependencies(
+ "runtimeDeps",
+ listOf(ThirdPartyDeps.java8Runtime)
+ + ThirdPartyDeps.androidJars
+ + ThirdPartyDeps.androidVMs
+ + ThirdPartyDeps.jdks)
+
+val sourceSetDependenciesTasks = arrayOf(
+ projectTask("tests_java_examples", getExamplesJarsTaskName("")),
+ projectTask("tests_java_examplesAndroidN", getExamplesJarsTaskName("AndroidN")),
+ projectTask("tests_java_examplesAndroidO", getExamplesJarsTaskName("AndroidO")),
+ projectTask("tests_java_examplesAndroidP", getExamplesJarsTaskName("AndroidP")),
+ projectTask("tests_java_9", getExamplesJarsTaskName("Java9")),
+ projectTask("tests_java_10", getExamplesJarsTaskName("Java10")),
+ projectTask("tests_java_11", getExamplesJarsTaskName("Java11")),
+ projectTask("tests_java_17", getExamplesJarsTaskName("Java17")),
+ projectTask("tests_java_20", getExamplesJarsTaskName("Java20")))
+
fun testDependencies() : FileCollection {
return sourceSets
.test
@@ -62,6 +87,7 @@
withType<JavaCompile> {
dependsOn(gradle.includedBuild("keepanno").task(":jar"))
dependsOn(gradle.includedBuild("main").task(":jar"))
+ dependsOn(thirdPartyCompileDependenciesTask)
options.setFork(true)
options.forkOptions.memoryMaximumSize = "3g"
options.forkOptions.jvmArgs = listOf(
@@ -73,20 +99,45 @@
withType<KotlinCompile> {
dependsOn(gradle.includedBuild("keepanno").task(":jar"))
dependsOn(gradle.includedBuild("main").task(":jar"))
+ dependsOn(thirdPartyCompileDependenciesTask)
kotlinOptions {
- // We cannot use languageVersion.set(JavaLanguageVersion.of(8)) because gradle cannot figure
- // out that the jdk is 1_8 and will try to download it.
+ // We are using a new JDK to compile to an older language version, which is not directly
+ // compatible with java toolchains.
jvmTarget = "1.8"
}
}
+ withType<Test> {
+ environment.put("USE_NEW_GRADLE_SETUP", "true")
+ dependsOn(thirdPartyRuntimeDependenciesTask)
+ dependsOn(*sourceSetDependenciesTasks)
+ println("NOTE: Number of processors " + Runtime.getRuntime().availableProcessors())
+ val userDefinedCoresPerFork = System.getenv("R8_GRADLE_CORES_PER_FORK")
+ val processors = Runtime.getRuntime().availableProcessors()
+ // See https://docs.gradle.org/current/dsl/org.gradle.api.tasks.testing.Test.html.
+ if (!userDefinedCoresPerFork.isNullOrEmpty()) {
+ maxParallelForks = processors / userDefinedCoresPerFork.toInt()
+ } else {
+ // On normal work machines this seems to give the best test execution time (without freezing)
+ maxParallelForks = processors / 3
+ // On low cpu count machines (bots) we under subscribe, so increase the count.
+ if (processors == 8) {
+ maxParallelForks = 3
+ }
+ }
+ println("NOTE: Max parallel forks " + maxParallelForks)
+ }
+
val testJar by registering(Jar::class) {
from(sourceSets.test.get().output)
}
val depsJar by registering(Jar::class) {
dependsOn(gradle.includedBuild("keepanno").task(":jar"))
- println(header("Test Java 8 dependencies"))
+ dependsOn(thirdPartyCompileDependenciesTask)
+ doFirst {
+ println(header("Test Java 8 dependencies"))
+ }
testDependencies().forEach({ println(it) })
from(testDependencies().map(::zipTree))
duplicatesStrategy = DuplicatesStrategy.EXCLUDE
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 da320a7..73f5d73 100644
--- a/d8_r8/test_modules/tests_java_8/settings.gradle.kts
+++ b/d8_r8/test_modules/tests_java_8/settings.gradle.kts
@@ -10,3 +10,14 @@
// 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("tests_java_examples"))
+includeBuild(root.resolve("test_modules").resolve("tests_java_examplesAndroidN"))
+includeBuild(root.resolve("test_modules").resolve("tests_java_examplesAndroidO"))
+includeBuild(root.resolve("test_modules").resolve("tests_java_examplesAndroidP"))
+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"))
+includeBuild(root.resolve("test_modules").resolve("tests_java_17"))
+includeBuild(root.resolve("test_modules").resolve("tests_java_20"))
+
diff --git a/d8_r8/test_modules/tests_java_9/build.gradle.kts b/d8_r8/test_modules/tests_java_9/build.gradle.kts
new file mode 100644
index 0000000..ac5923f
--- /dev/null
+++ b/d8_r8/test_modules/tests_java_9/build.gradle.kts
@@ -0,0 +1,36 @@
+// Copyright (c) 2023, 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.test.configure {
+ java.srcDir(root.resolveAll("src", "test", "examplesJava9"))
+ }
+ sourceCompatibility = JavaVersion.VERSION_1_9
+ targetCompatibility = JavaVersion.VERSION_1_9
+}
+
+dependencies { }
+
+// We just need to register the examples jars for it to be referenced by other modules.
+val buildExampleJars = buildJavaExamplesJars("Java9")
+
+tasks {
+ withType<JavaCompile> {
+ options.setFork(true)
+ options.forkOptions.memoryMaximumSize = "3g"
+ options.forkOptions.executable = getCompilerPath(Jdk.JDK_9)
+ }
+}
+
diff --git a/d8_r8/test_modules/tests_java_9/gradle.properties b/d8_r8/test_modules/tests_java_9/gradle.properties
new file mode 100644
index 0000000..1de43f9
--- /dev/null
+++ b/d8_r8/test_modules/tests_java_9/gradle.properties
@@ -0,0 +1,17 @@
+# Copyright (c) 2023, 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.
+
+org.gradle.jvmargs=-Xmx2048M -Dfile.encoding=UTF-8
+kotlin.daemon.jvmargs=-Xmx3g -Dkotlin.js.compiler.legacy.force_enabled=true
+systemProp.file.encoding=UTF-8
+
+# Enable new incremental compilation
+kotlin.incremental.useClasspathSnapshot=true
+
+org.gradle.parallel=true
+org.gradle.caching=true
+
+# Do not download any jdks or detect them. We provide them.
+org.gradle.java.installations.auto-detect=false
+org.gradle.java.installations.auto-download=false
diff --git a/d8_r8/test_modules/tests_java_9/settings.gradle.kts b/d8_r8/test_modules/tests_java_9/settings.gradle.kts
new file mode 100644
index 0000000..b8a5260
--- /dev/null
+++ b/d8_r8/test_modules/tests_java_9/settings.gradle.kts
@@ -0,0 +1,5 @@
+// Copyright (c) 2023, 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.
+
+rootProject.name = "tests_java_9"
diff --git a/d8_r8/test_modules/tests_java_examples/build.gradle.kts b/d8_r8/test_modules/tests_java_examples/build.gradle.kts
new file mode 100644
index 0000000..05798be
--- /dev/null
+++ b/d8_r8/test_modules/tests_java_examples/build.gradle.kts
@@ -0,0 +1,41 @@
+// Copyright (c) 2023, 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.test.configure {
+ java.srcDirs.clear()
+ java.srcDir(root.resolveAll("src", "test", "examples"))
+ }
+ sourceCompatibility = JavaVersion.VERSION_1_8
+ targetCompatibility = JavaVersion.VERSION_1_8
+}
+
+dependencies {
+ testCompileOnly(Deps.mockito)
+}
+
+// We just need to register the examples jars for it to be referenced by other modules.
+val buildExampleJars = buildJavaExamplesJars("")
+
+tasks {
+ withType<JavaCompile> {
+ options.setFork(true)
+ options.forkOptions.memoryMaximumSize = "3g"
+ options.forkOptions.jvmArgs = listOf(
+ "-Xss256m",
+ // Set the bootclass path so compilation is consistent with 1.8 target compatibility.
+ "-Xbootclasspath/a:third_party/openjdk/openjdk-rt-1.8/rt.jar")
+ }
+}
diff --git a/d8_r8/test_modules/tests_java_examples/gradle.properties b/d8_r8/test_modules/tests_java_examples/gradle.properties
new file mode 100644
index 0000000..1de43f9
--- /dev/null
+++ b/d8_r8/test_modules/tests_java_examples/gradle.properties
@@ -0,0 +1,17 @@
+# Copyright (c) 2023, 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.
+
+org.gradle.jvmargs=-Xmx2048M -Dfile.encoding=UTF-8
+kotlin.daemon.jvmargs=-Xmx3g -Dkotlin.js.compiler.legacy.force_enabled=true
+systemProp.file.encoding=UTF-8
+
+# Enable new incremental compilation
+kotlin.incremental.useClasspathSnapshot=true
+
+org.gradle.parallel=true
+org.gradle.caching=true
+
+# Do not download any jdks or detect them. We provide them.
+org.gradle.java.installations.auto-detect=false
+org.gradle.java.installations.auto-download=false
diff --git a/d8_r8/test_modules/tests_java_examples/settings.gradle.kts b/d8_r8/test_modules/tests_java_examples/settings.gradle.kts
new file mode 100644
index 0000000..89c7a6f
--- /dev/null
+++ b/d8_r8/test_modules/tests_java_examples/settings.gradle.kts
@@ -0,0 +1,5 @@
+// Copyright (c) 2023, 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.
+
+rootProject.name = "tests_java_examples"
diff --git a/d8_r8/test_modules/tests_java_examplesAndroidN/build.gradle.kts b/d8_r8/test_modules/tests_java_examplesAndroidN/build.gradle.kts
new file mode 100644
index 0000000..8cfe7d2
--- /dev/null
+++ b/d8_r8/test_modules/tests_java_examplesAndroidN/build.gradle.kts
@@ -0,0 +1,41 @@
+// Copyright (c) 2023, 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.test.configure {
+ java.srcDirs.clear()
+ java.srcDir(root.resolveAll("src", "test", "examplesAndroidN"))
+ }
+ sourceCompatibility = JavaVersion.VERSION_1_8
+ targetCompatibility = JavaVersion.VERSION_1_8
+}
+
+dependencies {
+ testCompileOnly(Deps.asm)
+}
+
+// We just need to register the examples jars for it to be referenced by other modules.
+val buildExampleJars = buildJavaExamplesJars("AndroidN")
+
+tasks {
+ withType<JavaCompile> {
+ options.setFork(true)
+ options.forkOptions.memoryMaximumSize = "3g"
+ options.forkOptions.jvmArgs = listOf(
+ "-Xss256m",
+ // Set the bootclass path so compilation is consistent with 1.8 target compatibility.
+ "-Xbootclasspath/a:third_party/openjdk/openjdk-rt-1.8/rt.jar")
+ }
+}
diff --git a/d8_r8/test_modules/tests_java_examplesAndroidN/gradle.properties b/d8_r8/test_modules/tests_java_examplesAndroidN/gradle.properties
new file mode 100644
index 0000000..1de43f9
--- /dev/null
+++ b/d8_r8/test_modules/tests_java_examplesAndroidN/gradle.properties
@@ -0,0 +1,17 @@
+# Copyright (c) 2023, 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.
+
+org.gradle.jvmargs=-Xmx2048M -Dfile.encoding=UTF-8
+kotlin.daemon.jvmargs=-Xmx3g -Dkotlin.js.compiler.legacy.force_enabled=true
+systemProp.file.encoding=UTF-8
+
+# Enable new incremental compilation
+kotlin.incremental.useClasspathSnapshot=true
+
+org.gradle.parallel=true
+org.gradle.caching=true
+
+# Do not download any jdks or detect them. We provide them.
+org.gradle.java.installations.auto-detect=false
+org.gradle.java.installations.auto-download=false
diff --git a/d8_r8/test_modules/tests_java_examplesAndroidN/settings.gradle.kts b/d8_r8/test_modules/tests_java_examplesAndroidN/settings.gradle.kts
new file mode 100644
index 0000000..d0f1704
--- /dev/null
+++ b/d8_r8/test_modules/tests_java_examplesAndroidN/settings.gradle.kts
@@ -0,0 +1,5 @@
+// Copyright (c) 2023, 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.
+
+rootProject.name = "tests_java_examplesAndroidN"
diff --git a/d8_r8/test_modules/tests_java_examplesAndroidO/build.gradle.kts b/d8_r8/test_modules/tests_java_examplesAndroidO/build.gradle.kts
new file mode 100644
index 0000000..44ed59d
--- /dev/null
+++ b/d8_r8/test_modules/tests_java_examplesAndroidO/build.gradle.kts
@@ -0,0 +1,41 @@
+// Copyright (c) 2023, 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.test.configure {
+ java.srcDirs.clear()
+ java.srcDir(root.resolveAll("src", "test", "examplesAndroidO"))
+ }
+ sourceCompatibility = JavaVersion.VERSION_1_8
+ targetCompatibility = JavaVersion.VERSION_1_8
+}
+
+dependencies {
+ testCompileOnly(Deps.asm)
+}
+
+// We just need to register the examples jars for it to be referenced by other modules.
+val buildExampleJars = buildJavaExamplesJars("AndroidO")
+
+tasks {
+ withType<JavaCompile> {
+ options.setFork(true)
+ options.forkOptions.memoryMaximumSize = "3g"
+ options.forkOptions.jvmArgs = listOf(
+ "-Xss256m",
+ // Set the bootclass path so compilation is consistent with 1.8 target compatibility.
+ "-Xbootclasspath/a:third_party/openjdk/openjdk-rt-1.8/rt.jar")
+ }
+}
diff --git a/d8_r8/test_modules/tests_java_examplesAndroidO/gradle.properties b/d8_r8/test_modules/tests_java_examplesAndroidO/gradle.properties
new file mode 100644
index 0000000..1de43f9
--- /dev/null
+++ b/d8_r8/test_modules/tests_java_examplesAndroidO/gradle.properties
@@ -0,0 +1,17 @@
+# Copyright (c) 2023, 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.
+
+org.gradle.jvmargs=-Xmx2048M -Dfile.encoding=UTF-8
+kotlin.daemon.jvmargs=-Xmx3g -Dkotlin.js.compiler.legacy.force_enabled=true
+systemProp.file.encoding=UTF-8
+
+# Enable new incremental compilation
+kotlin.incremental.useClasspathSnapshot=true
+
+org.gradle.parallel=true
+org.gradle.caching=true
+
+# Do not download any jdks or detect them. We provide them.
+org.gradle.java.installations.auto-detect=false
+org.gradle.java.installations.auto-download=false
diff --git a/d8_r8/test_modules/tests_java_examplesAndroidO/settings.gradle.kts b/d8_r8/test_modules/tests_java_examplesAndroidO/settings.gradle.kts
new file mode 100644
index 0000000..0faef5f
--- /dev/null
+++ b/d8_r8/test_modules/tests_java_examplesAndroidO/settings.gradle.kts
@@ -0,0 +1,5 @@
+// Copyright (c) 2023, 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.
+
+rootProject.name = "tests_java_examplesAndroidO"
diff --git a/d8_r8/test_modules/tests_java_examplesAndroidP/build.gradle.kts b/d8_r8/test_modules/tests_java_examplesAndroidP/build.gradle.kts
new file mode 100644
index 0000000..7e58f3b
--- /dev/null
+++ b/d8_r8/test_modules/tests_java_examplesAndroidP/build.gradle.kts
@@ -0,0 +1,41 @@
+// Copyright (c) 2023, 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.test.configure {
+ java.srcDirs.clear()
+ java.srcDir(root.resolveAll("src", "test", "examplesAndroidP"))
+ }
+ sourceCompatibility = JavaVersion.VERSION_1_8
+ targetCompatibility = JavaVersion.VERSION_1_8
+}
+
+dependencies {
+ testCompileOnly(Deps.asm)
+}
+
+// We just need to register the examples jars for it to be referenced by other modules.
+val buildExampleJars = buildJavaExamplesJars("AndroidP")
+
+tasks {
+ withType<JavaCompile> {
+ options.setFork(true)
+ options.forkOptions.memoryMaximumSize = "3g"
+ options.forkOptions.jvmArgs = listOf(
+ "-Xss256m",
+ // Set the bootclass path so compilation is consistent with 1.8 target compatibility.
+ "-Xbootclasspath/a:third_party/openjdk/openjdk-rt-1.8/rt.jar")
+ }
+}
diff --git a/d8_r8/test_modules/tests_java_examplesAndroidP/gradle.properties b/d8_r8/test_modules/tests_java_examplesAndroidP/gradle.properties
new file mode 100644
index 0000000..1de43f9
--- /dev/null
+++ b/d8_r8/test_modules/tests_java_examplesAndroidP/gradle.properties
@@ -0,0 +1,17 @@
+# Copyright (c) 2023, 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.
+
+org.gradle.jvmargs=-Xmx2048M -Dfile.encoding=UTF-8
+kotlin.daemon.jvmargs=-Xmx3g -Dkotlin.js.compiler.legacy.force_enabled=true
+systemProp.file.encoding=UTF-8
+
+# Enable new incremental compilation
+kotlin.incremental.useClasspathSnapshot=true
+
+org.gradle.parallel=true
+org.gradle.caching=true
+
+# Do not download any jdks or detect them. We provide them.
+org.gradle.java.installations.auto-detect=false
+org.gradle.java.installations.auto-download=false
diff --git a/d8_r8/test_modules/tests_java_examplesAndroidP/settings.gradle.kts b/d8_r8/test_modules/tests_java_examplesAndroidP/settings.gradle.kts
new file mode 100644
index 0000000..6add507
--- /dev/null
+++ b/d8_r8/test_modules/tests_java_examplesAndroidP/settings.gradle.kts
@@ -0,0 +1,5 @@
+// Copyright (c) 2023, 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.
+
+rootProject.name = "tests_java_examplesAndroidP"
diff --git a/src/keepanno/java/com/android/tools/r8/keepanno/annotations/CheckOptimizedOut.java b/src/keepanno/java/com/android/tools/r8/keepanno/annotations/CheckOptimizedOut.java
new file mode 100644
index 0000000..5c11f44
--- /dev/null
+++ b/src/keepanno/java/com/android/tools/r8/keepanno/annotations/CheckOptimizedOut.java
@@ -0,0 +1,29 @@
+// Copyright (c) 2023, 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.keepanno.annotations;
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+/**
+ * Mark that an item must be optimized out of the residual program.
+ *
+ * <p>An item is optimized out if its declaration is no longer present in the residual program. This
+ * can happen due to many distinct optimizations. For example, it may be dead code and removed by
+ * the usual shrinking. The item's declaration may also be removed if it could be inlined at all
+ * usages, in which case the output may still contain a value if it was a field, or instructions if
+ * it was a method.
+ *
+ * <p>CAUTION: Because of the dependency on shrinker internal optimizations and details such as
+ * inlining vs merging, the use of this annotation is somewhat unreliable and should be used with
+ * caution. In most cases it is more appropriate to use {@link CheckRemoved}.
+ */
+@Target({ElementType.TYPE, ElementType.FIELD, ElementType.METHOD, ElementType.CONSTRUCTOR})
+@Retention(RetentionPolicy.CLASS)
+public @interface CheckOptimizedOut {
+
+ String description() default "";
+}
diff --git a/src/keepanno/java/com/android/tools/r8/keepanno/annotations/CheckRemoved.java b/src/keepanno/java/com/android/tools/r8/keepanno/annotations/CheckRemoved.java
new file mode 100644
index 0000000..546c08b
--- /dev/null
+++ b/src/keepanno/java/com/android/tools/r8/keepanno/annotations/CheckRemoved.java
@@ -0,0 +1,25 @@
+// Copyright (c) 2023, 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.keepanno.annotations;
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+/**
+ * Mark that an item must be fully removed from the residual program.
+ *
+ * <p>Being removed from the program means that the item declaration is not present at all in the
+ * residual program. For example, inlined functions are not considered removed. If content of the
+ * item is allowed to be in the residual, use {@link CheckOptimizedOut}.
+ *
+ * <p>A class is removed if all of its members are removed and no references to the class remain.
+ */
+@Target({ElementType.TYPE, ElementType.FIELD, ElementType.METHOD, ElementType.CONSTRUCTOR})
+@Retention(RetentionPolicy.CLASS)
+public @interface CheckRemoved {
+
+ String description() default "";
+}
diff --git a/src/keepanno/java/com/android/tools/r8/keepanno/asm/KeepEdgeReader.java b/src/keepanno/java/com/android/tools/r8/keepanno/asm/KeepEdgeReader.java
index 7c24ff0..c988dc3 100644
--- a/src/keepanno/java/com/android/tools/r8/keepanno/asm/KeepEdgeReader.java
+++ b/src/keepanno/java/com/android/tools/r8/keepanno/asm/KeepEdgeReader.java
@@ -19,9 +19,12 @@
import com.android.tools.r8.keepanno.ast.AnnotationConstants.UsedByReflection;
import com.android.tools.r8.keepanno.ast.AnnotationConstants.UsesReflection;
import com.android.tools.r8.keepanno.ast.KeepBindings;
+import com.android.tools.r8.keepanno.ast.KeepCheck;
+import com.android.tools.r8.keepanno.ast.KeepCheck.KeepCheckKind;
import com.android.tools.r8.keepanno.ast.KeepClassReference;
import com.android.tools.r8.keepanno.ast.KeepCondition;
import com.android.tools.r8.keepanno.ast.KeepConsequences;
+import com.android.tools.r8.keepanno.ast.KeepDeclaration;
import com.android.tools.r8.keepanno.ast.KeepEdge;
import com.android.tools.r8.keepanno.ast.KeepEdgeException;
import com.android.tools.r8.keepanno.ast.KeepEdgeMetaInfo;
@@ -67,18 +70,18 @@
public static int ASM_VERSION = ASM9;
- public static Set<KeepEdge> readKeepEdges(byte[] classFileBytes) {
+ public static Set<KeepDeclaration> readKeepEdges(byte[] classFileBytes) {
ClassReader reader = new ClassReader(classFileBytes);
- Set<KeepEdge> edges = new HashSet<>();
- reader.accept(new KeepEdgeClassVisitor(edges::add), ClassReader.SKIP_CODE);
- return edges;
+ Set<KeepDeclaration> declarations = new HashSet<>();
+ reader.accept(new KeepEdgeClassVisitor(declarations::add), ClassReader.SKIP_CODE);
+ return declarations;
}
private static class KeepEdgeClassVisitor extends ClassVisitor {
- private final Parent<KeepEdge> parent;
+ private final Parent<KeepDeclaration> parent;
private String className;
- KeepEdgeClassVisitor(Parent<KeepEdge> parent) {
+ KeepEdgeClassVisitor(Parent<KeepDeclaration> parent) {
super(ASM_VERSION);
this.parent = parent;
}
@@ -106,21 +109,30 @@
return null;
}
if (descriptor.equals(Edge.DESCRIPTOR)) {
- return new KeepEdgeVisitor(parent, this::setContext);
+ return new KeepEdgeVisitor(parent::accept, this::setContext);
}
if (descriptor.equals(AnnotationConstants.UsesReflection.DESCRIPTOR)) {
KeepItemPattern classItem =
KeepItemPattern.builder()
.setClassPattern(KeepQualifiedClassNamePattern.exact(className))
.build();
- return new UsesReflectionVisitor(parent, this::setContext, classItem);
+ return new UsesReflectionVisitor(parent::accept, this::setContext, classItem);
}
if (descriptor.equals(AnnotationConstants.ForApi.DESCRIPTOR)) {
- return new ForApiClassVisitor(parent, this::setContext, className);
+ return new ForApiClassVisitor(parent::accept, this::setContext, className);
}
if (descriptor.equals(AnnotationConstants.UsedByReflection.DESCRIPTOR)
|| descriptor.equals(AnnotationConstants.UsedByNative.DESCRIPTOR)) {
- return new UsedByReflectionClassVisitor(descriptor, parent, this::setContext, className);
+ return new UsedByReflectionClassVisitor(
+ descriptor, parent::accept, this::setContext, className);
+ }
+ if (descriptor.equals(AnnotationConstants.CheckRemoved.DESCRIPTOR)) {
+ return new CheckRemovedClassVisitor(
+ descriptor, parent::accept, this::setContext, className, KeepCheckKind.REMOVED);
+ }
+ if (descriptor.equals(AnnotationConstants.CheckOptimizedOut.DESCRIPTOR)) {
+ return new CheckRemovedClassVisitor(
+ descriptor, parent::accept, this::setContext, className, KeepCheckKind.OPTIMIZED_OUT);
}
return null;
}
@@ -132,24 +144,27 @@
@Override
public MethodVisitor visitMethod(
int access, String name, String descriptor, String signature, String[] exceptions) {
- return new KeepEdgeMethodVisitor(parent, className, name, descriptor);
+ return new KeepEdgeMethodVisitor(parent::accept, className, name, descriptor);
}
@Override
public FieldVisitor visitField(
int access, String name, String descriptor, String signature, Object value) {
- return new KeepEdgeFieldVisitor(parent, className, name, descriptor);
+ return new KeepEdgeFieldVisitor(parent::accept, className, name, descriptor);
}
}
private static class KeepEdgeMethodVisitor extends MethodVisitor {
- private final Parent<KeepEdge> parent;
+ private final Parent<KeepDeclaration> parent;
private final String className;
private final String methodName;
private final String methodDescriptor;
KeepEdgeMethodVisitor(
- Parent<KeepEdge> parent, String className, String methodName, String methodDescriptor) {
+ Parent<KeepDeclaration> parent,
+ String className,
+ String methodName,
+ String methodDescriptor) {
super(ASM_VERSION);
this.parent = parent;
this.className = className;
@@ -187,18 +202,34 @@
return null;
}
if (descriptor.equals(Edge.DESCRIPTOR)) {
- return new KeepEdgeVisitor(parent, this::setContext);
+ return new KeepEdgeVisitor(parent::accept, this::setContext);
}
if (descriptor.equals(AnnotationConstants.UsesReflection.DESCRIPTOR)) {
- return new UsesReflectionVisitor(parent, this::setContext, createItemContext());
+ return new UsesReflectionVisitor(parent::accept, this::setContext, createItemContext());
}
if (descriptor.equals(AnnotationConstants.ForApi.DESCRIPTOR)) {
- return new ForApiMemberVisitor(parent, this::setContext, createItemContext());
+ return new ForApiMemberVisitor(parent::accept, this::setContext, createItemContext());
}
if (descriptor.equals(AnnotationConstants.UsedByReflection.DESCRIPTOR)
|| descriptor.equals(AnnotationConstants.UsedByNative.DESCRIPTOR)) {
return new UsedByReflectionMemberVisitor(
- descriptor, parent, this::setContext, createItemContext());
+ descriptor, parent::accept, this::setContext, createItemContext());
+ }
+ if (descriptor.equals(AnnotationConstants.CheckRemoved.DESCRIPTOR)) {
+ return new CheckRemovedMemberVisitor(
+ descriptor,
+ parent::accept,
+ this::setContext,
+ createItemContext(),
+ KeepCheckKind.REMOVED);
+ }
+ if (descriptor.equals(AnnotationConstants.CheckOptimizedOut.DESCRIPTOR)) {
+ return new CheckRemovedMemberVisitor(
+ descriptor,
+ parent::accept,
+ this::setContext,
+ createItemContext(),
+ KeepCheckKind.OPTIMIZED_OUT);
}
return null;
}
@@ -830,6 +861,113 @@
}
}
+ /** Parsing of @CheckRemoved and @CheckOptimizedOut on a class context. */
+ private static class CheckRemovedClassVisitor extends AnnotationVisitorBase {
+
+ private final String annotationDescriptor;
+ private final Parent<KeepCheck> parent;
+ private final KeepEdgeMetaInfo.Builder metaInfoBuilder = KeepEdgeMetaInfo.builder();
+ private final String className;
+ private final KeepCheckKind kind;
+
+ public CheckRemovedClassVisitor(
+ String annotationDescriptor,
+ Parent<KeepCheck> parent,
+ Consumer<KeepEdgeMetaInfo.Builder> addContext,
+ String className,
+ KeepCheckKind kind) {
+ this.annotationDescriptor = annotationDescriptor;
+ this.parent = parent;
+ this.className = className;
+ this.kind = kind;
+ addContext.accept(metaInfoBuilder);
+ }
+
+ @Override
+ public String getAnnotationName() {
+ int sep = annotationDescriptor.lastIndexOf('/');
+ return annotationDescriptor.substring(sep + 1, annotationDescriptor.length() - 1);
+ }
+
+ @Override
+ public void visit(String name, Object value) {
+ if (name.equals(Edge.description) && value instanceof String) {
+ metaInfoBuilder.setDescription((String) value);
+ return;
+ }
+ super.visit(name, value);
+ }
+
+ @Override
+ public void visitEnd() {
+ CheckRemovedClassVisitor superVisitor = this;
+ KeepItemVisitorBase itemVisitor =
+ new KeepItemVisitorBase() {
+ @Override
+ public String getAnnotationName() {
+ return superVisitor.getAnnotationName();
+ }
+ };
+ itemVisitor.visit(Item.className, className);
+ itemVisitor.visitEnd();
+ parent.accept(
+ KeepCheck.builder()
+ .setMetaInfo(metaInfoBuilder.build())
+ .setKind(kind)
+ .setItemPattern(itemVisitor.getItemReference().asItemPattern())
+ .build());
+ }
+ }
+
+ /** Parsing of @CheckRemoved and @CheckOptimizedOut on a class context. */
+ private static class CheckRemovedMemberVisitor extends AnnotationVisitorBase {
+
+ private final String annotationDescriptor;
+ private final Parent<KeepDeclaration> parent;
+ private final KeepItemPattern context;
+ private final KeepEdgeMetaInfo.Builder metaInfoBuilder = KeepEdgeMetaInfo.builder();
+ private final KeepCheckKind kind;
+
+ CheckRemovedMemberVisitor(
+ String annotationDescriptor,
+ Parent<KeepDeclaration> parent,
+ Consumer<KeepEdgeMetaInfo.Builder> addContext,
+ KeepItemPattern context,
+ KeepCheckKind kind) {
+ this.annotationDescriptor = annotationDescriptor;
+ this.parent = parent;
+ this.context = context;
+ this.kind = kind;
+ addContext.accept(metaInfoBuilder);
+ }
+
+ @Override
+ public String getAnnotationName() {
+ int sep = annotationDescriptor.lastIndexOf('/');
+ return annotationDescriptor.substring(sep + 1, annotationDescriptor.length() - 1);
+ }
+
+ @Override
+ public void visit(String name, Object value) {
+ if (name.equals(Edge.description) && value instanceof String) {
+ metaInfoBuilder.setDescription((String) value);
+ return;
+ }
+ super.visit(name, value);
+ }
+
+ @Override
+ public void visitEnd() {
+ super.visitEnd();
+ parent.accept(
+ KeepCheck.builder()
+ .setMetaInfo(metaInfoBuilder.build())
+ .setKind(kind)
+ .setItemPattern(context)
+ .build());
+ }
+ }
+
abstract static class Declaration<T> {
abstract String kind();
diff --git a/src/keepanno/java/com/android/tools/r8/keepanno/ast/AnnotationConstants.java b/src/keepanno/java/com/android/tools/r8/keepanno/ast/AnnotationConstants.java
index 876d04d..a8c7383 100644
--- a/src/keepanno/java/com/android/tools/r8/keepanno/ast/AnnotationConstants.java
+++ b/src/keepanno/java/com/android/tools/r8/keepanno/ast/AnnotationConstants.java
@@ -87,6 +87,20 @@
// Content is the same as UsedByReflection.
}
+ public static final class CheckRemoved {
+ public static final Class<com.android.tools.r8.keepanno.annotations.CheckRemoved> CLASS =
+ com.android.tools.r8.keepanno.annotations.CheckRemoved.class;
+ public static final String DESCRIPTOR = getDescriptor(CLASS);
+ public static final String description = "description";
+ }
+
+ public static final class CheckOptimizedOut {
+ public static final Class<com.android.tools.r8.keepanno.annotations.CheckOptimizedOut> CLASS =
+ com.android.tools.r8.keepanno.annotations.CheckOptimizedOut.class;
+ public static final String DESCRIPTOR = getDescriptor(CLASS);
+ public static final String description = "description";
+ }
+
// Implicit hidden item which is "super type" of Condition and Target.
public static final class Item {
public static final String classFromBinding = "classFromBinding";
diff --git a/src/keepanno/java/com/android/tools/r8/keepanno/ast/KeepCheck.java b/src/keepanno/java/com/android/tools/r8/keepanno/ast/KeepCheck.java
new file mode 100644
index 0000000..2ea942e
--- /dev/null
+++ b/src/keepanno/java/com/android/tools/r8/keepanno/ast/KeepCheck.java
@@ -0,0 +1,72 @@
+// Copyright (c) 2023, 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.keepanno.ast;
+
+public class KeepCheck extends KeepDeclaration {
+
+ public enum KeepCheckKind {
+ REMOVED,
+ OPTIMIZED_OUT
+ }
+
+ public static class Builder {
+
+ private KeepEdgeMetaInfo metaInfo = KeepEdgeMetaInfo.none();
+ private KeepCheckKind kind = KeepCheckKind.REMOVED;
+ private KeepItemPattern itemPattern;
+
+ public Builder setMetaInfo(KeepEdgeMetaInfo metaInfo) {
+ this.metaInfo = metaInfo;
+ return this;
+ }
+
+ public Builder setKind(KeepCheckKind kind) {
+ this.kind = kind;
+ return this;
+ }
+
+ public Builder setItemPattern(KeepItemPattern itemPattern) {
+ this.itemPattern = itemPattern;
+ return this;
+ }
+
+ public KeepCheck build() {
+ if (itemPattern == null) {
+ throw new KeepEdgeException("KeepCheck must have an item pattern.");
+ }
+ return new KeepCheck(metaInfo, kind, itemPattern);
+ }
+ }
+
+ public static Builder builder() {
+ return new Builder();
+ }
+
+ private final KeepEdgeMetaInfo metaInfo;
+ private final KeepCheckKind kind;
+ private final KeepItemPattern itemPattern;
+
+ private KeepCheck(KeepEdgeMetaInfo metaInfo, KeepCheckKind kind, KeepItemPattern itemPattern) {
+ this.metaInfo = metaInfo;
+ this.kind = kind;
+ this.itemPattern = itemPattern;
+ }
+
+ @Override
+ public KeepCheck asKeepCheck() {
+ return this;
+ }
+
+ public KeepEdgeMetaInfo getMetaInfo() {
+ return metaInfo;
+ }
+
+ public KeepCheckKind getKind() {
+ return kind;
+ }
+
+ public KeepItemPattern getItemPattern() {
+ return itemPattern;
+ }
+}
diff --git a/src/keepanno/java/com/android/tools/r8/keepanno/ast/KeepDeclaration.java b/src/keepanno/java/com/android/tools/r8/keepanno/ast/KeepDeclaration.java
new file mode 100644
index 0000000..62cb663
--- /dev/null
+++ b/src/keepanno/java/com/android/tools/r8/keepanno/ast/KeepDeclaration.java
@@ -0,0 +1,24 @@
+// Copyright (c) 2023, 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.keepanno.ast;
+
+/** Base class for the declarations represented in the keep annoations library. */
+public abstract class KeepDeclaration {
+
+ public final boolean isKeepEdge() {
+ return asKeepEdge() != null;
+ }
+
+ public KeepEdge asKeepEdge() {
+ return null;
+ }
+
+ public final boolean isKeepCheck() {
+ return asKeepCheck() != null;
+ }
+
+ public KeepCheck asKeepCheck() {
+ return null;
+ }
+}
diff --git a/src/keepanno/java/com/android/tools/r8/keepanno/ast/KeepEdge.java b/src/keepanno/java/com/android/tools/r8/keepanno/ast/KeepEdge.java
index dd63480..656f40e 100644
--- a/src/keepanno/java/com/android/tools/r8/keepanno/ast/KeepEdge.java
+++ b/src/keepanno/java/com/android/tools/r8/keepanno/ast/KeepEdge.java
@@ -85,7 +85,7 @@
* ::= public | protected | package-private | private | static | final | synthetic
* </pre>
*/
-public final class KeepEdge {
+public final class KeepEdge extends KeepDeclaration {
public static class Builder {
private KeepEdgeMetaInfo metaInfo = KeepEdgeMetaInfo.none();
@@ -147,6 +147,11 @@
this.consequences = consequences;
}
+ @Override
+ public KeepEdge asKeepEdge() {
+ return this;
+ }
+
public KeepEdgeMetaInfo getMetaInfo() {
return metaInfo;
}
diff --git a/src/keepanno/java/com/android/tools/r8/keepanno/keeprules/KeepEdgeNormalizer.java b/src/keepanno/java/com/android/tools/r8/keepanno/keeprules/KeepEdgeNormalizer.java
index 1664218..87ed1ce 100644
--- a/src/keepanno/java/com/android/tools/r8/keepanno/keeprules/KeepEdgeNormalizer.java
+++ b/src/keepanno/java/com/android/tools/r8/keepanno/keeprules/KeepEdgeNormalizer.java
@@ -148,7 +148,7 @@
return bindingReference;
}
- private KeepItemPattern getClassItemPattern(KeepItemPattern fromPattern) {
+ public static KeepItemPattern getClassItemPattern(KeepItemPattern fromPattern) {
return KeepItemPattern.builder()
.setClassReference(fromPattern.getClassReference())
.setExtendsPattern(fromPattern.getExtendsPattern())
diff --git a/src/keepanno/java/com/android/tools/r8/keepanno/keeprules/KeepRuleExtractor.java b/src/keepanno/java/com/android/tools/r8/keepanno/keeprules/KeepRuleExtractor.java
index 7d70e08..efb5a7f 100644
--- a/src/keepanno/java/com/android/tools/r8/keepanno/keeprules/KeepRuleExtractor.java
+++ b/src/keepanno/java/com/android/tools/r8/keepanno/keeprules/KeepRuleExtractor.java
@@ -4,7 +4,10 @@
package com.android.tools.r8.keepanno.keeprules;
import com.android.tools.r8.keepanno.ast.KeepBindings;
+import com.android.tools.r8.keepanno.ast.KeepCheck;
+import com.android.tools.r8.keepanno.ast.KeepCheck.KeepCheckKind;
import com.android.tools.r8.keepanno.ast.KeepCondition;
+import com.android.tools.r8.keepanno.ast.KeepDeclaration;
import com.android.tools.r8.keepanno.ast.KeepEdge;
import com.android.tools.r8.keepanno.ast.KeepEdgeException;
import com.android.tools.r8.keepanno.ast.KeepEdgeMetaInfo;
@@ -16,6 +19,7 @@
import com.android.tools.r8.keepanno.ast.KeepMethodAccessPattern;
import com.android.tools.r8.keepanno.ast.KeepMethodPattern;
import com.android.tools.r8.keepanno.ast.KeepOptions;
+import com.android.tools.r8.keepanno.ast.KeepOptions.KeepOption;
import com.android.tools.r8.keepanno.ast.KeepQualifiedClassNamePattern;
import com.android.tools.r8.keepanno.ast.KeepTarget;
import com.android.tools.r8.keepanno.keeprules.PgRule.PgConditionalRule;
@@ -43,8 +47,8 @@
this.ruleConsumer = ruleConsumer;
}
- public void extract(KeepEdge edge) {
- Collection<PgRule> rules = split(edge);
+ public void extract(KeepDeclaration declaration) {
+ Collection<PgRule> rules = split(declaration);
StringBuilder builder = new StringBuilder();
for (PgRule rule : rules) {
rule.printRule(builder);
@@ -53,8 +57,74 @@
ruleConsumer.accept(builder.toString());
}
- private static Collection<PgRule> split(KeepEdge edge) {
- return doSplit(KeepEdgeNormalizer.normalize(edge));
+ private static Collection<PgRule> split(KeepDeclaration declaration) {
+ if (declaration.isKeepCheck()) {
+ return generateCheckRules(declaration.asKeepCheck());
+ }
+ return doSplit(KeepEdgeNormalizer.normalize(declaration.asKeepEdge()));
+ }
+
+ private static Collection<PgRule> generateCheckRules(KeepCheck check) {
+ KeepItemPattern itemPattern = check.getItemPattern();
+ boolean isRemovedPattern = check.getKind() == KeepCheckKind.REMOVED;
+ List<PgRule> rules = new ArrayList<>(isRemovedPattern ? 2 : 1);
+ Holder holder;
+ Map<String, KeepMemberPattern> memberPatterns;
+ List<String> targetMembers;
+ if (itemPattern.isClassItemPattern()) {
+ KeepBindings bindings =
+ KeepBindings.builder().addBinding("CLASS", check.getItemPattern()).build();
+ holder = Holder.create("CLASS", bindings);
+ memberPatterns = Collections.emptyMap();
+ targetMembers = Collections.emptyList();
+ } else {
+ KeepBindings bindings =
+ KeepBindings.builder()
+ .addBinding("CLASS", KeepEdgeNormalizer.getClassItemPattern(check.getItemPattern()))
+ .build();
+ holder = Holder.create("CLASS", bindings);
+ KeepMemberPattern memberPattern = itemPattern.getMemberPattern();
+ memberPatterns = Collections.singletonMap("MEMBER", memberPattern);
+ targetMembers = Collections.singletonList("MEMBER");
+ }
+ // Add a -checkdiscard rule for the class or members.
+ rules.add(
+ new PgUnconditionalRule(
+ check.getMetaInfo(),
+ holder,
+ KeepOptions.keepAll(),
+ memberPatterns,
+ targetMembers,
+ TargetKeepKind.CHECK_DISCARD));
+ // If the check declaration is to ensure full removal we generate a soft-pin rule to disallow
+ // moving/inlining the items.
+ if (isRemovedPattern) {
+ KeepOptions allowShrinking = KeepOptions.allow(KeepOption.SHRINKING);
+ if (itemPattern.isClassItemPattern()) {
+ // A check removal on a class means that the entire class is removed, thus soft-pin the
+ // class and *all* of its members.
+ rules.add(
+ new PgUnconditionalRule(
+ check.getMetaInfo(),
+ holder,
+ allowShrinking,
+ Collections.singletonMap("MEMBERS", KeepMemberPattern.allMembers()),
+ Collections.singletonList("MEMBERS"),
+ TargetKeepKind.CLASS_OR_MEMBERS));
+ } else {
+ // A check removal on members just soft-pins the members.
+ rules.add(
+ new PgDependentMembersRule(
+ check.getMetaInfo(),
+ holder,
+ allowShrinking,
+ memberPatterns,
+ Collections.emptyList(),
+ targetMembers,
+ TargetKeepKind.JUST_MEMBERS));
+ }
+ }
+ return rules;
}
/**
diff --git a/src/keepanno/java/com/android/tools/r8/keepanno/keeprules/PgRule.java b/src/keepanno/java/com/android/tools/r8/keepanno/keeprules/PgRule.java
index 412a91e..e0ad65e 100644
--- a/src/keepanno/java/com/android/tools/r8/keepanno/keeprules/PgRule.java
+++ b/src/keepanno/java/com/android/tools/r8/keepanno/keeprules/PgRule.java
@@ -24,7 +24,8 @@
public enum TargetKeepKind {
JUST_MEMBERS(RulePrintingUtils.KEEP_CLASS_MEMBERS),
CLASS_OR_MEMBERS(RulePrintingUtils.KEEP),
- CLASS_AND_MEMBERS(RulePrintingUtils.KEEP_CLASSES_WITH_MEMBERS);
+ CLASS_AND_MEMBERS(RulePrintingUtils.KEEP_CLASSES_WITH_MEMBERS),
+ CHECK_DISCARD(RulePrintingUtils.CHECK_DISCARD);
private final String ruleKind;
@@ -35,12 +36,19 @@
String getKeepRuleKind() {
return ruleKind;
}
+
+ boolean isKeepKind() {
+ return this != CHECK_DISCARD;
+ }
}
- private static void printNonEmptyMembersPatternAsDefaultInitWorkaround(StringBuilder builder) {
- // If no members is given, compat R8 and legacy full mode will implicitly keep <init>().
- // Add a keep of finalize which is a library method that would be kept in any case.
- builder.append(" { void finalize(); }");
+ private static void printNonEmptyMembersPatternAsDefaultInitWorkaround(
+ StringBuilder builder, TargetKeepKind kind) {
+ if (kind.isKeepKind()) {
+ // If no members is given, compat R8 and legacy full mode will implicitly keep <init>().
+ // Add a keep of finalize which is a library method that would be kept in any case.
+ builder.append(" { void finalize(); }");
+ }
}
private final KeepEdgeMetaInfo metaInfo;
@@ -178,7 +186,7 @@
void printTargetHolder(StringBuilder builder) {
printClassHeader(builder, holderPattern, classReferencePrinter(holderNamePattern));
if (getTargetMembers().isEmpty()) {
- printNonEmptyMembersPatternAsDefaultInitWorkaround(builder);
+ printNonEmptyMembersPatternAsDefaultInitWorkaround(builder, targetKeepKind);
}
}
@@ -251,7 +259,7 @@
void printTargetHolder(StringBuilder builder) {
printClassHeader(builder, classTarget, this::printClassName);
if (getTargetMembers().isEmpty()) {
- PgRule.printNonEmptyMembersPatternAsDefaultInitWorkaround(builder);
+ PgRule.printNonEmptyMembersPatternAsDefaultInitWorkaround(builder, keepKind);
}
}
@@ -388,7 +396,7 @@
}
});
if (getTargetMembers().isEmpty()) {
- PgRule.printNonEmptyMembersPatternAsDefaultInitWorkaround(builder);
+ PgRule.printNonEmptyMembersPatternAsDefaultInitWorkaround(builder, keepKind);
}
}
diff --git a/src/keepanno/java/com/android/tools/r8/keepanno/keeprules/RulePrintingUtils.java b/src/keepanno/java/com/android/tools/r8/keepanno/keeprules/RulePrintingUtils.java
index bf8136e..604fe5b 100644
--- a/src/keepanno/java/com/android/tools/r8/keepanno/keeprules/RulePrintingUtils.java
+++ b/src/keepanno/java/com/android/tools/r8/keepanno/keeprules/RulePrintingUtils.java
@@ -37,6 +37,7 @@
public static final String KEEP = "-keep";
public static final String KEEP_CLASS_MEMBERS = "-keepclassmembers";
public static final String KEEP_CLASSES_WITH_MEMBERS = "-keepclasseswithmembers";
+ public static final String CHECK_DISCARD = "-checkdiscard";
public static void printHeader(StringBuilder builder, KeepEdgeMetaInfo metaInfo) {
if (metaInfo.hasContext()) {
diff --git a/src/main/java/com/android/tools/r8/R8.java b/src/main/java/com/android/tools/r8/R8.java
index 82bd51b..86b5b5f 100644
--- a/src/main/java/com/android/tools/r8/R8.java
+++ b/src/main/java/com/android/tools/r8/R8.java
@@ -38,6 +38,8 @@
import com.android.tools.r8.horizontalclassmerging.HorizontalClassMerger;
import com.android.tools.r8.inspector.internal.InspectorImpl;
import com.android.tools.r8.ir.conversion.IRConverter;
+import com.android.tools.r8.ir.conversion.MethodConversionOptions;
+import com.android.tools.r8.ir.conversion.MethodConversionOptions.MutableMethodConversionOptions;
import com.android.tools.r8.ir.conversion.PrimaryR8IRConverter;
import com.android.tools.r8.ir.desugar.BackportedMethodRewriter;
import com.android.tools.r8.ir.desugar.CfClassSynthesizerDesugaringCollection;
@@ -461,6 +463,10 @@
AccessModifier.run(appViewWithLiveness, executorService, timing);
+ new RedundantBridgeRemover(appViewWithLiveness)
+ .setMustRetargetInvokesToTargetMethod()
+ .run(executorService, timing);
+
boolean isKotlinLibraryCompilationWithInlinePassThrough =
options.enableCfByteCodePassThrough && appView.hasCfByteCodePassThroughMethods();
@@ -563,10 +569,12 @@
enqueuer.traceApplication(appView.rootSet(), executorService, timing);
appView.setAppInfo(enqueuerResult.getAppInfo());
// Rerunning the enqueuer should not give rise to any method rewritings.
+ MutableMethodConversionOptions conversionOptions =
+ MethodConversionOptions.forPostLirPhase(appView);
appView.withGeneratedMessageLiteBuilderShrinker(
shrinker ->
shrinker.rewriteDeadBuilderReferencesFromDynamicMethods(
- appViewWithLiveness, executorService, timing));
+ conversionOptions, appViewWithLiveness, executorService, timing));
if (options.isShrinking()) {
// Mark dead proto extensions fields as neither being read nor written. This step must
@@ -679,7 +687,7 @@
// This can only be done if we have AppInfoWithLiveness.
if (appView.appInfo().hasLiveness()) {
new RedundantBridgeRemover(appView.withLiveness())
- .run(memberRebindingIdentityLens, executorService, timing);
+ .run(executorService, timing, memberRebindingIdentityLens);
} else {
// If we don't have AppInfoWithLiveness here, it must be because we are not shrinking. When
// we are not shrinking, we can't move visibility bridges. In principle, though, it would be
@@ -1038,10 +1046,12 @@
shrinker ->
shrinker.setDeadProtoTypes(appViewWithLiveness.appInfo().getDeadProtoTypes()));
}
+ MutableMethodConversionOptions conversionOptions =
+ MethodConversionOptions.forPreLirPhase(appView);
appView.withGeneratedMessageLiteBuilderShrinker(
shrinker ->
shrinker.rewriteDeadBuilderReferencesFromDynamicMethods(
- appViewWithLiveness, executorService, timing));
+ conversionOptions, appViewWithLiveness, executorService, timing));
timing.end();
return appViewWithLiveness;
}
diff --git a/src/main/java/com/android/tools/r8/R8Command.java b/src/main/java/com/android/tools/r8/R8Command.java
index 4e89913..4b8b6e3 100644
--- a/src/main/java/com/android/tools/r8/R8Command.java
+++ b/src/main/java/com/android/tools/r8/R8Command.java
@@ -17,7 +17,7 @@
import com.android.tools.r8.inspector.internal.InspectorImpl;
import com.android.tools.r8.ir.desugar.desugaredlibrary.DesugaredLibrarySpecification;
import com.android.tools.r8.keepanno.asm.KeepEdgeReader;
-import com.android.tools.r8.keepanno.ast.KeepEdge;
+import com.android.tools.r8.keepanno.ast.KeepDeclaration;
import com.android.tools.r8.keepanno.keeprules.KeepRuleExtractor;
import com.android.tools.r8.naming.MapConsumer;
import com.android.tools.r8.naming.ProguardMapStringConsumer;
@@ -765,7 +765,7 @@
for (ProgramResourceProvider provider : getAppBuilder().getProgramResourceProviders()) {
for (ProgramResource resource : provider.getProgramResources()) {
if (resource.getKind() == Kind.CF) {
- Set<KeepEdge> edges = KeepEdgeReader.readKeepEdges(resource.getBytes());
+ Set<KeepDeclaration> declarations = KeepEdgeReader.readKeepEdges(resource.getBytes());
KeepRuleExtractor extractor =
new KeepRuleExtractor(
rule -> {
@@ -774,7 +774,7 @@
Collections.singletonList(rule), null, resource.getOrigin());
parser.parse(source);
});
- edges.forEach(extractor::extract);
+ declarations.forEach(extractor::extract);
}
}
}
diff --git a/src/main/java/com/android/tools/r8/dex/ApplicationWriter.java b/src/main/java/com/android/tools/r8/dex/ApplicationWriter.java
index 3d5f387..930cdda 100644
--- a/src/main/java/com/android/tools/r8/dex/ApplicationWriter.java
+++ b/src/main/java/com/android/tools/r8/dex/ApplicationWriter.java
@@ -932,11 +932,6 @@
if (!mapping.hasJumboStrings()) {
return;
}
- // If the globally highest sorting string is not a jumbo string this is also a no-op.
- if (application.highestSortingString != null
- && application.highestSortingString.compareTo(mapping.getFirstJumboString()) < 0) {
- return;
- }
}
for (DexProgramClass clazz : classes) {
clazz.forEachProgramMethodMatching(
diff --git a/src/main/java/com/android/tools/r8/dex/JumboStringRewriter.java b/src/main/java/com/android/tools/r8/dex/JumboStringRewriter.java
index 13f6812..dede86b 100644
--- a/src/main/java/com/android/tools/r8/dex/JumboStringRewriter.java
+++ b/src/main/java/com/android/tools/r8/dex/JumboStringRewriter.java
@@ -146,7 +146,7 @@
newDebugInfo);
// As we have rewritten the code, we now know that its highest string index that is not
// a jumbo-string is firstJumboString (actually the previous string, but we do not have that).
- newCode.highestSortingString = firstJumboString;
+ newCode.setHighestSortingStringForJumboProcessedCode(firstJumboString);
return newCode;
}
diff --git a/src/main/java/com/android/tools/r8/errors/CheckDiscardDiagnostic.java b/src/main/java/com/android/tools/r8/errors/CheckDiscardDiagnostic.java
index 5a9ebb3..9e64b69 100644
--- a/src/main/java/com/android/tools/r8/errors/CheckDiscardDiagnostic.java
+++ b/src/main/java/com/android/tools/r8/errors/CheckDiscardDiagnostic.java
@@ -49,6 +49,10 @@
this.messages = messages;
}
+ public int getNumberOfFailures() {
+ return messages.size();
+ }
+
/** The origin of a -checkdiscarded failure is not unique. (The whole app is to blame.) */
@Override
public Origin getOrigin() {
diff --git a/src/main/java/com/android/tools/r8/graph/AccessFlags.java b/src/main/java/com/android/tools/r8/graph/AccessFlags.java
index 54fecaa..fe6e49c 100644
--- a/src/main/java/com/android/tools/r8/graph/AccessFlags.java
+++ b/src/main/java/com/android/tools/r8/graph/AccessFlags.java
@@ -146,6 +146,10 @@
return !isPublic() && !isPrivate();
}
+ public boolean isPackagePrivateOrPublic() {
+ return !isPrivate() && !isProtected();
+ }
+
public boolean isPublic() {
return isSet(Constants.ACC_PUBLIC);
}
diff --git a/src/main/java/com/android/tools/r8/graph/AssemblyWriter.java b/src/main/java/com/android/tools/r8/graph/AssemblyWriter.java
index 90faadc..3fc29d6 100644
--- a/src/main/java/com/android/tools/r8/graph/AssemblyWriter.java
+++ b/src/main/java/com/android/tools/r8/graph/AssemblyWriter.java
@@ -9,6 +9,7 @@
import com.android.tools.r8.contexts.CompilationContext;
import com.android.tools.r8.graph.GenericSignature.ClassSignature;
import com.android.tools.r8.ir.conversion.IRConverter;
+import com.android.tools.r8.ir.conversion.MethodConversionOptions;
import com.android.tools.r8.ir.conversion.MethodProcessorEventConsumer;
import com.android.tools.r8.ir.conversion.OneTimeMethodProcessor;
import com.android.tools.r8.ir.optimize.info.OptimizationFeedbackIgnore;
@@ -190,7 +191,8 @@
method,
OptimizationFeedbackIgnore.getInstance(),
methodProcessor,
- methodProcessingContext));
+ methodProcessingContext,
+ MethodConversionOptions.forD8(converter.appView)));
}
private void writeAnnotations(
diff --git a/src/main/java/com/android/tools/r8/graph/CfCode.java b/src/main/java/com/android/tools/r8/graph/CfCode.java
index b7feac3..e2a42f7 100644
--- a/src/main/java/com/android/tools/r8/graph/CfCode.java
+++ b/src/main/java/com/android/tools/r8/graph/CfCode.java
@@ -36,8 +36,8 @@
import com.android.tools.r8.ir.conversion.CfSourceCode;
import com.android.tools.r8.ir.conversion.IRBuilder;
import com.android.tools.r8.ir.conversion.LensCodeRewriterUtils;
+import com.android.tools.r8.ir.conversion.MethodConversionOptions;
import com.android.tools.r8.ir.conversion.MethodConversionOptions.MutableMethodConversionOptions;
-import com.android.tools.r8.ir.conversion.MethodConversionOptions.ThrowingMethodConversionOptions;
import com.android.tools.r8.ir.optimize.Inliner.ConstraintWithTarget;
import com.android.tools.r8.ir.optimize.InliningConstraints;
import com.android.tools.r8.naming.NamingLens;
@@ -578,7 +578,7 @@
callerPosition,
origin,
protoChanges,
- new ThrowingMethodConversionOptions(appView.options()));
+ MethodConversionOptions.nonConverting());
}
private void verifyFramesOrRemove(ProgramMethod method, AppView<?> appView, GraphLens codeLens) {
diff --git a/src/main/java/com/android/tools/r8/graph/Code.java b/src/main/java/com/android/tools/r8/graph/Code.java
index 193e758..3f04412 100644
--- a/src/main/java/com/android/tools/r8/graph/Code.java
+++ b/src/main/java/com/android/tools/r8/graph/Code.java
@@ -14,6 +14,7 @@
import com.android.tools.r8.ir.code.NumberGenerator;
import com.android.tools.r8.ir.code.Position;
import com.android.tools.r8.ir.code.Position.PositionBuilder;
+import com.android.tools.r8.ir.conversion.MethodConversionOptions;
import com.android.tools.r8.ir.conversion.MethodConversionOptions.MutableMethodConversionOptions;
import com.android.tools.r8.lightir.LirCode;
import com.android.tools.r8.origin.Origin;
@@ -24,7 +25,7 @@
public abstract class Code extends CachedHashValueDexItem {
public final IRCode buildIR(ProgramMethod method, AppView<?> appView, Origin origin) {
- return buildIR(method, appView, origin, new MutableMethodConversionOptions(appView.options()));
+ return buildIR(method, appView, origin, MethodConversionOptions.forLirPhase(appView));
}
public abstract IRCode buildIR(
diff --git a/src/main/java/com/android/tools/r8/graph/DefaultInstanceInitializerCode.java b/src/main/java/com/android/tools/r8/graph/DefaultInstanceInitializerCode.java
index 31b2efe..4adaae6 100644
--- a/src/main/java/com/android/tools/r8/graph/DefaultInstanceInitializerCode.java
+++ b/src/main/java/com/android/tools/r8/graph/DefaultInstanceInitializerCode.java
@@ -26,8 +26,8 @@
import com.android.tools.r8.ir.code.ValueType;
import com.android.tools.r8.ir.conversion.IRBuilder;
import com.android.tools.r8.ir.conversion.LensCodeRewriterUtils;
+import com.android.tools.r8.ir.conversion.MethodConversionOptions;
import com.android.tools.r8.ir.conversion.MethodConversionOptions.MutableMethodConversionOptions;
-import com.android.tools.r8.ir.conversion.MethodConversionOptions.ThrowingMethodConversionOptions;
import com.android.tools.r8.ir.conversion.SyntheticStraightLineSourceCode;
import com.android.tools.r8.naming.NamingLens;
import com.android.tools.r8.origin.Origin;
@@ -166,7 +166,7 @@
new DefaultInstanceInitializerSourceCode(originalMethod, callerPosition);
return IRBuilder.createForInlining(
method, appView, codeLens, source, origin, valueNumberGenerator, protoChanges)
- .build(context, new ThrowingMethodConversionOptions(appView.options()));
+ .build(context, MethodConversionOptions.nonConverting());
}
@Override
diff --git a/src/main/java/com/android/tools/r8/graph/DexApplication.java b/src/main/java/com/android/tools/r8/graph/DexApplication.java
index 311a287..da73661 100644
--- a/src/main/java/com/android/tools/r8/graph/DexApplication.java
+++ b/src/main/java/com/android/tools/r8/graph/DexApplication.java
@@ -33,23 +33,18 @@
public final DexItemFactory dexItemFactory;
private final DexApplicationReadFlags flags;
- // Information on the lexicographically largest string referenced from code.
- public final DexString highestSortingString;
-
/** Constructor should only be invoked by the DexApplication.Builder. */
DexApplication(
ClassNameMapper proguardMap,
DexApplicationReadFlags flags,
ImmutableList<DataResourceProvider> dataResourceProviders,
InternalOptions options,
- DexString highestSortingString,
Timing timing) {
this.proguardMap = proguardMap;
this.flags = flags;
this.dataResourceProviders = dataResourceProviders;
this.options = options;
this.dexItemFactory = options.itemFactory;
- this.highestSortingString = highestSortingString;
this.timing = timing;
}
@@ -168,7 +163,6 @@
final Timing timing;
DexApplicationReadFlags flags;
- DexString highestSortingString;
private final Collection<DexProgramClass> synthesizedClasses;
public Builder(InternalOptions options, Timing timing) {
@@ -186,7 +180,6 @@
dataResourceProviders.addAll(application.dataResourceProviders);
proguardMap = application.getProguardMap();
timing = application.timing;
- highestSortingString = application.highestSortingString;
options = application.options;
dexItemFactory = application.dexItemFactory;
synthesizedClasses = new ArrayList<>();
@@ -246,11 +239,6 @@
return self();
}
- public synchronized T setHighestSortingString(DexString value) {
- highestSortingString = value;
- return self();
- }
-
public synchronized T addProgramClass(DexProgramClass clazz) {
programClasses.add(clazz);
return self();
diff --git a/src/main/java/com/android/tools/r8/graph/DexCode.java b/src/main/java/com/android/tools/r8/graph/DexCode.java
index 325eb79..763c1b9 100644
--- a/src/main/java/com/android/tools/r8/graph/DexCode.java
+++ b/src/main/java/com/android/tools/r8/graph/DexCode.java
@@ -36,8 +36,8 @@
import com.android.tools.r8.ir.conversion.DexSourceCode;
import com.android.tools.r8.ir.conversion.IRBuilder;
import com.android.tools.r8.ir.conversion.LensCodeRewriterUtils;
+import com.android.tools.r8.ir.conversion.MethodConversionOptions;
import com.android.tools.r8.ir.conversion.MethodConversionOptions.MutableMethodConversionOptions;
-import com.android.tools.r8.ir.conversion.MethodConversionOptions.ThrowingMethodConversionOptions;
import com.android.tools.r8.origin.Origin;
import com.android.tools.r8.utils.ArrayUtils;
import com.android.tools.r8.utils.DexDebugUtils.PositionInfo;
@@ -76,7 +76,7 @@
public final TryHandler[] handlers;
public final DexInstruction[] instructions;
- public DexString highestSortingString;
+ private DexString highestSortingString;
private DexDebugInfo debugInfo;
private DexDebugInfoForWriting debugInfoForWriting;
@@ -210,6 +210,13 @@
return DexCode::specify;
}
+ public void setHighestSortingStringForJumboProcessedCode(DexString nonJumboString) {
+ // The call of this method marks this code object as properly jumbo-string processed.
+ // In principle, it should be possible to mark as such and assert that we do not reattempt
+ // processing in rewriteCodeWithJumboStrings.
+ highestSortingString = nonJumboString;
+ }
+
@Override
public DexWritableCode rewriteCodeWithJumboStrings(
ProgramMethod method, ObjectToOffsetMapping mapping, AppView<?> appView, boolean force) {
@@ -554,7 +561,7 @@
appView.dexItemFactory());
return IRBuilder.createForInlining(
method, appView, codeLens, source, origin, valueNumberGenerator, protoChanges)
- .build(context, new ThrowingMethodConversionOptions(appView.options()));
+ .build(context, MethodConversionOptions.nonConverting());
}
@Override
diff --git a/src/main/java/com/android/tools/r8/graph/DexEncodedMethod.java b/src/main/java/com/android/tools/r8/graph/DexEncodedMethod.java
index 67082ae..5452bf2 100644
--- a/src/main/java/com/android/tools/r8/graph/DexEncodedMethod.java
+++ b/src/main/java/com/android/tools/r8/graph/DexEncodedMethod.java
@@ -465,7 +465,6 @@
public boolean willBeInlinedIntoInstanceInitializer(DexItemFactory dexItemFactory) {
checkIfObsolete();
if (getName().startsWith(dexItemFactory.temporaryConstructorMethodPrefix)) {
- assert isPrivate();
assert !isStatic();
return true;
}
diff --git a/src/main/java/com/android/tools/r8/graph/DirectMappedDexApplication.java b/src/main/java/com/android/tools/r8/graph/DirectMappedDexApplication.java
index 08dad18..b6591b9 100644
--- a/src/main/java/com/android/tools/r8/graph/DirectMappedDexApplication.java
+++ b/src/main/java/com/android/tools/r8/graph/DirectMappedDexApplication.java
@@ -49,9 +49,8 @@
ImmutableCollection<DexClasspathClass> classpathClasses,
ImmutableList<DataResourceProvider> dataResourceProviders,
InternalOptions options,
- DexString highestSortingString,
Timing timing) {
- super(proguardMap, flags, dataResourceProviders, options, highestSortingString, timing);
+ super(proguardMap, flags, dataResourceProviders, options, timing);
this.programOrClasspathClasses = programOrClasspathClasses;
this.libraryClasses = libraryClasses;
this.programClasses = programClasses;
@@ -324,7 +323,6 @@
newClasspathClasses,
ImmutableList.copyOf(dataResourceProviders),
options,
- highestSortingString,
timing);
}
diff --git a/src/main/java/com/android/tools/r8/graph/GenericSignaturePrinter.java b/src/main/java/com/android/tools/r8/graph/GenericSignaturePrinter.java
index cff0d21..b5fc8e9 100644
--- a/src/main/java/com/android/tools/r8/graph/GenericSignaturePrinter.java
+++ b/src/main/java/com/android/tools/r8/graph/GenericSignaturePrinter.java
@@ -200,11 +200,13 @@
} else {
DexType enclosingType = classTypeSignature.enclosingTypeSignature.type;
String outerDescriptor = namingLens.lookupDescriptor(enclosingType).toString();
- String innerClassName = DescriptorUtils.getInnerClassName(outerDescriptor, renamedString);
+ String innerClassName =
+ DescriptorUtils.getInnerClassNameFromDescriptor(outerDescriptor, renamedString);
if (innerClassName == null && isTypeMissing.test(classTypeSignature.type)) {
assert renamedString.equals(classTypeSignature.type.toDescriptorString());
innerClassName =
- DescriptorUtils.getInnerClassName(enclosingType.toDescriptorString(), renamedString);
+ DescriptorUtils.getInnerClassNameFromDescriptor(
+ enclosingType.toDescriptorString(), renamedString);
}
if (innerClassName == null) {
// We can no longer encode the inner name in the generic signature.
diff --git a/src/main/java/com/android/tools/r8/graph/LazyLoadedDexApplication.java b/src/main/java/com/android/tools/r8/graph/LazyLoadedDexApplication.java
index 96d4bfa..b5b28fd 100644
--- a/src/main/java/com/android/tools/r8/graph/LazyLoadedDexApplication.java
+++ b/src/main/java/com/android/tools/r8/graph/LazyLoadedDexApplication.java
@@ -40,9 +40,8 @@
ClasspathClassCollection classpathClasses,
LibraryClassCollection libraryClasses,
InternalOptions options,
- DexString highestSortingString,
Timing timing) {
- super(proguardMap, flags, dataResourceProviders, options, highestSortingString, timing);
+ super(proguardMap, flags, dataResourceProviders, options, timing);
this.programClasses = programClasses;
this.classpathClasses = classpathClasses;
this.libraryClasses = libraryClasses;
@@ -329,7 +328,6 @@
classpathClasses,
libraryClasses,
options,
- highestSortingString,
timing);
}
}
diff --git a/src/main/java/com/android/tools/r8/graph/MethodAccessInfoCollection.java b/src/main/java/com/android/tools/r8/graph/MethodAccessInfoCollection.java
index e3b45a8..99cd8d2 100644
--- a/src/main/java/com/android/tools/r8/graph/MethodAccessInfoCollection.java
+++ b/src/main/java/com/android/tools/r8/graph/MethodAccessInfoCollection.java
@@ -63,13 +63,16 @@
fullyDestroyed = true;
}
- public void destroyNonDirectInvokes() {
+ public void destroyNonDirectNonSuperInvokes() {
interfaceInvokes = ThrowingMap.get();
staticInvokes = ThrowingMap.get();
- superInvokes = ThrowingMap.get();
virtualInvokes = ThrowingMap.get();
}
+ public void destroySuperInvokes() {
+ superInvokes = ThrowingMap.get();
+ }
+
public Modifier modifier() {
return new Modifier(
directInvokes, interfaceInvokes, staticInvokes, superInvokes, virtualInvokes);
@@ -100,6 +103,10 @@
superInvokes.forEach(consumer);
}
+ public boolean hasSuperInvoke(DexMethod method) {
+ return !superInvokes.getOrDefault(method, ProgramMethodSet.empty()).isEmpty();
+ }
+
public void forEachSuperInvokeContext(DexMethod method, Consumer<ProgramMethod> consumer) {
superInvokes.getOrDefault(method, ProgramMethodSet.empty()).forEach(consumer);
}
@@ -119,14 +126,17 @@
if (fullyDestroyed) {
result = this;
} else if (isThrowingMap(interfaceInvokes)) {
- assert !isThrowingMap(directInvokes);
assert isThrowingMap(staticInvokes);
- assert isThrowingMap(superInvokes);
assert isThrowingMap(virtualInvokes);
+ assert !isThrowingMap(directInvokes);
MethodAccessInfoCollection.Builder<?> builder = identityBuilder();
rewriteInvokesWithLens(builder, directInvokes, definitions, lens, InvokeType.DIRECT);
+ rewriteInvokesWithLens(builder, superInvokes, definitions, lens, InvokeType.DIRECT);
result = builder.build();
- result.destroyNonDirectInvokes();
+ result.destroyNonDirectNonSuperInvokes();
+ if (isThrowingMap(superInvokes)) {
+ result.destroySuperInvokes();
+ }
} else {
MethodAccessInfoCollection.Builder<?> builder = identityBuilder();
rewriteInvokesWithLens(builder, directInvokes, definitions, lens, InvokeType.DIRECT);
@@ -146,17 +156,19 @@
DexDefinitionSupplier definitions,
GraphLens lens,
InvokeType type) {
- invokes.forEach(
- (reference, contexts) -> {
- ProgramMethodSet newContexts = contexts.rewrittenWithLens(definitions, lens);
- for (ProgramMethod newContext : newContexts) {
- MethodLookupResult methodLookupResult =
- lens.lookupMethod(reference, newContext.getReference(), type);
- DexMethod newReference = methodLookupResult.getReference();
- InvokeType newType = methodLookupResult.getType();
- builder.registerInvokeInContext(newReference, newContext, newType);
- }
- });
+ if (!isThrowingMap(invokes)) {
+ invokes.forEach(
+ (reference, contexts) -> {
+ ProgramMethodSet newContexts = contexts.rewrittenWithLens(definitions, lens);
+ for (ProgramMethod newContext : newContexts) {
+ MethodLookupResult methodLookupResult =
+ lens.lookupMethod(reference, newContext.getReference(), type);
+ DexMethod newReference = methodLookupResult.getReference();
+ InvokeType newType = methodLookupResult.getType();
+ builder.registerInvokeInContext(newReference, newContext, newType);
+ }
+ });
+ }
}
public MethodAccessInfoCollection withoutPrunedItems(PrunedItems prunedItems) {
diff --git a/src/main/java/com/android/tools/r8/graph/ProgramMethod.java b/src/main/java/com/android/tools/r8/graph/ProgramMethod.java
index ff6d789..32ba2c2 100644
--- a/src/main/java/com/android/tools/r8/graph/ProgramMethod.java
+++ b/src/main/java/com/android/tools/r8/graph/ProgramMethod.java
@@ -12,6 +12,7 @@
import com.android.tools.r8.ir.code.NumberGenerator;
import com.android.tools.r8.ir.code.Position;
import com.android.tools.r8.ir.conversion.LensCodeRewriterUtils;
+import com.android.tools.r8.ir.conversion.MethodConversionOptions;
import com.android.tools.r8.ir.conversion.MethodConversionOptions.MutableMethodConversionOptions;
import com.android.tools.r8.ir.conversion.MethodProcessor;
import com.android.tools.r8.ir.optimize.Inliner.ConstraintWithTarget;
@@ -29,7 +30,7 @@
}
public IRCode buildIR(AppView<?> appView) {
- return buildIR(appView, new MutableMethodConversionOptions(appView.options()));
+ return buildIR(appView, MethodConversionOptions.forLirPhase(appView));
}
public IRCode buildIR(AppView<?> appView, MutableMethodConversionOptions conversionOptions) {
diff --git a/src/main/java/com/android/tools/r8/graph/ThrowNullCode.java b/src/main/java/com/android/tools/r8/graph/ThrowNullCode.java
index 90c6d8d..735be28 100644
--- a/src/main/java/com/android/tools/r8/graph/ThrowNullCode.java
+++ b/src/main/java/com/android/tools/r8/graph/ThrowNullCode.java
@@ -20,8 +20,8 @@
import com.android.tools.r8.ir.code.Position.SyntheticPosition;
import com.android.tools.r8.ir.conversion.IRBuilder;
import com.android.tools.r8.ir.conversion.LensCodeRewriterUtils;
+import com.android.tools.r8.ir.conversion.MethodConversionOptions;
import com.android.tools.r8.ir.conversion.MethodConversionOptions.MutableMethodConversionOptions;
-import com.android.tools.r8.ir.conversion.MethodConversionOptions.ThrowingMethodConversionOptions;
import com.android.tools.r8.ir.conversion.SyntheticStraightLineSourceCode;
import com.android.tools.r8.naming.NamingLens;
import com.android.tools.r8.origin.Origin;
@@ -77,7 +77,7 @@
ThrowNullSourceCode source = new ThrowNullSourceCode(method, callerPosition);
return IRBuilder.createForInlining(
method, appView, codeLens, source, origin, valueNumberGenerator, protoChanges)
- .build(context, new ThrowingMethodConversionOptions(appView.options()));
+ .build(context, MethodConversionOptions.nonConverting());
}
@Override
diff --git a/src/main/java/com/android/tools/r8/graph/UseRegistry.java b/src/main/java/com/android/tools/r8/graph/UseRegistry.java
index 02078ee..1d9e498 100644
--- a/src/main/java/com/android/tools/r8/graph/UseRegistry.java
+++ b/src/main/java/com/android/tools/r8/graph/UseRegistry.java
@@ -254,6 +254,9 @@
|| arg.isDexValueDouble()
|| arg.isDexValueString();
}
+ if (continuation.shouldBreak()) {
+ break;
+ }
}
}
diff --git a/src/main/java/com/android/tools/r8/graph/fixup/TreeFixerBase.java b/src/main/java/com/android/tools/r8/graph/fixup/TreeFixerBase.java
index bf5e3de..a84af1a 100644
--- a/src/main/java/com/android/tools/r8/graph/fixup/TreeFixerBase.java
+++ b/src/main/java/com/android/tools/r8/graph/fixup/TreeFixerBase.java
@@ -233,8 +233,8 @@
&& outerClassType != null
&& innerClassAttribute.getInnerName() != null) {
String innerClassName =
- DescriptorUtils.getInnerClassName(
- newOuterClassType.toDescriptorString(), newInnerClassType.toDescriptorString());
+ DescriptorUtils.getInnerClassNameFromSimpleName(
+ newOuterClassType.getSimpleName(), newInnerClassType.getSimpleName());
if (innerClassName != null) {
newInnerName = dexItemFactory.createString(innerClassName);
} else {
diff --git a/src/main/java/com/android/tools/r8/horizontalclassmerging/HorizontalClassMerger.java b/src/main/java/com/android/tools/r8/horizontalclassmerging/HorizontalClassMerger.java
index 9f2e2ad..59efae5 100644
--- a/src/main/java/com/android/tools/r8/horizontalclassmerging/HorizontalClassMerger.java
+++ b/src/main/java/com/android/tools/r8/horizontalclassmerging/HorizontalClassMerger.java
@@ -17,6 +17,8 @@
import com.android.tools.r8.graph.lens.MethodLookupResult;
import com.android.tools.r8.horizontalclassmerging.code.SyntheticInitializerConverter;
import com.android.tools.r8.ir.code.InvokeType;
+import com.android.tools.r8.ir.conversion.MethodConversionOptions;
+import com.android.tools.r8.ir.conversion.MethodConversionOptions.MutableMethodConversionOptions;
import com.android.tools.r8.profile.art.ArtProfileCompletenessChecker;
import com.android.tools.r8.profile.rewriting.ProfileCollectionAdditions;
import com.android.tools.r8.shaking.AppInfoWithLiveness;
@@ -88,7 +90,7 @@
timing.begin("HorizontalClassMerger (" + mode.toString() + ")");
IRCodeProvider codeProvider =
appView.hasClassHierarchy()
- ? IRCodeProvider.create(appView.withClassHierarchy())
+ ? IRCodeProvider.create(appView.withClassHierarchy(), this::getConversionOptions)
: IRCodeProvider.createThrowing();
run(runtimeTypeCheckInfo, codeProvider, executorService, timing);
@@ -104,6 +106,12 @@
}
}
+ private MutableMethodConversionOptions getConversionOptions() {
+ return mode == Mode.INITIAL
+ ? MethodConversionOptions.forPreLirPhase(appView)
+ : MethodConversionOptions.forPostLirPhase(appView);
+ }
+
private void run(
RuntimeTypeCheckInfo runtimeTypeCheckInfo,
IRCodeProvider codeProvider,
diff --git a/src/main/java/com/android/tools/r8/horizontalclassmerging/IRCodeProvider.java b/src/main/java/com/android/tools/r8/horizontalclassmerging/IRCodeProvider.java
index ab14412..6a35c88 100644
--- a/src/main/java/com/android/tools/r8/horizontalclassmerging/IRCodeProvider.java
+++ b/src/main/java/com/android/tools/r8/horizontalclassmerging/IRCodeProvider.java
@@ -10,7 +10,9 @@
import com.android.tools.r8.graph.ProgramMethod;
import com.android.tools.r8.graph.lens.GraphLens;
import com.android.tools.r8.ir.code.IRCode;
+import com.android.tools.r8.ir.conversion.MethodConversionOptions.MutableMethodConversionOptions;
import com.android.tools.r8.synthesis.SyntheticItems.GlobalSyntheticsStrategy;
+import java.util.function.Supplier;
public interface IRCodeProvider {
@@ -18,8 +20,10 @@
void setGraphLens(GraphLens graphLens);
- static IRCodeProvider create(AppView<? extends AppInfoWithClassHierarchy> appView) {
- return new IRCodeProviderImpl(appView);
+ static IRCodeProvider create(
+ AppView<? extends AppInfoWithClassHierarchy> appView,
+ Supplier<MutableMethodConversionOptions> getConversionOptions) {
+ return new IRCodeProviderImpl(appView, getConversionOptions);
}
static IRCodeProvider createThrowing() {
@@ -37,8 +41,11 @@
class IRCodeProviderImpl implements IRCodeProvider {
private final AppView<AppInfo> appViewForConversion;
+ private Supplier<MutableMethodConversionOptions> getConversionOptions;
- private IRCodeProviderImpl(AppView<? extends AppInfoWithClassHierarchy> appView) {
+ private IRCodeProviderImpl(
+ AppView<? extends AppInfoWithClassHierarchy> appView,
+ Supplier<MutableMethodConversionOptions> getConversionOptions) {
// At this point the code rewritings described by repackaging and synthetic finalization have
// not been applied to the code objects. These code rewritings will be applied in the
// application writer. We therefore simulate that we are in D8, to allow building IR for each
@@ -51,6 +58,7 @@
appViewForConversion.setGraphLens(appView.graphLens());
appViewForConversion.setCodeLens(appView.codeLens());
this.appViewForConversion = appViewForConversion;
+ this.getConversionOptions = getConversionOptions;
}
@Override
@@ -58,7 +66,7 @@
return method
.getDefinition()
.getCode()
- .buildIR(method, appViewForConversion, method.getOrigin());
+ .buildIR(method, appViewForConversion, method.getOrigin(), getConversionOptions.get());
}
@Override
diff --git a/src/main/java/com/android/tools/r8/ir/analysis/proto/GeneratedExtensionRegistryShrinker.java b/src/main/java/com/android/tools/r8/ir/analysis/proto/GeneratedExtensionRegistryShrinker.java
index a78dc55..613d763 100644
--- a/src/main/java/com/android/tools/r8/ir/analysis/proto/GeneratedExtensionRegistryShrinker.java
+++ b/src/main/java/com/android/tools/r8/ir/analysis/proto/GeneratedExtensionRegistryShrinker.java
@@ -22,6 +22,7 @@
import com.android.tools.r8.ir.code.Instruction;
import com.android.tools.r8.ir.code.StaticPut;
import com.android.tools.r8.ir.conversion.IRConverter;
+import com.android.tools.r8.ir.conversion.MethodConversionOptions;
import com.android.tools.r8.ir.conversion.MethodProcessorEventConsumer;
import com.android.tools.r8.ir.conversion.OneTimeMethodProcessor;
import com.android.tools.r8.ir.optimize.info.OptimizationFeedbackIgnore;
@@ -178,7 +179,8 @@
method,
OptimizationFeedbackIgnore.getInstance(),
methodProcessor,
- methodProcessingContext),
+ methodProcessingContext,
+ MethodConversionOptions.forPostLirPhase(appView)),
executorService);
timing.end();
}
diff --git a/src/main/java/com/android/tools/r8/ir/analysis/proto/GeneratedMessageLiteBuilderShrinker.java b/src/main/java/com/android/tools/r8/ir/analysis/proto/GeneratedMessageLiteBuilderShrinker.java
index 51de538..9ecd2a9 100644
--- a/src/main/java/com/android/tools/r8/ir/analysis/proto/GeneratedMessageLiteBuilderShrinker.java
+++ b/src/main/java/com/android/tools/r8/ir/analysis/proto/GeneratedMessageLiteBuilderShrinker.java
@@ -33,6 +33,7 @@
import com.android.tools.r8.ir.code.StaticGet;
import com.android.tools.r8.ir.code.Value;
import com.android.tools.r8.ir.conversion.IRConverter;
+import com.android.tools.r8.ir.conversion.MethodConversionOptions.MutableMethodConversionOptions;
import com.android.tools.r8.ir.conversion.MethodProcessor;
import com.android.tools.r8.ir.conversion.callgraph.Node;
import com.android.tools.r8.ir.optimize.Inliner;
@@ -42,6 +43,7 @@
import com.android.tools.r8.ir.optimize.info.OptimizationFeedbackSimple;
import com.android.tools.r8.ir.optimize.inliner.FixedInliningReasonStrategy;
import com.android.tools.r8.shaking.AppInfoWithLiveness;
+import com.android.tools.r8.shaking.DependentMinimumKeepInfoCollection;
import com.android.tools.r8.shaking.Enqueuer;
import com.android.tools.r8.shaking.EnqueuerWorklist;
import com.android.tools.r8.utils.Box;
@@ -202,7 +204,10 @@
* references.
*/
public void rewriteDeadBuilderReferencesFromDynamicMethods(
- AppView<AppInfoWithLiveness> appView, ExecutorService executorService, Timing timing)
+ MutableMethodConversionOptions conversionOptions,
+ AppView<AppInfoWithLiveness> appView,
+ ExecutorService executorService,
+ Timing timing)
throws ExecutionException {
if (builders.isEmpty()) {
return;
@@ -215,7 +220,7 @@
(builder, dynamicMethod) -> {
if (!appInfo.isLiveProgramClass(builder)) {
rewriteDeadBuilderReferencesFromDynamicMethod(
- appView, builder, dynamicMethod, converter);
+ appView, builder, dynamicMethod, converter, conversionOptions);
}
},
executorService);
@@ -227,8 +232,9 @@
AppView<AppInfoWithLiveness> appView,
DexProgramClass builder,
ProgramMethod dynamicMethod,
- IRConverter converter) {
- IRCode code = dynamicMethod.buildIR(appView);
+ IRConverter converter,
+ MutableMethodConversionOptions conversionOptions) {
+ IRCode code = dynamicMethod.buildIR(appView, conversionOptions);
InstructionListIterator instructionIterator = code.instructionListIterator();
assert builder.superType == references.generatedMessageLiteBuilderType
@@ -314,6 +320,14 @@
.extend(subtypingInfo);
}
+ public void extendRootSet(DependentMinimumKeepInfoCollection dependentMinimumKeepInfo) {
+ dependentMinimumKeepInfo
+ .getOrCreateUnconditionalMinimumKeepInfoFor(
+ references.generatedMessageLiteBuilderMethods.constructorMethod)
+ .asMethodJoiner()
+ .disallowInlining();
+ }
+
public void preprocessCallGraphBeforeCycleElimination(Map<DexMethod, Node> nodes) {
Node node = nodes.get(references.generatedMessageLiteBuilderMethods.constructorMethod);
if (node != null) {
@@ -332,7 +346,6 @@
public void inlineCallsToDynamicMethod(
ProgramMethod method,
IRCode code,
- EnumValueOptimizer enumValueOptimizer,
OptimizationFeedback feedback,
MethodProcessor methodProcessor,
Inliner inliner) {
@@ -345,9 +358,7 @@
// Run the enum optimization to optimize all Enum.ordinal() invocations. This is required to
// get rid of the enum switch in dynamicMethod().
- if (enumValueOptimizer != null) {
- enumValueOptimizer.run(code, Timing.empty());
- }
+ new EnumValueOptimizer(appView).run(code, Timing.empty());
}
/**
diff --git a/src/main/java/com/android/tools/r8/ir/analysis/proto/GeneratedMessageLiteShrinker.java b/src/main/java/com/android/tools/r8/ir/analysis/proto/GeneratedMessageLiteShrinker.java
index 809f0ad..608c06f 100644
--- a/src/main/java/com/android/tools/r8/ir/analysis/proto/GeneratedMessageLiteShrinker.java
+++ b/src/main/java/com/android/tools/r8/ir/analysis/proto/GeneratedMessageLiteShrinker.java
@@ -41,6 +41,7 @@
import com.android.tools.r8.ir.code.NewInstance;
import com.android.tools.r8.ir.code.Value;
import com.android.tools.r8.ir.conversion.IRConverter;
+import com.android.tools.r8.ir.conversion.MethodConversionOptions;
import com.android.tools.r8.ir.conversion.MethodProcessorEventConsumer;
import com.android.tools.r8.ir.conversion.OneTimeMethodProcessor;
import com.android.tools.r8.ir.optimize.info.OptimizationFeedbackIgnore;
@@ -258,7 +259,8 @@
method,
OptimizationFeedbackIgnore.getInstance(),
methodProcessor,
- methodProcessingContext),
+ methodProcessingContext,
+ MethodConversionOptions.forPostLirPhase(appView)),
executorService);
timing.end();
}
diff --git a/src/main/java/com/android/tools/r8/ir/analysis/proto/schema/ProtoEnqueuerExtension.java b/src/main/java/com/android/tools/r8/ir/analysis/proto/schema/ProtoEnqueuerExtension.java
index 61747c0..8e43229 100644
--- a/src/main/java/com/android/tools/r8/ir/analysis/proto/schema/ProtoEnqueuerExtension.java
+++ b/src/main/java/com/android/tools/r8/ir/analysis/proto/schema/ProtoEnqueuerExtension.java
@@ -35,6 +35,7 @@
import com.android.tools.r8.ir.code.StaticGet;
import com.android.tools.r8.ir.code.StaticPut;
import com.android.tools.r8.ir.code.Value;
+import com.android.tools.r8.ir.conversion.MethodConversionOptions;
import com.android.tools.r8.ir.optimize.info.FieldOptimizationInfo;
import com.android.tools.r8.shaking.Enqueuer;
import com.android.tools.r8.shaking.EnqueuerWorklist;
@@ -167,7 +168,7 @@
DexType holder = dynamicMethod.getHolderType();
assert !protos.containsKey(holder);
- IRCode code = dynamicMethod.buildIR(appView);
+ IRCode code = dynamicMethod.buildIR(appView, MethodConversionOptions.nonConverting());
InvokeMethod newMessageInfoInvoke =
GeneratedMessageLiteShrinker.getNewMessageInfoInvoke(code, references);
ProtoMessageInfo protoMessageInfo =
@@ -231,7 +232,7 @@
return;
}
- IRCode code = clinit.buildIR(appView);
+ IRCode code = clinit.buildIR(appView, MethodConversionOptions.nonConverting());
Map<DexEncodedField, StaticPut> uniqueStaticPuts =
IRCodeUtils.findUniqueStaticPuts(appView, code, extensionFields);
for (DexEncodedField extensionField : extensionFields) {
@@ -256,7 +257,8 @@
private Map<DexProgramClass, Set<DexEncodedField>> collectExtensionFields() {
Map<DexProgramClass, Set<DexEncodedField>> extensionFieldsByClass = new IdentityHashMap<>();
for (ProgramMethod findLiteExtensionByNumberMethod : findLiteExtensionByNumberMethods) {
- IRCode code = findLiteExtensionByNumberMethod.buildIR(appView);
+ IRCode code =
+ findLiteExtensionByNumberMethod.buildIR(appView, MethodConversionOptions.nonConverting());
Set<Phi> seenPhis = Sets.newIdentityHashSet();
for (BasicBlock block : code.blocks(BasicBlock::isReturnBlock)) {
Value returnValue = block.exit().asReturn().returnValue();
diff --git a/src/main/java/com/android/tools/r8/ir/code/MoveException.java b/src/main/java/com/android/tools/r8/ir/code/MoveException.java
index ae9434b..73836d1 100644
--- a/src/main/java/com/android/tools/r8/ir/code/MoveException.java
+++ b/src/main/java/com/android/tools/r8/ir/code/MoveException.java
@@ -87,7 +87,7 @@
InternalOptions options = appView.options();
if (options.debug
|| code.context().getOrComputeReachabilitySensitive(appView)
- || code.getConversionOptions().isGeneratingClassFiles()) {
+ || !code.getConversionOptions().isGeneratingDex()) {
return DeadInstructionResult.notDead();
}
return DeadInstructionResult.deadIfOutValueIsDead();
diff --git a/src/main/java/com/android/tools/r8/ir/conversion/D8MethodProcessor.java b/src/main/java/com/android/tools/r8/ir/conversion/D8MethodProcessor.java
index 6c7a613..4e778ae 100644
--- a/src/main/java/com/android/tools/r8/ir/conversion/D8MethodProcessor.java
+++ b/src/main/java/com/android/tools/r8/ir/conversion/D8MethodProcessor.java
@@ -128,7 +128,8 @@
method,
OptimizationFeedbackIgnore.getInstance(),
this,
- processorContext.createMethodProcessingContext(method)),
+ processorContext.createMethodProcessingContext(method),
+ MethodConversionOptions.forD8(converter.appView)),
executorService));
}
diff --git a/src/main/java/com/android/tools/r8/ir/conversion/IRConverter.java b/src/main/java/com/android/tools/r8/ir/conversion/IRConverter.java
index 7e0cf3a..5b22d0e 100644
--- a/src/main/java/com/android/tools/r8/ir/conversion/IRConverter.java
+++ b/src/main/java/com/android/tools/r8/ir/conversion/IRConverter.java
@@ -29,6 +29,7 @@
import com.android.tools.r8.ir.code.InstructionIterator;
import com.android.tools.r8.ir.code.NumberGenerator;
import com.android.tools.r8.ir.code.Value;
+import com.android.tools.r8.ir.conversion.MethodConversionOptions.MutableMethodConversionOptions;
import com.android.tools.r8.ir.conversion.passes.ArrayConstructionSimplifier;
import com.android.tools.r8.ir.conversion.passes.BinopRewriter;
import com.android.tools.r8.ir.conversion.passes.BranchSimplifier;
@@ -38,6 +39,7 @@
import com.android.tools.r8.ir.conversion.passes.MoveResultRewriter;
import com.android.tools.r8.ir.conversion.passes.NaturalIntLoopRemover;
import com.android.tools.r8.ir.conversion.passes.ParentConstructorHoistingCodeRewriter;
+import com.android.tools.r8.ir.conversion.passes.RedundantConstNumberRemover;
import com.android.tools.r8.ir.conversion.passes.SplitBranch;
import com.android.tools.r8.ir.conversion.passes.ThrowCatchOptimizer;
import com.android.tools.r8.ir.conversion.passes.TrivialCheckCastAndInstanceOfRemover;
@@ -124,8 +126,6 @@
private final ClassInliner classInliner;
protected final InternalOptions options;
public final CodeRewriter codeRewriter;
- public final CommonSubexpressionElimination commonSubexpressionElimination;
- private final SplitBranch splitBranch;
public AssertionErrorTwoArgsConstructorRewriter assertionErrorTwoArgsConstructorRewriter;
public final MemberValuePropagation<?> memberValuePropagation;
private final LensCodeRewriter lensCodeRewriter;
@@ -136,8 +136,6 @@
private final StringSwitchRemover stringSwitchRemover;
private final TypeChecker typeChecker;
protected ServiceLoaderRewriter serviceLoaderRewriter;
- private final EnumValueOptimizer enumValueOptimizer;
- private final BinopRewriter binopRewriter;
protected final EnumUnboxer enumUnboxer;
protected InstanceInitializerOutliner instanceInitializerOutliner;
protected final RemoveVerificationErrorForUnknownReturnedValues
@@ -176,8 +174,6 @@
this.appView = appView;
this.options = appView.options();
this.codeRewriter = new CodeRewriter(appView);
- this.commonSubexpressionElimination = new CommonSubexpressionElimination(appView);
- this.splitBranch = new SplitBranch(appView);
this.assertionErrorTwoArgsConstructorRewriter =
appView.options().desugarState.isOn()
? new AssertionErrorTwoArgsConstructorRewriter(appView)
@@ -227,8 +223,6 @@
this.stringSwitchRemover = null;
this.serviceLoaderRewriter = null;
this.methodOptimizationInfoCollector = null;
- this.enumValueOptimizer = null;
- this.binopRewriter = null;
this.enumUnboxer = EnumUnboxer.empty();
this.assumeInserter = null;
this.instanceInitializerOutliner = null;
@@ -289,12 +283,6 @@
options.enableServiceLoaderRewriting
? new ServiceLoaderRewriter(appViewWithLiveness, appView.apiLevelCompute())
: null;
- this.enumValueOptimizer =
- options.enableEnumValueOptimization ? new EnumValueOptimizer(appViewWithLiveness) : null;
- this.binopRewriter =
- options.testing.enableBinopOptimization && !options.debug
- ? new BinopRewriter(appView)
- : null;
} else {
AppView<AppInfo> appViewWithoutClassHierarchy = appView.withoutClassHierarchy();
this.assumeInserter = null;
@@ -314,8 +302,6 @@
this.typeChecker = null;
this.serviceLoaderRewriter = null;
this.methodOptimizationInfoCollector = null;
- this.enumValueOptimizer = null;
- this.binopRewriter = null;
this.enumUnboxer = EnumUnboxer.empty();
}
this.stringSwitchRemover =
@@ -413,15 +399,18 @@
public void optimizeSynthesizedMethods(
List<ProgramMethod> programMethods,
MethodProcessorEventConsumer eventConsumer,
+ MutableMethodConversionOptions conversionOptions,
ExecutorService executorService)
throws ExecutionException {
// Process the generated class, but don't apply any outlining.
ProgramMethodSet methods = ProgramMethodSet.create(programMethods::forEach);
- processMethodsConcurrently(methods, eventConsumer, executorService);
+ processMethodsConcurrently(methods, eventConsumer, conversionOptions, executorService);
}
public void optimizeSynthesizedMethod(
- ProgramMethod synthesizedMethod, MethodProcessorEventConsumer eventConsumer) {
+ ProgramMethod synthesizedMethod,
+ MethodProcessorEventConsumer eventConsumer,
+ MutableMethodConversionOptions conversionOptions) {
if (!synthesizedMethod.getDefinition().isProcessed()) {
// Process the generated method, but don't apply any outlining.
OneTimeMethodProcessor methodProcessor =
@@ -429,25 +418,31 @@
methodProcessor.forEachWaveWithExtension(
(method, methodProcessingContext) ->
processDesugaredMethod(
- method, delayedOptimizationFeedback, methodProcessor, methodProcessingContext));
+ method,
+ delayedOptimizationFeedback,
+ methodProcessor,
+ methodProcessingContext,
+ conversionOptions));
}
}
public void processClassesConcurrently(
Collection<DexProgramClass> classes,
MethodProcessorEventConsumer eventConsumer,
+ MutableMethodConversionOptions conversionOptions,
ExecutorService executorService)
throws ExecutionException {
ProgramMethodSet wave = ProgramMethodSet.create();
for (DexProgramClass clazz : classes) {
clazz.forEachProgramMethod(wave::add);
}
- processMethodsConcurrently(wave, eventConsumer, executorService);
+ processMethodsConcurrently(wave, eventConsumer, conversionOptions, executorService);
}
public void processMethodsConcurrently(
ProgramMethodSet wave,
MethodProcessorEventConsumer eventConsumer,
+ MutableMethodConversionOptions conversionOptions,
ExecutorService executorService)
throws ExecutionException {
if (!wave.isEmpty()) {
@@ -456,7 +451,11 @@
methodProcessor.forEachWaveWithExtension(
(method, methodProcessingContext) ->
processDesugaredMethod(
- method, delayedOptimizationFeedback, methodProcessor, methodProcessingContext),
+ method,
+ delayedOptimizationFeedback,
+ methodProcessor,
+ methodProcessingContext,
+ conversionOptions),
executorService);
}
}
@@ -466,12 +465,14 @@
ProgramMethod method,
OptimizationFeedback feedback,
MethodProcessor methodProcessor,
- MethodProcessingContext methodProcessingContext) {
+ MethodProcessingContext methodProcessingContext,
+ MutableMethodConversionOptions conversionOptions) {
DexEncodedMethod definition = method.getDefinition();
Code code = definition.getCode();
boolean matchesMethodFilter = options.methodMatchesFilter(definition);
if (code != null && matchesMethodFilter) {
- return rewriteDesugaredCode(method, feedback, methodProcessor, methodProcessingContext);
+ return rewriteDesugaredCode(
+ method, feedback, methodProcessor, methodProcessingContext, conversionOptions);
} else {
// Mark abstract methods as processed as well.
definition.markProcessed(ConstraintWithTarget.NEVER);
@@ -491,20 +492,22 @@
ProgramMethod method,
OptimizationFeedback feedback,
MethodProcessor methodProcessor,
- MethodProcessingContext methodProcessingContext) {
+ MethodProcessingContext methodProcessingContext,
+ MutableMethodConversionOptions conversionOptions) {
return ExceptionUtils.withOriginAndPositionAttachmentHandler(
method.getOrigin(),
new MethodPosition(method.getReference().asMethodReference()),
() ->
rewriteDesugaredCodeInternal(
- method, feedback, methodProcessor, methodProcessingContext));
+ method, feedback, methodProcessor, methodProcessingContext, conversionOptions));
}
protected Timing rewriteDesugaredCodeInternal(
ProgramMethod method,
OptimizationFeedback feedback,
MethodProcessor methodProcessor,
- MethodProcessingContext methodProcessingContext) {
+ MethodProcessingContext methodProcessingContext,
+ MutableMethodConversionOptions conversionOptions) {
if (options.verbose) {
options.reporter.info(
new StringDiagnostic("Processing: " + method.toSourceString()));
@@ -518,7 +521,7 @@
return Timing.empty();
}
- IRCode code = method.buildIR(appView);
+ IRCode code = method.buildIR(appView, conversionOptions);
if (code == null) {
feedback.markProcessed(method.getDefinition(), ConstraintWithTarget.NEVER);
return Timing.empty();
@@ -644,13 +647,10 @@
previous = printMethod(code, "IR after member-value propagation (SSA)", previous);
}
- if (enumValueOptimizer != null) {
- assert appView.enableWholeProgramOptimizations();
- timing.begin("Remove switch maps");
- enumValueOptimizer.removeSwitchMaps(code);
- timing.end();
- previous = printMethod(code, "IR after enum-value optimization (SSA)", previous);
- }
+ timing.begin("Remove switch maps");
+ new EnumValueOptimizer(appView).removeSwitchMaps(code);
+ timing.end();
+ previous = printMethod(code, "IR after enum-switch optimization (SSA)", previous);
if (instanceInitializerOutliner != null) {
instanceInitializerOutliner.rewriteInstanceInitializers(
@@ -740,63 +740,35 @@
assert code.verifyTypes(appView);
- new TrivialCheckCastAndInstanceOfRemover(appView)
- .run(code, methodProcessor, methodProcessingContext, timing);
-
- if (enumValueOptimizer != null) {
- assert appView.enableWholeProgramOptimizations();
- enumValueOptimizer.run(code, timing);
- }
-
- new KnownArrayLengthRewriter(appView).run(code, timing);
- new NaturalIntLoopRemover(appView).run(code, timing);
if (assertionErrorTwoArgsConstructorRewriter != null) {
timing.begin("Rewrite AssertionError");
assertionErrorTwoArgsConstructorRewriter.rewrite(
code, methodProcessor, methodProcessingContext);
timing.end();
}
- commonSubexpressionElimination.run(code, timing);
+
+ new TrivialCheckCastAndInstanceOfRemover(appView)
+ .run(code, methodProcessor, methodProcessingContext, timing);
+ new EnumValueOptimizer(appView).run(code, timing);
+ new KnownArrayLengthRewriter(appView).run(code, timing);
+ new NaturalIntLoopRemover(appView).run(code, timing);
+ new CommonSubexpressionElimination(appView).run(code, timing);
new ArrayConstructionSimplifier(appView).run(code, timing);
new MoveResultRewriter(appView).run(code, timing);
- if (options.enableStringConcatenationOptimization && !isDebugMode) {
- new StringBuilderAppendOptimizer(appView).run(code, timing);
- }
+ new StringBuilderAppendOptimizer(appView).run(code, timing);
new SparseConditionalConstantPropagation(appView, code).run(code, timing);
- timing.begin("Rewrite always throwing instructions");
- new ThrowCatchOptimizer(appView).optimizeAlwaysThrowingInstructions(code);
- timing.end();
- timing.begin("Simplify control flow");
- if (new BranchSimplifier(appView).simplifyBranches(code)) {
+ new ThrowCatchOptimizer(appView).run(code, timing);
+ if (new BranchSimplifier(appView)
+ .run(code, timing)
+ .asControlFlowSimplificationResult()
+ .anyAffectedValues()) {
new TrivialCheckCastAndInstanceOfRemover(appView)
.run(code, methodProcessor, methodProcessingContext, timing);
}
- timing.end();
- splitBranch.run(code, timing);
- if (options.enableRedundantConstNumberOptimization) {
- timing.begin("Remove const numbers");
- codeRewriter.redundantConstNumberRemoval(code);
- timing.end();
- }
- if (RedundantFieldLoadAndStoreElimination.shouldRun(appView, code)) {
- timing.begin("Remove field loads");
- new RedundantFieldLoadAndStoreElimination(appView, code).run();
- timing.end();
- }
- if (binopRewriter != null) {
- binopRewriter.run(code, timing);
- }
-
- if (options.testing.invertConditionals) {
- invertConditionalsForTesting(code);
- }
-
- if (!isDebugMode) {
- timing.begin("Rewrite throw NPE");
- new ThrowCatchOptimizer(appView).rewriteThrowNullPointerException(code);
- timing.end();
- previous = printMethod(code, "IR after rewrite throw null (SSA)", previous);
- }
+ new SplitBranch(appView).run(code, timing);
+ new RedundantConstNumberRemover(appView).run(code, timing);
+ new RedundantFieldLoadAndStoreElimination(appView, code).run(code, timing);
+ new BinopRewriter(appView).run(code, timing);
timing.begin("Optimize class initializers");
ClassInitializerDefaultsResult classInitializerDefaultsResult =
@@ -810,6 +782,10 @@
deadCodeRemover.run(code, timing);
assert code.isConsistentSSA(appView);
+ if (options.testing.invertConditionals) {
+ invertConditionalsForTesting(code);
+ }
+
previous = printMethod(code, "IR after dead code removal (SSA)", previous);
assert code.verifyTypes(appView);
@@ -824,7 +800,6 @@
classInliner.processMethodCode(
appView.withLiveness(),
stringOptimizer,
- enumValueOptimizer,
code.context(),
code,
feedback,
@@ -937,7 +912,6 @@
// Assert that we do not have unremoved non-sense code in the output, e.g., v <- non-null NULL.
assert code.verifyNoNullabilityBottomTypes();
-
assert code.verifyTypes(appView);
previous =
@@ -1068,16 +1042,17 @@
if (options.testing.roundtripThroughLir) {
code = roundtripThroughLir(code, feedback, bytecodeMetadataProvider, timing);
}
- if (options.testing.canUseLir(appView)) {
+ MethodConversionOptions conversionOptions = code.getConversionOptions();
+ if (conversionOptions.isGeneratingLir()) {
timing.begin("IR->LIR");
finalizeToLir(code, feedback, bytecodeMetadataProvider, timing);
timing.end();
- } else if (options.isGeneratingClassFiles()) {
+ } else if (conversionOptions.isGeneratingClassFiles()) {
timing.begin("IR->CF");
finalizeToCf(code, feedback, bytecodeMetadataProvider, timing);
timing.end();
} else {
- assert options.isGeneratingDex();
+ assert conversionOptions.isGeneratingDex();
timing.begin("IR->DEX");
finalizeToDex(code, feedback, bytecodeMetadataProvider, timing);
timing.end();
@@ -1130,7 +1105,8 @@
appView,
null,
RewrittenPrototypeDescription.none(),
- appView.graphLens().getOriginalMethodSignature(code.context().getReference()));
+ appView.graphLens().getOriginalMethodSignature(code.context().getReference()),
+ (MutableMethodConversionOptions) code.getConversionOptions());
timing.end();
return irCode;
}
@@ -1177,7 +1153,6 @@
.finalizeCode(code, bytecodeMetadataProvider, timing),
appView);
markProcessed(code, feedback);
- updateHighestSortingStrings(definition);
}
public void markProcessed(IRCode code, OptimizationFeedback feedback) {
@@ -1205,18 +1180,6 @@
return true;
}
- protected synchronized void updateHighestSortingStrings(DexEncodedMethod method) {
- Code code = method.getCode();
- assert code.isDexWritableCode();
- DexString highestSortingReferencedString = code.asDexWritableCode().getHighestSortingString();
- if (highestSortingReferencedString != null) {
- if (highestSortingString == null
- || highestSortingReferencedString.compareTo(highestSortingString) > 0) {
- highestSortingString = highestSortingReferencedString;
- }
- }
- }
-
public void printPhase(String phase) {
if (!options.extensiveLoggingFilter.isEmpty()) {
System.out.println("Entering phase: " + phase);
@@ -1289,32 +1252,4 @@
inliner.onMethodCodePruned(method);
}
}
-
- public void finalizeLirMethodToOutputFormat(ProgramMethod method) {
- Code code = method.getDefinition().getCode();
- if (!(code instanceof LirCode)) {
- return;
- }
- Timing onThreadTiming = Timing.empty();
- IRCode irCode = method.buildIR(appView);
- // Processing is done and no further uses of the meta-data should arise.
- BytecodeMetadataProvider bytecodeMetadataProvider = BytecodeMetadataProvider.empty();
- // During processing optimization info may cause previously live code to become dead.
- // E.g., we may now have knowledge that an invoke does not have side effects.
- // Thus, we re-run the dead-code remover now as it is assumed complete by CF/DEX finalization.
- deadCodeRemover.run(irCode, onThreadTiming);
- if (options.isGeneratingClassFiles()) {
- method.setCode(
- new IRToCfFinalizer(appView, deadCodeRemover)
- .finalizeCode(irCode, bytecodeMetadataProvider, onThreadTiming),
- appView);
- } else {
- assert options.isGeneratingDex();
- method.setCode(
- new IRToDexFinalizer(appView, deadCodeRemover)
- .finalizeCode(irCode, bytecodeMetadataProvider, onThreadTiming),
- appView);
- updateHighestSortingStrings(method.getDefinition());
- }
- }
}
diff --git a/src/main/java/com/android/tools/r8/ir/conversion/IRToDexFinalizer.java b/src/main/java/com/android/tools/r8/ir/conversion/IRToDexFinalizer.java
index 8c161b8..535c9e7 100644
--- a/src/main/java/com/android/tools/r8/ir/conversion/IRToDexFinalizer.java
+++ b/src/main/java/com/android/tools/r8/ir/conversion/IRToDexFinalizer.java
@@ -37,17 +37,20 @@
D8NestBasedAccessDesugaring.checkAndFailOnIncompleteNests(appView);
}
DexEncodedMethod method = code.method();
+ workaroundBugs(code, timing);
code.traceBlocks();
- workaroundBugs(code);
// Perform register allocation.
RegisterAllocator registerAllocator = performRegisterAllocation(code, method, timing);
return new DexBuilder(code, bytecodeMetadataProvider, registerAllocator, options).build();
}
- private void workaroundBugs(IRCode code) {
+ private void workaroundBugs(IRCode code, Timing timing) {
RuntimeWorkaroundCodeRewriter.workaroundNumberConversionRegisterAllocationBug(code, options);
// Workaround massive dex2oat memory use for self-recursive methods.
RuntimeWorkaroundCodeRewriter.workaroundDex2OatInliningIssue(appView, code);
+ if (RuntimeWorkaroundCodeRewriter.workaroundInstanceOfTypeWeakeningInVerifier(appView, code)) {
+ deadCodeRemover.run(code, timing);
+ }
// Workaround MAX_INT switch issue.
RuntimeWorkaroundCodeRewriter.workaroundSwitchMaxIntBug(code, appView);
RuntimeWorkaroundCodeRewriter.workaroundDex2OatLinkedListBug(code, options);
diff --git a/src/main/java/com/android/tools/r8/ir/conversion/MethodConversionOptions.java b/src/main/java/com/android/tools/r8/ir/conversion/MethodConversionOptions.java
index adf0102..69c916e 100644
--- a/src/main/java/com/android/tools/r8/ir/conversion/MethodConversionOptions.java
+++ b/src/main/java/com/android/tools/r8/ir/conversion/MethodConversionOptions.java
@@ -5,15 +5,67 @@
package com.android.tools.r8.ir.conversion;
import com.android.tools.r8.errors.Unreachable;
+import com.android.tools.r8.graph.AppView;
import com.android.tools.r8.utils.InternalOptions;
public abstract class MethodConversionOptions {
+ public static MutableMethodConversionOptions forPreLirPhase(AppView<?> appView) {
+ if (!appView.enableWholeProgramOptimizations()) {
+ return forD8(appView);
+ }
+ assert appView.testing().isPreLirPhase();
+ return new MutableMethodConversionOptions(Target.CF, appView.options());
+ }
+
+ public static MutableMethodConversionOptions forPostLirPhase(AppView<?> appView) {
+ if (!appView.enableWholeProgramOptimizations()) {
+ return forD8(appView);
+ }
+ assert appView.testing().isPostLirPhase();
+ Target target = appView.options().isGeneratingClassFiles() ? Target.CF : Target.DEX;
+ return new MutableMethodConversionOptions(target, appView.options());
+ }
+
+ public static MutableMethodConversionOptions forLirPhase(AppView<?> appView) {
+ if (!appView.enableWholeProgramOptimizations()) {
+ return forD8(appView);
+ }
+ assert appView.testing().isSupportedLirPhase();
+ return new MutableMethodConversionOptions(determineTarget(appView), appView.options());
+ }
+
+ public static MutableMethodConversionOptions forD8(AppView<?> appView) {
+ assert !appView.enableWholeProgramOptimizations();
+ return new MutableMethodConversionOptions(determineTarget(appView), appView.options());
+ }
+
+ public static MutableMethodConversionOptions nonConverting() {
+ return new ThrowingMethodConversionOptions();
+ }
+
+ private enum Target {
+ CF,
+ DEX,
+ LIR
+ }
+
+ private static Target determineTarget(AppView<?> appView) {
+ if (appView.testing().canUseLir(appView)) {
+ return Target.LIR;
+ }
+ if (appView.options().isGeneratingClassFiles()) {
+ return Target.CF;
+ }
+ assert appView.options().isGeneratingDex();
+ return Target.DEX;
+ }
+
+ public abstract boolean isGeneratingLir();
+
public abstract boolean isGeneratingClassFiles();
- public final boolean isGeneratingDex() {
- return !isGeneratingClassFiles();
- }
+ public abstract boolean isGeneratingDex();
public abstract boolean isPeepholeOptimizationsEnabled();
@@ -21,13 +73,17 @@
public static class MutableMethodConversionOptions extends MethodConversionOptions {
+ private Target target;
private boolean enablePeepholeOptimizations = true;
private boolean enableStringSwitchConversion;
- private boolean isGeneratingClassFiles;
- public MutableMethodConversionOptions(InternalOptions options) {
- this.enableStringSwitchConversion = options.isStringSwitchConversionEnabled();
- this.isGeneratingClassFiles = options.isGeneratingClassFiles();
+ private MutableMethodConversionOptions(Target target, boolean enableStringSwitchConversion) {
+ this.target = target;
+ this.enableStringSwitchConversion = enableStringSwitchConversion;
+ }
+
+ private MutableMethodConversionOptions(Target target, InternalOptions options) {
+ this(target, options.isStringSwitchConversionEnabled());
}
public void disablePeepholeOptimizations(MethodProcessor methodProcessor) {
@@ -40,15 +96,19 @@
return this;
}
- public MutableMethodConversionOptions setIsGeneratingClassFiles(
- boolean isGeneratingClassFiles) {
- this.isGeneratingClassFiles = isGeneratingClassFiles;
- return this;
+ @Override
+ public boolean isGeneratingLir() {
+ return target == Target.LIR;
}
@Override
public boolean isGeneratingClassFiles() {
- return isGeneratingClassFiles;
+ return target == Target.CF;
+ }
+
+ @Override
+ public boolean isGeneratingDex() {
+ return target == Target.DEX;
}
@Override
@@ -64,8 +124,13 @@
public static class ThrowingMethodConversionOptions extends MutableMethodConversionOptions {
- public ThrowingMethodConversionOptions(InternalOptions options) {
- super(options);
+ private ThrowingMethodConversionOptions() {
+ super(null, true);
+ }
+
+ @Override
+ public boolean isGeneratingLir() {
+ throw new Unreachable();
}
@Override
@@ -74,6 +139,11 @@
}
@Override
+ public boolean isGeneratingDex() {
+ throw new Unreachable();
+ }
+
+ @Override
public boolean isPeepholeOptimizationsEnabled() {
throw new Unreachable();
}
diff --git a/src/main/java/com/android/tools/r8/ir/conversion/PrimaryD8L8IRConverter.java b/src/main/java/com/android/tools/r8/ir/conversion/PrimaryD8L8IRConverter.java
index bcbbe63..c5c3e73 100644
--- a/src/main/java/com/android/tools/r8/ir/conversion/PrimaryD8L8IRConverter.java
+++ b/src/main/java/com/android/tools/r8/ir/conversion/PrimaryD8L8IRConverter.java
@@ -85,7 +85,7 @@
application = commitPendingSyntheticItems(appView, application);
// Build a new application with jumbo string info,
- Builder<?> builder = application.builder().setHighestSortingString(highestSortingString);
+ Builder<?> builder = application.builder();
if (appView.options().isDesugaredLibraryCompilation()) {
new EmulatedInterfaceApplicationRewriter(appView).rewriteApplication(builder);
@@ -169,9 +169,6 @@
} else {
assert definition.getCode().isDexCode();
}
- if (!options.isGeneratingClassFiles()) {
- updateHighestSortingStrings(definition);
- }
}
private void checkPrefixMerging(ProgramMethod method) {
@@ -380,7 +377,12 @@
MethodProcessor methodProcessor,
MethodProcessingContext methodProcessingContext) {
boolean didDesugar = desugar(method, desugaringEventConsumer, methodProcessingContext);
- return rewriteDesugaredCodeInternal(method, feedback, methodProcessor, methodProcessingContext);
+ return rewriteDesugaredCodeInternal(
+ method,
+ feedback,
+ methodProcessor,
+ methodProcessingContext,
+ MethodConversionOptions.forD8(appView));
}
private boolean desugar(
diff --git a/src/main/java/com/android/tools/r8/ir/conversion/PrimaryR8IRConverter.java b/src/main/java/com/android/tools/r8/ir/conversion/PrimaryR8IRConverter.java
index 9df87ae..729a2e5 100644
--- a/src/main/java/com/android/tools/r8/ir/conversion/PrimaryR8IRConverter.java
+++ b/src/main/java/com/android/tools/r8/ir/conversion/PrimaryR8IRConverter.java
@@ -6,14 +6,18 @@
import com.android.tools.r8.graph.AppInfoWithClassHierarchy;
import com.android.tools.r8.graph.AppView;
+import com.android.tools.r8.graph.Code;
import com.android.tools.r8.graph.DexApplication;
-import com.android.tools.r8.graph.DexApplication.Builder;
import com.android.tools.r8.graph.DexEncodedMethod;
import com.android.tools.r8.graph.DexProgramClass;
+import com.android.tools.r8.graph.ProgramMethod;
import com.android.tools.r8.graph.PrunedItems;
+import com.android.tools.r8.graph.bytecodemetadata.BytecodeMetadataProvider;
import com.android.tools.r8.graph.lens.GraphLens;
import com.android.tools.r8.ir.analysis.fieldaccess.TrivialFieldAccessReprocessor;
+import com.android.tools.r8.ir.code.IRCode;
import com.android.tools.r8.ir.optimize.info.OptimizationFeedbackDelayed;
+import com.android.tools.r8.lightir.LirCode;
import com.android.tools.r8.optimize.argumentpropagation.ArgumentPropagator;
import com.android.tools.r8.shaking.AppInfoWithLiveness;
import com.android.tools.r8.utils.ThreadUtils;
@@ -51,6 +55,7 @@
private DexApplication internalOptimize(
AppView<AppInfoWithLiveness> appView, ExecutorService executorService)
throws ExecutionException {
+ appView.testing().enterLirSupportedPhase();
// Desugaring happens in the enqueuer.
assert instructionDesugaring.isEmpty();
@@ -93,7 +98,11 @@
primaryMethodProcessor.forEachMethod(
(method, methodProcessingContext) ->
processDesugaredMethod(
- method, feedback, primaryMethodProcessor, methodProcessingContext),
+ method,
+ feedback,
+ primaryMethodProcessor,
+ methodProcessingContext,
+ MethodConversionOptions.forLirPhase(appView)),
this::waveStart,
this::waveDone,
timing,
@@ -168,7 +177,11 @@
postMethodProcessor.forEachMethod(
(method, methodProcessingContext) ->
processDesugaredMethod(
- method, feedback, postMethodProcessor, methodProcessingContext),
+ method,
+ feedback,
+ postMethodProcessor,
+ methodProcessingContext,
+ MethodConversionOptions.forLirPhase(appView)),
feedback,
executorService,
timing);
@@ -191,10 +204,6 @@
// synthetics.)
commitPendingSyntheticItems(appView);
- // Build a new application with jumbo string info.
- Builder<?> builder = appView.appInfo().app().builder();
- builder.setHighestSortingString(highestSortingString);
-
// Update optimization info for all synthesized methods at once.
feedback.updateVisibleOptimizationInfo();
@@ -209,11 +218,12 @@
// Assure that no more optimization feedback left after post processing.
assert feedback.noUpdatesLeft();
finalizeLirToOutputFormat(timing, executorService);
- return builder.build();
+ return appView.appInfo().app();
}
private void finalizeLirToOutputFormat(Timing timing, ExecutorService executorService)
throws ExecutionException {
+ appView.testing().exitLirSupportedPhase();
if (!options.testing.canUseLir(appView)) {
return;
}
@@ -230,6 +240,34 @@
timing.end();
}
+ void finalizeLirMethodToOutputFormat(ProgramMethod method) {
+ Code code = method.getDefinition().getCode();
+ if (!(code instanceof LirCode)) {
+ return;
+ }
+ Timing onThreadTiming = Timing.empty();
+ IRCode irCode = method.buildIR(appView, MethodConversionOptions.forPostLirPhase(appView));
+ // Processing is done and no further uses of the meta-data should arise.
+ BytecodeMetadataProvider bytecodeMetadataProvider = BytecodeMetadataProvider.empty();
+ // During processing optimization info may cause previously live code to become dead.
+ // E.g., we may now have knowledge that an invoke does not have side effects.
+ // Thus, we re-run the dead-code remover now as it is assumed complete by CF/DEX finalization.
+ deadCodeRemover.run(irCode, onThreadTiming);
+ MethodConversionOptions conversionOptions = irCode.getConversionOptions();
+ if (conversionOptions.isGeneratingClassFiles()) {
+ method.setCode(
+ new IRToCfFinalizer(appView, deadCodeRemover)
+ .finalizeCode(irCode, bytecodeMetadataProvider, onThreadTiming),
+ appView);
+ } else {
+ assert conversionOptions.isGeneratingDex();
+ method.setCode(
+ new IRToDexFinalizer(appView, deadCodeRemover)
+ .finalizeCode(irCode, bytecodeMetadataProvider, onThreadTiming),
+ appView);
+ }
+ }
+
private void clearDexMethodCompilationState() {
appView.appInfo().classes().forEach(this::clearDexMethodCompilationState);
}
diff --git a/src/main/java/com/android/tools/r8/ir/conversion/passes/BinopRewriter.java b/src/main/java/com/android/tools/r8/ir/conversion/passes/BinopRewriter.java
index f684ff5..70c64f1 100644
--- a/src/main/java/com/android/tools/r8/ir/conversion/passes/BinopRewriter.java
+++ b/src/main/java/com/android/tools/r8/ir/conversion/passes/BinopRewriter.java
@@ -245,7 +245,9 @@
@Override
protected boolean shouldRewriteCode(IRCode code) {
- return true;
+ return options.testing.enableBinopOptimization
+ && !isDebugMode(code.context())
+ && code.metadata().mayHaveArithmeticOrLogicalBinop();
}
@Override
diff --git a/src/main/java/com/android/tools/r8/ir/conversion/passes/BranchSimplifier.java b/src/main/java/com/android/tools/r8/ir/conversion/passes/BranchSimplifier.java
index 28ddb01..a239404 100644
--- a/src/main/java/com/android/tools/r8/ir/conversion/passes/BranchSimplifier.java
+++ b/src/main/java/com/android/tools/r8/ir/conversion/passes/BranchSimplifier.java
@@ -4,6 +4,10 @@
package com.android.tools.r8.ir.conversion.passes;
+import static com.android.tools.r8.ir.conversion.passes.BranchSimplifier.ControlFlowSimplificationResult.NO_CHANGE;
+import static com.android.tools.r8.ir.conversion.passes.BranchSimplifier.ControlFlowSimplificationResult.create;
+
+import com.android.tools.r8.graph.AppInfo;
import com.android.tools.r8.graph.AppView;
import com.android.tools.r8.graph.DexClass;
import com.android.tools.r8.graph.DexEncodedField;
@@ -35,10 +39,10 @@
import com.android.tools.r8.ir.code.Value;
import com.android.tools.r8.ir.code.ValueType;
import com.android.tools.r8.ir.code.Xor;
+import com.android.tools.r8.ir.conversion.passes.result.CodeRewriterResult;
import com.android.tools.r8.ir.optimize.controlflow.SwitchCaseAnalyzer;
import com.android.tools.r8.shaking.AppInfoWithLiveness;
import com.android.tools.r8.utils.BooleanUtils;
-import com.android.tools.r8.utils.InternalOptions;
import com.android.tools.r8.utils.InternalOutputMode;
import com.android.tools.r8.utils.LongInterval;
import com.google.common.collect.ImmutableList;
@@ -59,20 +63,32 @@
import java.util.PriorityQueue;
import java.util.Set;
-public class BranchSimplifier {
-
- private final AppView<?> appView;
- private final InternalOptions options;
+public class BranchSimplifier extends CodeRewriterPass<AppInfo> {
public BranchSimplifier(AppView<?> appView) {
- this.appView = appView;
- this.options = appView.options();
+ super(appView);
}
- public boolean simplifyBranches(IRCode code) {
- boolean anyAffectedValues = rewriteSwitch(code);
- anyAffectedValues |= simplifyIf(code).anyAffectedValues();
- return anyAffectedValues;
+ @Override
+ protected String getTimingId() {
+ return "BranchSimplifier";
+ }
+
+ @Override
+ protected boolean shouldRewriteCode(IRCode code) {
+ return true;
+ }
+
+ @Override
+ protected CodeRewriterResult noChange() {
+ return NO_CHANGE;
+ }
+
+ @Override
+ protected CodeRewriterResult rewriteCode(IRCode code) {
+ ControlFlowSimplificationResult switchResult = rewriteSwitch(code);
+ ControlFlowSimplificationResult ifResult = simplifyIf(code);
+ return switchResult.combine(ifResult);
}
public ControlFlowSimplificationResult simplifyIf(IRCode code) {
@@ -126,10 +142,26 @@
}
code.removeRedundantBlocks();
assert code.isConsistentSSA(appView);
- return new ControlFlowSimplificationResult(!affectedValues.isEmpty(), simplified);
+ return create(!affectedValues.isEmpty(), simplified);
}
- public static class ControlFlowSimplificationResult {
+ public static class ControlFlowSimplificationResult implements CodeRewriterResult {
+
+ static ControlFlowSimplificationResult create(
+ boolean anyAffectedValues, boolean anySimplifications) {
+ if (anyAffectedValues) {
+ assert anySimplifications;
+ return ALL_CHANGED;
+ }
+ return anySimplifications ? ONLY_SIMPLIFICATIONS : NO_CHANGE;
+ }
+
+ static final ControlFlowSimplificationResult ALL_CHANGED =
+ new ControlFlowSimplificationResult(true, true);
+ static final ControlFlowSimplificationResult ONLY_SIMPLIFICATIONS =
+ new ControlFlowSimplificationResult(false, true);
+ static final ControlFlowSimplificationResult NO_CHANGE =
+ new ControlFlowSimplificationResult(false, false);
private final boolean anyAffectedValues;
private final boolean anySimplifications;
@@ -140,6 +172,11 @@
this.anySimplifications = anySimplifications;
}
+ @Override
+ public ControlFlowSimplificationResult asControlFlowSimplificationResult() {
+ return this;
+ }
+
public boolean anyAffectedValues() {
return anyAffectedValues;
}
@@ -147,6 +184,18 @@
public boolean anySimplifications() {
return anySimplifications;
}
+
+ @Override
+ public boolean hasChanged() {
+ assert !anyAffectedValues || anySimplifications;
+ return anySimplifications();
+ }
+
+ public ControlFlowSimplificationResult combine(ControlFlowSimplificationResult ifResult) {
+ return create(
+ anyAffectedValues || ifResult.anyAffectedValues,
+ anySimplifications || ifResult.anySimplifications);
+ }
}
private boolean simplifyIfZeroTest(IRCode code, BasicBlock block, If theIf) {
@@ -567,22 +616,25 @@
return true;
}
- private boolean rewriteSwitch(IRCode code) {
+ private ControlFlowSimplificationResult rewriteSwitch(IRCode code) {
return rewriteSwitch(code, SwitchCaseAnalyzer.getInstance());
}
- private boolean rewriteSwitch(IRCode code, SwitchCaseAnalyzer switchCaseAnalyzer) {
+ private ControlFlowSimplificationResult rewriteSwitch(
+ IRCode code, SwitchCaseAnalyzer switchCaseAnalyzer) {
if (!options.isSwitchRewritingEnabled()) {
- return false;
+ return NO_CHANGE;
}
if (!code.metadata().mayHaveSwitch()) {
- return false;
+ return NO_CHANGE;
}
return rewriteSwitchFull(code, switchCaseAnalyzer);
}
- private boolean rewriteSwitchFull(IRCode code, SwitchCaseAnalyzer switchCaseAnalyzer) {
+ private ControlFlowSimplificationResult rewriteSwitchFull(
+ IRCode code, SwitchCaseAnalyzer switchCaseAnalyzer) {
boolean needToRemoveUnreachableBlocks = false;
+ boolean anySimplifications = false;
ListIterator<BasicBlock> blocksIterator = code.listIterator();
while (blocksIterator.hasNext()) {
BasicBlock block = blocksIterator.next();
@@ -594,6 +646,7 @@
if (options.testing.enableDeadSwitchCaseElimination) {
SwitchCaseEliminator eliminator =
removeUnnecessarySwitchCases(code, theSwitch, iterator, switchCaseAnalyzer);
+ anySimplifications |= eliminator.canBeOptimized();
if (eliminator.mayHaveIntroducedUnreachableBlocks()) {
needToRemoveUnreachableBlocks = true;
}
@@ -608,7 +661,8 @@
theSwitch = instruction.asSwitch();
}
if (theSwitch.isIntSwitch()) {
- rewriteIntSwitch(code, blocksIterator, block, iterator, theSwitch.asIntSwitch());
+ anySimplifications |=
+ rewriteIntSwitch(code, blocksIterator, block, iterator, theSwitch.asIntSwitch());
}
}
}
@@ -621,12 +675,13 @@
Set<Value> affectedValues =
needToRemoveUnreachableBlocks ? code.removeUnreachableBlocks() : ImmutableSet.of();
- if (!affectedValues.isEmpty()) {
+ boolean anyAffectedValues = !affectedValues.isEmpty();
+ if (anyAffectedValues) {
new TypeAnalysis(appView).narrowing(affectedValues);
}
code.removeRedundantBlocks();
assert code.isConsistentSSA(appView);
- return !affectedValues.isEmpty();
+ return create(anyAffectedValues, anySimplifications);
}
public void rewriteSingleKeySwitchToIf(
@@ -652,19 +707,19 @@
iterator.replaceCurrentInstruction(replacement);
}
- private void rewriteIntSwitch(
+ private boolean rewriteIntSwitch(
IRCode code,
ListIterator<BasicBlock> blockIterator,
BasicBlock block,
InstructionListIterator iterator,
IntSwitch theSwitch) {
if (disableSwitchToIfRewritingForClassIdComparisons(theSwitch)) {
- return;
+ return false;
}
if (theSwitch.numberOfKeys() == 1) {
rewriteSingleKeySwitchToIf(code, block, iterator, theSwitch);
- return;
+ return true;
}
// If there are more than 1 key, we use the following algorithm to find keys to combine.
@@ -753,7 +808,9 @@
if (newSwitchesSize + outliersAsIfSize + codeUnitMargin() < currentSize) {
convertSwitchToSwitchAndIfs(
code, blockIterator, block, iterator, theSwitch, newSwitchSequences, outliers);
+ return true;
}
+ return false;
}
// TODO(b/181732463): We currently disable switch-to-if rewritings for switches on $r8$classId
diff --git a/src/main/java/com/android/tools/r8/ir/conversion/passes/CodeRewriterPass.java b/src/main/java/com/android/tools/r8/ir/conversion/passes/CodeRewriterPass.java
index aba955c..5f1705f 100644
--- a/src/main/java/com/android/tools/r8/ir/conversion/passes/CodeRewriterPass.java
+++ b/src/main/java/com/android/tools/r8/ir/conversion/passes/CodeRewriterPass.java
@@ -9,6 +9,7 @@
import com.android.tools.r8.graph.AppInfo;
import com.android.tools.r8.graph.AppView;
import com.android.tools.r8.graph.DexItemFactory;
+import com.android.tools.r8.graph.ProgramMethod;
import com.android.tools.r8.ir.code.IRCode;
import com.android.tools.r8.ir.conversion.MethodProcessor;
import com.android.tools.r8.ir.conversion.passes.result.CodeRewriterResult;
@@ -58,6 +59,10 @@
return CodeRewriterResult.NO_CHANGE;
}
+ protected boolean isDebugMode(ProgramMethod context) {
+ return options.debug || context.getOrComputeReachabilitySensitive(appView);
+ }
+
protected abstract String getTimingId();
protected CodeRewriterResult rewriteCode(IRCode code) {
diff --git a/src/main/java/com/android/tools/r8/ir/conversion/passes/KnownArrayLengthRewriter.java b/src/main/java/com/android/tools/r8/ir/conversion/passes/KnownArrayLengthRewriter.java
index 291f8b9..05c3702 100644
--- a/src/main/java/com/android/tools/r8/ir/conversion/passes/KnownArrayLengthRewriter.java
+++ b/src/main/java/com/android/tools/r8/ir/conversion/passes/KnownArrayLengthRewriter.java
@@ -34,6 +34,7 @@
@Override
protected CodeRewriterResult rewriteCode(IRCode code) {
+ boolean hasChanged = false;
InstructionListIterator iterator = code.instructionListIterator();
while (iterator.hasNext()) {
Instruction current = iterator.next();
@@ -63,22 +64,27 @@
Value size = arrayDefinition.asNewArrayEmpty().size();
arrayLength.outValue().replaceUsers(size);
iterator.removeOrReplaceByDebugLocalRead();
+ hasChanged = true;
} else if (arrayDefinition.isNewArrayFilledData()) {
long size = arrayDefinition.asNewArrayFilledData().size;
if (size > Integer.MAX_VALUE) {
continue;
}
iterator.replaceCurrentInstructionWithConstInt(code, (int) size);
+ hasChanged = true;
} else if (abstractValue.hasKnownArrayLength()) {
iterator.replaceCurrentInstructionWithConstInt(code, abstractValue.getKnownArrayLength());
+ hasChanged = true;
} else {
continue;
}
phiUsers.forEach(Phi::removeTrivialPhi);
}
- code.removeRedundantBlocks();
+ if (hasChanged) {
+ code.removeRedundantBlocks();
+ }
assert code.isConsistentSSA(appView);
- return CodeRewriterResult.NONE;
+ return CodeRewriterResult.hasChanged(hasChanged);
}
}
diff --git a/src/main/java/com/android/tools/r8/ir/conversion/passes/NaturalIntLoopRemover.java b/src/main/java/com/android/tools/r8/ir/conversion/passes/NaturalIntLoopRemover.java
index 2238b82..96b52dc 100644
--- a/src/main/java/com/android/tools/r8/ir/conversion/passes/NaturalIntLoopRemover.java
+++ b/src/main/java/com/android/tools/r8/ir/conversion/passes/NaturalIntLoopRemover.java
@@ -58,7 +58,8 @@
@Override
protected boolean shouldRewriteCode(IRCode code) {
- return appView.options().enableLoopUnrolling;
+ // This is relevant only if a loop may be present, which implies at least 4 blocks.
+ return appView.options().enableLoopUnrolling && code.getBlocks().size() >= 4;
}
private boolean isComparisonBlock(BasicBlock comparisonBlockCandidate) {
diff --git a/src/main/java/com/android/tools/r8/ir/conversion/passes/RedundantConstNumberRemover.java b/src/main/java/com/android/tools/r8/ir/conversion/passes/RedundantConstNumberRemover.java
new file mode 100644
index 0000000..70402cc
--- /dev/null
+++ b/src/main/java/com/android/tools/r8/ir/conversion/passes/RedundantConstNumberRemover.java
@@ -0,0 +1,278 @@
+// Copyright (c) 2023, 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.ir.conversion.passes;
+
+import com.android.tools.r8.graph.AppInfo;
+import com.android.tools.r8.graph.AppView;
+import com.android.tools.r8.ir.code.BasicBlock;
+import com.android.tools.r8.ir.code.ConstNumber;
+import com.android.tools.r8.ir.code.DominatorTree;
+import com.android.tools.r8.ir.code.IRCode;
+import com.android.tools.r8.ir.code.If;
+import com.android.tools.r8.ir.code.IfType;
+import com.android.tools.r8.ir.code.Instruction;
+import com.android.tools.r8.ir.code.Value;
+import com.android.tools.r8.ir.conversion.passes.result.CodeRewriterResult;
+import com.android.tools.r8.utils.LazyBox;
+import it.unimi.dsi.fastutil.longs.Long2ReferenceMap;
+import it.unimi.dsi.fastutil.longs.Long2ReferenceOpenHashMap;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.ListIterator;
+
+/**
+ * This optimization exploits that we can sometimes learn the constant value of an SSA value that
+ * flows into an if-eq of if-neq instruction.
+ *
+ * <p>Consider the following example:
+ *
+ * <pre>
+ * 1. if (obj != null) {
+ * 2. return doStuff();
+ * 3. }
+ * 4. return null;
+ * </pre>
+ *
+ * <p>Since we know that `obj` is null in all blocks that are dominated by the false-target of the
+ * if-instruction in line 1, we can safely replace the null-constant in line 4 by `obj`, and thereby
+ * save a const-number instruction.
+ */
+public class RedundantConstNumberRemover extends CodeRewriterPass<AppInfo> {
+
+ public RedundantConstNumberRemover(AppView<?> appView) {
+ super(appView);
+ }
+
+ @Override
+ protected String getTimingId() {
+ return "RedundantConstNumberRemover";
+ }
+
+ @Override
+ protected boolean shouldRewriteCode(IRCode code) {
+ return options.enableRedundantConstNumberOptimization && code.metadata().mayHaveConstNumber();
+ }
+
+ @Override
+ protected CodeRewriterResult rewriteCode(IRCode code) {
+ redundantConstNumberRemoval(code);
+ return CodeRewriterResult.NONE;
+ }
+
+ public void redundantConstNumberRemoval(IRCode code) {
+ if (appView.options().canHaveDalvikIntUsedAsNonIntPrimitiveTypeBug()
+ && !appView.options().testing.forceRedundantConstNumberRemoval) {
+ // See also b/124152497.
+ return;
+ }
+
+ LazyBox<Long2ReferenceMap<List<ConstNumber>>> constantsByValue =
+ new LazyBox<>(() -> getConstantsByValue(code));
+ LazyBox<DominatorTree> dominatorTree = new LazyBox<>(() -> new DominatorTree(code));
+
+ boolean changed = false;
+ for (BasicBlock block : code.blocks) {
+ Instruction lastInstruction = block.getInstructions().getLast();
+ if (!lastInstruction.isIf()) {
+ continue;
+ }
+
+ If ifInstruction = lastInstruction.asIf();
+ IfType type = ifInstruction.getType();
+
+ Value lhs = ifInstruction.inValues().get(0);
+ Value rhs = !ifInstruction.isZeroTest() ? ifInstruction.inValues().get(1) : null;
+
+ if (!ifInstruction.isZeroTest() && !lhs.isConstNumber() && !rhs.isConstNumber()) {
+ // We can only conclude anything from an if-instruction if it is a zero-test or if one of
+ // the two operands is a constant.
+ continue;
+ }
+
+ // If the type is neither EQ nor NE, we cannot conclude anything about any of the in-values
+ // of the if-instruction from the outcome of the if-instruction.
+ if (type != IfType.EQ && type != IfType.NE) {
+ continue;
+ }
+
+ BasicBlock trueTarget, falseTarget;
+ if (type == IfType.EQ) {
+ trueTarget = ifInstruction.getTrueTarget();
+ falseTarget = ifInstruction.fallthroughBlock();
+ } else {
+ falseTarget = ifInstruction.getTrueTarget();
+ trueTarget = ifInstruction.fallthroughBlock();
+ }
+
+ if (ifInstruction.isZeroTest()) {
+ changed |=
+ replaceDominatedConstNumbers(0, lhs, trueTarget, constantsByValue, code, dominatorTree);
+ if (lhs.knownToBeBoolean()) {
+ changed |=
+ replaceDominatedConstNumbers(
+ 1, lhs, falseTarget, constantsByValue, code, dominatorTree);
+ }
+ } else {
+ assert rhs != null;
+ if (lhs.isConstNumber()) {
+ ConstNumber lhsAsNumber = lhs.getConstInstruction().asConstNumber();
+ changed |=
+ replaceDominatedConstNumbers(
+ lhsAsNumber.getRawValue(),
+ rhs,
+ trueTarget,
+ constantsByValue,
+ code,
+ dominatorTree);
+ if (lhs.knownToBeBoolean() && rhs.knownToBeBoolean()) {
+ changed |=
+ replaceDominatedConstNumbers(
+ negateBoolean(lhsAsNumber),
+ rhs,
+ falseTarget,
+ constantsByValue,
+ code,
+ dominatorTree);
+ }
+ } else {
+ assert rhs.isConstNumber();
+ ConstNumber rhsAsNumber = rhs.getConstInstruction().asConstNumber();
+ changed |=
+ replaceDominatedConstNumbers(
+ rhsAsNumber.getRawValue(),
+ lhs,
+ trueTarget,
+ constantsByValue,
+ code,
+ dominatorTree);
+ if (lhs.knownToBeBoolean() && rhs.knownToBeBoolean()) {
+ changed |=
+ replaceDominatedConstNumbers(
+ negateBoolean(rhsAsNumber),
+ lhs,
+ falseTarget,
+ constantsByValue,
+ code,
+ dominatorTree);
+ }
+ }
+ }
+
+ if (constantsByValue.computeIfAbsent().isEmpty()) {
+ break;
+ }
+ }
+
+ if (changed) {
+ code.removeAllDeadAndTrivialPhis();
+ }
+ assert code.isConsistentSSA(appView);
+ }
+
+ private static Long2ReferenceMap<List<ConstNumber>> getConstantsByValue(IRCode code) {
+ // A map from the raw value of constants in `code` to the const number instructions that define
+ // the given raw value (irrespective of the type of the raw value).
+ Long2ReferenceMap<List<ConstNumber>> constantsByValue = new Long2ReferenceOpenHashMap<>();
+
+ // Initialize `constantsByValue`.
+ for (Instruction instruction : code.instructions()) {
+ if (instruction.isConstNumber()) {
+ ConstNumber constNumber = instruction.asConstNumber();
+ if (constNumber.outValue().hasLocalInfo()) {
+ // Not necessarily constant, because it could be changed in the debugger.
+ continue;
+ }
+ long rawValue = constNumber.getRawValue();
+ if (constantsByValue.containsKey(rawValue)) {
+ constantsByValue.get(rawValue).add(constNumber);
+ } else {
+ List<ConstNumber> list = new ArrayList<>();
+ list.add(constNumber);
+ constantsByValue.put(rawValue, list);
+ }
+ }
+ }
+ return constantsByValue;
+ }
+
+ private static int negateBoolean(ConstNumber number) {
+ assert number.outValue().knownToBeBoolean();
+ return number.getRawValue() == 0 ? 1 : 0;
+ }
+
+ private boolean replaceDominatedConstNumbers(
+ long withValue,
+ Value newValue,
+ BasicBlock dominator,
+ LazyBox<Long2ReferenceMap<List<ConstNumber>>> constantsByValueSupplier,
+ IRCode code,
+ LazyBox<DominatorTree> dominatorTree) {
+ if (newValue.hasLocalInfo()) {
+ // We cannot replace a constant with a value that has local info, because that could change
+ // debugging behavior.
+ return false;
+ }
+
+ Long2ReferenceMap<List<ConstNumber>> constantsByValue =
+ constantsByValueSupplier.computeIfAbsent();
+ List<ConstNumber> constantsWithValue = constantsByValue.get(withValue);
+ if (constantsWithValue == null || constantsWithValue.isEmpty()) {
+ return false;
+ }
+
+ boolean changed = false;
+
+ ListIterator<ConstNumber> constantWithValueIterator = constantsWithValue.listIterator();
+ while (constantWithValueIterator.hasNext()) {
+ ConstNumber constNumber = constantWithValueIterator.next();
+ Value value = constNumber.outValue();
+ assert !value.hasLocalInfo();
+ assert constNumber.getRawValue() == withValue;
+
+ BasicBlock block = constNumber.getBlock();
+
+ // If the following condition does not hold, then the if-instruction does not dominate the
+ // block containing the constant, although the true or false target does.
+ if (block == dominator && block.getPredecessors().size() != 1) {
+ // This should generally not happen, but it is possible to write bytecode where it does.
+ assert false;
+ continue;
+ }
+
+ if (value.knownToBeBoolean() && !newValue.knownToBeBoolean()) {
+ // We cannot replace a boolean by a none-boolean since that can lead to verification
+ // errors. For example, the following code fails with "register v1 has type Imprecise
+ // Constant: 127 but expected Boolean return-1nr".
+ //
+ // public boolean convertIntToBoolean(int v1) {
+ // const/4 v0, 0x1
+ // if-eq v1, v0, :eq_true
+ // const/4 v1, 0x0
+ // :eq_true
+ // return v1
+ // }
+ continue;
+ }
+
+ if (dominatorTree.computeIfAbsent().dominatedBy(block, dominator)) {
+ if (newValue.getType().lessThanOrEqual(value.getType(), appView)) {
+ value.replaceUsers(newValue);
+ block.listIterator(code, constNumber).removeOrReplaceByDebugLocalRead();
+ constantWithValueIterator.remove();
+ changed = true;
+ } else if (value.getType().isNullType()) {
+ // TODO(b/120257211): Need a mechanism to determine if `newValue` can be used at all of
+ // the use sites of `value` without introducing a type error.
+ }
+ }
+ }
+
+ if (constantsWithValue.isEmpty()) {
+ constantsByValue.remove(withValue);
+ }
+
+ return changed;
+ }
+}
diff --git a/src/main/java/com/android/tools/r8/ir/conversion/passes/SplitBranch.java b/src/main/java/com/android/tools/r8/ir/conversion/passes/SplitBranch.java
index e4bac3e..2defd76 100644
--- a/src/main/java/com/android/tools/r8/ir/conversion/passes/SplitBranch.java
+++ b/src/main/java/com/android/tools/r8/ir/conversion/passes/SplitBranch.java
@@ -40,7 +40,8 @@
@Override
protected boolean shouldRewriteCode(IRCode code) {
- return true;
+ // This is relevant only if there is a diamond followed by an if which is a minimum of 6 blocks.
+ return code.getBlocks().size() >= 6;
}
/**
diff --git a/src/main/java/com/android/tools/r8/ir/conversion/passes/SwitchCaseEliminator.java b/src/main/java/com/android/tools/r8/ir/conversion/passes/SwitchCaseEliminator.java
index cbda630..4a1a1d4 100644
--- a/src/main/java/com/android/tools/r8/ir/conversion/passes/SwitchCaseEliminator.java
+++ b/src/main/java/com/android/tools/r8/ir/conversion/passes/SwitchCaseEliminator.java
@@ -45,7 +45,7 @@
&& switchCasesToBeRemoved.size() == theSwitch.numberOfKeys();
}
- private boolean canBeOptimized() {
+ boolean canBeOptimized() {
assert switchCasesToBeRemoved == null || !switchCasesToBeRemoved.isEmpty();
return switchCasesToBeRemoved != null || hasAlwaysHitCase() || !isFallthroughLive();
}
@@ -96,7 +96,7 @@
liveFallthrough = false;
}
- boolean optimize() {
+ void optimize() {
if (canBeOptimized()) {
int originalNumberOfSuccessors = block.getSuccessors().size();
IntList removedSuccessorIndices = unlinkDeadSuccessors();
@@ -107,9 +107,7 @@
// Replace switch by a new switch where the dead switch cases have been removed.
replaceSwitchByOptimizedSwitch(originalNumberOfSuccessors, removedSuccessorIndices);
}
- return true;
}
- return false;
}
private IntList unlinkDeadSuccessors() {
diff --git a/src/main/java/com/android/tools/r8/ir/conversion/passes/ThrowCatchOptimizer.java b/src/main/java/com/android/tools/r8/ir/conversion/passes/ThrowCatchOptimizer.java
index f34a6bd..fd79613 100644
--- a/src/main/java/com/android/tools/r8/ir/conversion/passes/ThrowCatchOptimizer.java
+++ b/src/main/java/com/android/tools/r8/ir/conversion/passes/ThrowCatchOptimizer.java
@@ -5,10 +5,10 @@
package com.android.tools.r8.ir.conversion.passes;
import com.android.tools.r8.errors.Unreachable;
+import com.android.tools.r8.graph.AppInfo;
import com.android.tools.r8.graph.AppInfoWithClassHierarchy;
import com.android.tools.r8.graph.AppView;
import com.android.tools.r8.graph.DexClassAndMethod;
-import com.android.tools.r8.graph.DexItemFactory;
import com.android.tools.r8.graph.DexMethod;
import com.android.tools.r8.graph.ProgramMethod;
import com.android.tools.r8.ir.analysis.type.TypeAnalysis;
@@ -32,6 +32,7 @@
import com.android.tools.r8.ir.code.Position;
import com.android.tools.r8.ir.code.Throw;
import com.android.tools.r8.ir.code.Value;
+import com.android.tools.r8.ir.conversion.passes.result.CodeRewriterResult;
import com.android.tools.r8.ir.optimize.info.MethodOptimizationInfo;
import com.google.common.collect.ImmutableList;
import com.google.common.collect.Sets;
@@ -40,18 +41,34 @@
import java.util.ListIterator;
import java.util.Set;
-public class ThrowCatchOptimizer {
-
- private final AppView<?> appView;
- private final DexItemFactory dexItemFactory;
+public class ThrowCatchOptimizer extends CodeRewriterPass<AppInfo> {
public ThrowCatchOptimizer(AppView<?> appView) {
- this.appView = appView;
- this.dexItemFactory = appView.dexItemFactory();
+ super(appView);
+ }
+
+ @Override
+ protected String getTimingId() {
+ return "ThrowCatchOptimizer";
+ }
+
+ @Override
+ protected boolean shouldRewriteCode(IRCode code) {
+ return true;
+ }
+
+ @Override
+ protected CodeRewriterResult rewriteCode(IRCode code) {
+ optimizeAlwaysThrowingInstructions(code);
+ if (!isDebugMode(code.context())) {
+ rewriteThrowNullPointerException(code);
+ }
+ return CodeRewriterResult.NONE;
}
// Rewrite 'throw new NullPointerException()' to 'throw null'.
- public void rewriteThrowNullPointerException(IRCode code) {
+ private void rewriteThrowNullPointerException(IRCode code) {
+ boolean hasChanged = false;
boolean shouldRemoveUnreachableBlocks = false;
for (BasicBlock block : code.blocks) {
InstructionListIterator it = block.listIterator(code);
@@ -64,7 +81,7 @@
if (appView
.dexItemFactory()
.objectsMethods
- .isRequireNonNullMethod(code.method().getReference())) {
+ .isRequireNonNullMethod(code.context().getReference())) {
continue;
}
@@ -126,6 +143,7 @@
valueIsNullTarget,
throwInstruction.getPosition());
shouldRemoveUnreachableBlocks = true;
+ hasChanged = true;
}
// Check for 'new-instance NullPointerException' with 2 users, not declaring a local and
@@ -172,6 +190,7 @@
// Replace them with 'const 0' and 'throw'.
it.add(nullPointer);
it.add(throwInstruction);
+ hasChanged = true;
}
}
}
@@ -186,13 +205,16 @@
new TypeAnalysis(appView).narrowing(affectedValues);
}
}
+ if (hasChanged) {
+ code.removeRedundantBlocks();
+ }
assert code.isConsistentSSA(appView);
}
// Find all instructions that always throw, split the block after each such instruction and follow
// it with a block throwing a null value (which should result in NPE). Note that this throw is not
// expected to be ever reached, but is intended to satisfy verifier.
- public void optimizeAlwaysThrowingInstructions(IRCode code) {
+ private void optimizeAlwaysThrowingInstructions(IRCode code) {
Set<Value> affectedValues = Sets.newIdentityHashSet();
Set<BasicBlock> blocksToRemove = Sets.newIdentityHashSet();
ListIterator<BasicBlock> blockIterator = code.listIterator();
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 77104d5..a2654cf 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
@@ -8,7 +8,6 @@
import com.android.tools.r8.contexts.CompilationContext.MethodProcessingContext;
import com.android.tools.r8.graph.AccessControl;
-import com.android.tools.r8.graph.AppInfo;
import com.android.tools.r8.graph.AppView;
import com.android.tools.r8.graph.DexClass;
import com.android.tools.r8.graph.DexProgramClass;
@@ -36,7 +35,7 @@
import com.google.common.collect.Sets;
import java.util.Set;
-public class TrivialCheckCastAndInstanceOfRemover extends CodeRewriterPass<AppInfo> {
+public class TrivialCheckCastAndInstanceOfRemover extends CodeRewriterPass<AppInfoWithLiveness> {
public TrivialCheckCastAndInstanceOfRemover(AppView<?> appView) {
super(appView);
@@ -61,6 +60,7 @@
MethodProcessingContext methodProcessingContext) {
assert appView.appInfo().hasLiveness();
AppView<AppInfoWithLiveness> appViewWithLiveness = appView.withLiveness();
+ boolean hasChanged = false;
// If we can remove a CheckCast it is due to us having at least as much information about the
// type as the CheckCast gives. We then need to propagate that information to the users of
@@ -99,6 +99,7 @@
methodProcessingContext);
if (removeResult != RemoveCheckCastInstructionIfTrivialResult.NO_REMOVALS) {
assert removeResult == RemoveCheckCastInstructionIfTrivialResult.REMOVED_CAST_DO_NARROW;
+ hasChanged = true;
needToRemoveTrivialPhis |= hasPhiUsers;
typeAnalysis.narrowing(affectedValues);
affectedValues.clear();
@@ -107,6 +108,7 @@
boolean hasPhiUsers = current.outValue().hasPhiUsers();
if (removeInstanceOfInstructionIfTrivial(
appViewWithLiveness, current.asInstanceOf(), it, code)) {
+ hasChanged = true;
needToRemoveTrivialPhis |= hasPhiUsers;
}
}
@@ -123,9 +125,11 @@
typeAnalysis.narrowing(affectedValues);
}
}
- code.removeRedundantBlocks();
+ if (hasChanged) {
+ code.removeRedundantBlocks();
+ }
assert code.isConsistentSSA(appView);
- return CodeRewriterResult.NONE;
+ return CodeRewriterResult.hasChanged(hasChanged);
}
enum RemoveCheckCastInstructionIfTrivialResult {
diff --git a/src/main/java/com/android/tools/r8/ir/conversion/passes/result/CodeRewriterResult.java b/src/main/java/com/android/tools/r8/ir/conversion/passes/result/CodeRewriterResult.java
index 68d5c0d..1af288a 100644
--- a/src/main/java/com/android/tools/r8/ir/conversion/passes/result/CodeRewriterResult.java
+++ b/src/main/java/com/android/tools/r8/ir/conversion/passes/result/CodeRewriterResult.java
@@ -5,6 +5,7 @@
package com.android.tools.r8.ir.conversion.passes.result;
import com.android.tools.r8.errors.Unreachable;
+import com.android.tools.r8.ir.conversion.passes.BranchSimplifier.ControlFlowSimplificationResult;
public interface CodeRewriterResult {
@@ -37,4 +38,8 @@
}
boolean hasChanged();
+
+ default ControlFlowSimplificationResult asControlFlowSimplificationResult() {
+ throw new Unreachable("Not a control flow simplification result.");
+ }
}
diff --git a/src/main/java/com/android/tools/r8/ir/desugar/CovariantReturnTypeAnnotationTransformer.java b/src/main/java/com/android/tools/r8/ir/desugar/CovariantReturnTypeAnnotationTransformer.java
index 8ac1b02..3fbcfee 100644
--- a/src/main/java/com/android/tools/r8/ir/desugar/CovariantReturnTypeAnnotationTransformer.java
+++ b/src/main/java/com/android/tools/r8/ir/desugar/CovariantReturnTypeAnnotationTransformer.java
@@ -24,6 +24,7 @@
import com.android.tools.r8.graph.MethodAccessFlags;
import com.android.tools.r8.graph.ProgramMethod;
import com.android.tools.r8.ir.conversion.IRConverter;
+import com.android.tools.r8.ir.conversion.MethodConversionOptions;
import com.android.tools.r8.ir.conversion.MethodProcessorEventConsumer;
import com.android.tools.r8.ir.synthetic.ForwardMethodBuilder;
import com.google.common.base.Predicates;
@@ -198,7 +199,10 @@
.build();
// Optimize to generate DexCode instead of CfCode.
ProgramMethod programMethod = new ProgramMethod(methodHolder, newVirtualMethod);
- converter.optimizeSynthesizedMethod(programMethod, methodProcessorEventConsumer);
+ converter.optimizeSynthesizedMethod(
+ programMethod,
+ methodProcessorEventConsumer,
+ MethodConversionOptions.forD8(converter.appView));
eventConsumer.acceptCovariantReturnTypeBridgeMethod(programMethod, method);
return newVirtualMethod;
}
diff --git a/src/main/java/com/android/tools/r8/ir/desugar/records/RecordFieldValuesRewriter.java b/src/main/java/com/android/tools/r8/ir/desugar/records/RecordFieldValuesRewriter.java
index 6646ce0..bd8b0fc 100644
--- a/src/main/java/com/android/tools/r8/ir/desugar/records/RecordFieldValuesRewriter.java
+++ b/src/main/java/com/android/tools/r8/ir/desugar/records/RecordFieldValuesRewriter.java
@@ -21,6 +21,7 @@
import com.android.tools.r8.ir.code.RecordFieldValues;
import com.android.tools.r8.ir.code.Value;
import com.android.tools.r8.ir.conversion.IRConverter;
+import com.android.tools.r8.ir.conversion.MethodConversionOptions;
import com.android.tools.r8.ir.optimize.info.OptimizationFeedbackIgnore;
import com.android.tools.r8.shaking.AppInfoWithLiveness;
import com.android.tools.r8.utils.Timing;
@@ -67,7 +68,11 @@
programMethod
.getDefinition()
.getCode()
- .buildIR(programMethod, appView, programMethod.getOrigin());
+ .buildIR(
+ programMethod,
+ appView,
+ programMethod.getOrigin(),
+ MethodConversionOptions.forPostLirPhase(appView));
boolean done = false;
ListIterator<BasicBlock> blockIterator = irCode.listIterator();
while (blockIterator.hasNext()) {
@@ -85,7 +90,6 @@
assert done;
irConverter.removeDeadCodeAndFinalizeIR(
irCode, OptimizationFeedbackIgnore.getInstance(), Timing.empty());
- irConverter.finalizeLirMethodToOutputFormat(programMethod);
}
public void rewriteRecordFieldArray(
diff --git a/src/main/java/com/android/tools/r8/ir/optimize/CodeRewriter.java b/src/main/java/com/android/tools/r8/ir/optimize/CodeRewriter.java
index e696879..19f053f 100644
--- a/src/main/java/com/android/tools/r8/ir/optimize/CodeRewriter.java
+++ b/src/main/java/com/android/tools/r8/ir/optimize/CodeRewriter.java
@@ -21,11 +21,9 @@
import com.android.tools.r8.ir.analysis.type.TypeElement;
import com.android.tools.r8.ir.code.Assume;
import com.android.tools.r8.ir.code.BasicBlock;
-import com.android.tools.r8.ir.code.ConstNumber;
import com.android.tools.r8.ir.code.ConstString;
import com.android.tools.r8.ir.code.DebugLocalWrite;
import com.android.tools.r8.ir.code.DebugLocalsChange;
-import com.android.tools.r8.ir.code.DominatorTree;
import com.android.tools.r8.ir.code.IRCode;
import com.android.tools.r8.ir.code.If;
import com.android.tools.r8.ir.code.IfType;
@@ -40,7 +38,6 @@
import com.android.tools.r8.ir.code.StaticGet;
import com.android.tools.r8.ir.code.Value;
import com.android.tools.r8.ir.regalloc.LinearScanRegisterAllocator;
-import com.android.tools.r8.utils.LazyBox;
import com.google.common.collect.ImmutableList;
import com.google.common.collect.Sets;
import com.google.common.collect.Streams;
@@ -51,11 +48,7 @@
import it.unimi.dsi.fastutil.ints.Int2ReferenceOpenHashMap;
import it.unimi.dsi.fastutil.ints.IntOpenHashSet;
import it.unimi.dsi.fastutil.ints.IntSet;
-import it.unimi.dsi.fastutil.longs.Long2ReferenceMap;
-import it.unimi.dsi.fastutil.longs.Long2ReferenceOpenHashMap;
-import java.util.ArrayList;
import java.util.List;
-import java.util.ListIterator;
import java.util.Set;
public class CodeRewriter {
@@ -210,242 +203,6 @@
}
/**
- * This optimization exploits that we can sometimes learn the constant value of an SSA value that
- * flows into an if-eq of if-neq instruction.
- *
- * <p>Consider the following example:
- *
- * <pre>
- * 1. if (obj != null) {
- * 2. return doStuff();
- * 3. }
- * 4. return null;
- * </pre>
- *
- * <p>Since we know that `obj` is null in all blocks that are dominated by the false-target of the
- * if-instruction in line 1, we can safely replace the null-constant in line 4 by `obj`, and
- * thereby save a const-number instruction.
- */
- public void redundantConstNumberRemoval(IRCode code) {
- if (appView.options().canHaveDalvikIntUsedAsNonIntPrimitiveTypeBug()
- && !appView.options().testing.forceRedundantConstNumberRemoval) {
- // See also b/124152497.
- return;
- }
-
- if (!code.metadata().mayHaveConstNumber()) {
- return;
- }
-
- LazyBox<Long2ReferenceMap<List<ConstNumber>>> constantsByValue =
- new LazyBox<>(() -> getConstantsByValue(code));
- LazyBox<DominatorTree> dominatorTree = new LazyBox<>(() -> new DominatorTree(code));
-
- boolean changed = false;
- for (BasicBlock block : code.blocks) {
- Instruction lastInstruction = block.getInstructions().getLast();
- if (!lastInstruction.isIf()) {
- continue;
- }
-
- If ifInstruction = lastInstruction.asIf();
- IfType type = ifInstruction.getType();
-
- Value lhs = ifInstruction.inValues().get(0);
- Value rhs = !ifInstruction.isZeroTest() ? ifInstruction.inValues().get(1) : null;
-
- if (!ifInstruction.isZeroTest() && !lhs.isConstNumber() && !rhs.isConstNumber()) {
- // We can only conclude anything from an if-instruction if it is a zero-test or if one of
- // the two operands is a constant.
- continue;
- }
-
- // If the type is neither EQ nor NE, we cannot conclude anything about any of the in-values
- // of the if-instruction from the outcome of the if-instruction.
- if (type != IfType.EQ && type != IfType.NE) {
- continue;
- }
-
- BasicBlock trueTarget, falseTarget;
- if (type == IfType.EQ) {
- trueTarget = ifInstruction.getTrueTarget();
- falseTarget = ifInstruction.fallthroughBlock();
- } else {
- falseTarget = ifInstruction.getTrueTarget();
- trueTarget = ifInstruction.fallthroughBlock();
- }
-
- if (ifInstruction.isZeroTest()) {
- changed |=
- replaceDominatedConstNumbers(0, lhs, trueTarget, constantsByValue, code, dominatorTree);
- if (lhs.knownToBeBoolean()) {
- changed |=
- replaceDominatedConstNumbers(
- 1, lhs, falseTarget, constantsByValue, code, dominatorTree);
- }
- } else {
- assert rhs != null;
- if (lhs.isConstNumber()) {
- ConstNumber lhsAsNumber = lhs.getConstInstruction().asConstNumber();
- changed |=
- replaceDominatedConstNumbers(
- lhsAsNumber.getRawValue(),
- rhs,
- trueTarget,
- constantsByValue,
- code,
- dominatorTree);
- if (lhs.knownToBeBoolean() && rhs.knownToBeBoolean()) {
- changed |=
- replaceDominatedConstNumbers(
- negateBoolean(lhsAsNumber),
- rhs,
- falseTarget,
- constantsByValue,
- code,
- dominatorTree);
- }
- } else {
- assert rhs.isConstNumber();
- ConstNumber rhsAsNumber = rhs.getConstInstruction().asConstNumber();
- changed |=
- replaceDominatedConstNumbers(
- rhsAsNumber.getRawValue(),
- lhs,
- trueTarget,
- constantsByValue,
- code,
- dominatorTree);
- if (lhs.knownToBeBoolean() && rhs.knownToBeBoolean()) {
- changed |=
- replaceDominatedConstNumbers(
- negateBoolean(rhsAsNumber),
- lhs,
- falseTarget,
- constantsByValue,
- code,
- dominatorTree);
- }
- }
- }
-
- if (constantsByValue.computeIfAbsent().isEmpty()) {
- break;
- }
- }
-
- if (changed) {
- code.removeAllDeadAndTrivialPhis();
- }
- assert code.isConsistentSSA(appView);
- }
-
- private static Long2ReferenceMap<List<ConstNumber>> getConstantsByValue(IRCode code) {
- // A map from the raw value of constants in `code` to the const number instructions that define
- // the given raw value (irrespective of the type of the raw value).
- Long2ReferenceMap<List<ConstNumber>> constantsByValue = new Long2ReferenceOpenHashMap<>();
-
- // Initialize `constantsByValue`.
- for (Instruction instruction : code.instructions()) {
- if (instruction.isConstNumber()) {
- ConstNumber constNumber = instruction.asConstNumber();
- if (constNumber.outValue().hasLocalInfo()) {
- // Not necessarily constant, because it could be changed in the debugger.
- continue;
- }
- long rawValue = constNumber.getRawValue();
- if (constantsByValue.containsKey(rawValue)) {
- constantsByValue.get(rawValue).add(constNumber);
- } else {
- List<ConstNumber> list = new ArrayList<>();
- list.add(constNumber);
- constantsByValue.put(rawValue, list);
- }
- }
- }
- return constantsByValue;
- }
-
- private static int negateBoolean(ConstNumber number) {
- assert number.outValue().knownToBeBoolean();
- return number.getRawValue() == 0 ? 1 : 0;
- }
-
- private boolean replaceDominatedConstNumbers(
- long withValue,
- Value newValue,
- BasicBlock dominator,
- LazyBox<Long2ReferenceMap<List<ConstNumber>>> constantsByValueSupplier,
- IRCode code,
- LazyBox<DominatorTree> dominatorTree) {
- if (newValue.hasLocalInfo()) {
- // We cannot replace a constant with a value that has local info, because that could change
- // debugging behavior.
- return false;
- }
-
- Long2ReferenceMap<List<ConstNumber>> constantsByValue =
- constantsByValueSupplier.computeIfAbsent();
- List<ConstNumber> constantsWithValue = constantsByValue.get(withValue);
- if (constantsWithValue == null || constantsWithValue.isEmpty()) {
- return false;
- }
-
- boolean changed = false;
-
- ListIterator<ConstNumber> constantWithValueIterator = constantsWithValue.listIterator();
- while (constantWithValueIterator.hasNext()) {
- ConstNumber constNumber = constantWithValueIterator.next();
- Value value = constNumber.outValue();
- assert !value.hasLocalInfo();
- assert constNumber.getRawValue() == withValue;
-
- BasicBlock block = constNumber.getBlock();
-
- // If the following condition does not hold, then the if-instruction does not dominate the
- // block containing the constant, although the true or false target does.
- if (block == dominator && block.getPredecessors().size() != 1) {
- // This should generally not happen, but it is possible to write bytecode where it does.
- assert false;
- continue;
- }
-
- if (value.knownToBeBoolean() && !newValue.knownToBeBoolean()) {
- // We cannot replace a boolean by a none-boolean since that can lead to verification
- // errors. For example, the following code fails with "register v1 has type Imprecise
- // Constant: 127 but expected Boolean return-1nr".
- //
- // public boolean convertIntToBoolean(int v1) {
- // const/4 v0, 0x1
- // if-eq v1, v0, :eq_true
- // const/4 v1, 0x0
- // :eq_true
- // return v1
- // }
- continue;
- }
-
- if (dominatorTree.computeIfAbsent().dominatedBy(block, dominator)) {
- if (newValue.getType().lessThanOrEqual(value.getType(), appView)) {
- value.replaceUsers(newValue);
- block.listIterator(code, constNumber).removeOrReplaceByDebugLocalRead();
- constantWithValueIterator.remove();
- changed = true;
- } else if (value.getType().isNullType()) {
- // TODO(b/120257211): Need a mechanism to determine if `newValue` can be used at all of
- // the use sites of `value` without introducing a type error.
- }
- }
- }
-
- if (constantsWithValue.isEmpty()) {
- constantsByValue.remove(withValue);
- }
-
- return changed;
- }
-
- /**
* Remove moves that are not actually used by instructions in exiting paths. These moves can arise
* due to debug local info needing a particular value and the live-interval for it then moves it
* back into the properly assigned register. If the register is only used for debug purposes, it
diff --git a/src/main/java/com/android/tools/r8/ir/optimize/DeadCodeRemover.java b/src/main/java/com/android/tools/r8/ir/optimize/DeadCodeRemover.java
index e9b180c..b41131a 100644
--- a/src/main/java/com/android/tools/r8/ir/optimize/DeadCodeRemover.java
+++ b/src/main/java/com/android/tools/r8/ir/optimize/DeadCodeRemover.java
@@ -60,11 +60,15 @@
removeDeadInstructions(worklist, code, block, valueIsDeadAnalysis);
removeDeadPhis(worklist, block, valueIsDeadAnalysis);
}
- } while (branchSimplifier.simplifyIf(code).anySimplifications()
+ } while (branchSimplifier
+ .simplifyIf(code)
+ .asControlFlowSimplificationResult()
+ .anySimplifications()
|| removeUnneededCatchHandlers(code));
code.removeRedundantBlocks();
assert code.isConsistentSSA(appView);
+ assert verifyNoDeadCode(code);
timing.end();
}
@@ -140,6 +144,7 @@
CheckCast checkCast = current.asCheckCast();
if (!checkCast.isRefiningStaticType(appView.options())
&& checkCast.outValue().getLocalInfo() == checkCast.object().getLocalInfo()) {
+ updateWorklistWithNonDebugUses(worklist, checkCast);
checkCast.outValue().replaceUsers(checkCast.object());
checkCast.object().uniquePhiUsers().forEach(Phi::removeTrivialPhi);
}
@@ -196,6 +201,16 @@
}
}
+ private static void updateWorklistWithNonDebugUses(
+ Queue<BasicBlock> worklist, CheckCast checkCast) {
+ for (Instruction user : checkCast.outValue().uniqueUsers()) {
+ worklist.add(user.getBlock());
+ }
+ for (Phi user : checkCast.outValue().uniquePhiUsers()) {
+ worklist.add(user.getBlock());
+ }
+ }
+
private boolean removeUnneededCatchHandlers(IRCode code) {
boolean mayHaveIntroducedUnreachableBlocks = false;
for (BasicBlock block : code.blocks) {
diff --git a/src/main/java/com/android/tools/r8/ir/optimize/RedundantFieldLoadAndStoreElimination.java b/src/main/java/com/android/tools/r8/ir/optimize/RedundantFieldLoadAndStoreElimination.java
index 1ea3e94..5b45fd5 100644
--- a/src/main/java/com/android/tools/r8/ir/optimize/RedundantFieldLoadAndStoreElimination.java
+++ b/src/main/java/com/android/tools/r8/ir/optimize/RedundantFieldLoadAndStoreElimination.java
@@ -8,6 +8,7 @@
import static com.android.tools.r8.utils.PredicateUtils.not;
import com.android.tools.r8.errors.Unreachable;
+import com.android.tools.r8.graph.AppInfo;
import com.android.tools.r8.graph.AppView;
import com.android.tools.r8.graph.DexClassAndField;
import com.android.tools.r8.graph.DexClassAndMethod;
@@ -41,6 +42,8 @@
import com.android.tools.r8.ir.code.StaticGet;
import com.android.tools.r8.ir.code.StaticPut;
import com.android.tools.r8.ir.code.Value;
+import com.android.tools.r8.ir.conversion.passes.CodeRewriterPass;
+import com.android.tools.r8.ir.conversion.passes.result.CodeRewriterResult;
import com.android.tools.r8.ir.optimize.info.field.InstanceFieldInitializationInfoCollection;
import com.android.tools.r8.ir.optimize.info.initializer.InstanceInitializerInfo;
import com.android.tools.r8.shaking.AppInfoWithLiveness;
@@ -63,12 +66,11 @@
* <p>Simple algorithm that goes through all blocks in one pass in topological order and propagates
* active field sets across control-flow edges where the target has only one predecessor.
*/
-public class RedundantFieldLoadAndStoreElimination {
+public class RedundantFieldLoadAndStoreElimination extends CodeRewriterPass<AppInfo> {
private static final int MAX_CAPACITY = 10000;
private static final int MIN_CAPACITY_PER_BLOCK = 50;
- private final AppView<?> appView;
private final ProgramMethod method;
private final IRCode code;
private final int maxCapacityPerBlock;
@@ -87,20 +89,32 @@
private final Map<BasicBlock, Set<Instruction>> instructionsToRemove = new IdentityHashMap<>();
public RedundantFieldLoadAndStoreElimination(AppView<?> appView, IRCode code) {
- this.appView = appView;
+ super(appView);
this.method = code.context();
this.code = code;
this.maxCapacityPerBlock = Math.max(MIN_CAPACITY_PER_BLOCK, MAX_CAPACITY / code.blocks.size());
this.release = !appView.options().debug;
}
- public static boolean shouldRun(AppView<?> appView, IRCode code) {
+ @Override
+ protected String getTimingId() {
+ return "RedundantFieldLoadAndStoreElimination";
+ }
+
+ @Override
+ protected boolean shouldRewriteCode(IRCode code) {
return appView.options().enableRedundantFieldLoadElimination
&& (code.metadata().mayHaveArrayGet()
|| code.metadata().mayHaveFieldInstruction()
|| code.metadata().mayHaveInitClass());
}
+ @Override
+ protected CodeRewriterResult rewriteCode(IRCode code) {
+ run();
+ return CodeRewriterResult.NONE;
+ }
+
private interface FieldValue {
default ExistingValue asExistingValue() {
diff --git a/src/main/java/com/android/tools/r8/ir/optimize/RuntimeWorkaroundCodeRewriter.java b/src/main/java/com/android/tools/r8/ir/optimize/RuntimeWorkaroundCodeRewriter.java
index 02e3b25..9ae8565 100644
--- a/src/main/java/com/android/tools/r8/ir/optimize/RuntimeWorkaroundCodeRewriter.java
+++ b/src/main/java/com/android/tools/r8/ir/optimize/RuntimeWorkaroundCodeRewriter.java
@@ -16,6 +16,7 @@
import com.android.tools.r8.ir.code.AlwaysMaterializingUser;
import com.android.tools.r8.ir.code.BasicBlock;
import com.android.tools.r8.ir.code.IRCode;
+import com.android.tools.r8.ir.code.InstanceOf;
import com.android.tools.r8.ir.code.Instruction;
import com.android.tools.r8.ir.code.InstructionListIterator;
import com.android.tools.r8.ir.code.IntSwitch;
@@ -70,6 +71,23 @@
}
}
+ public static boolean workaroundInstanceOfTypeWeakeningInVerifier(
+ AppView<?> appView, IRCode code) {
+ boolean didReplaceInstructions = false;
+ for (BasicBlock block : code.getBlocks()) {
+ InstructionListIterator instructionIterator = block.listIterator(code);
+ while (instructionIterator.hasNext()) {
+ InstanceOf instanceOf = instructionIterator.nextUntil(Instruction::isInstanceOf);
+ if (instanceOf != null && instanceOf.value().getType().isNullType()) {
+ instructionIterator.replaceCurrentInstructionWithConstFalse(code);
+ didReplaceInstructions = true;
+ }
+ }
+ }
+ assert code.isConsistentSSA(appView);
+ return didReplaceInstructions;
+ }
+
public static void workaroundSwitchMaxIntBug(IRCode code, AppView<?> appView) {
if (appView.options().canHaveSwitchMaxIntBug() && code.metadata().mayHaveSwitch()) {
// Always rewrite for workaround switch bug.
diff --git a/src/main/java/com/android/tools/r8/ir/optimize/SwitchMapCollector.java b/src/main/java/com/android/tools/r8/ir/optimize/SwitchMapCollector.java
index a40fca9..cdb30da 100644
--- a/src/main/java/com/android/tools/r8/ir/optimize/SwitchMapCollector.java
+++ b/src/main/java/com/android/tools/r8/ir/optimize/SwitchMapCollector.java
@@ -15,6 +15,7 @@
import com.android.tools.r8.ir.code.Instruction;
import com.android.tools.r8.ir.code.InvokeVirtual;
import com.android.tools.r8.ir.code.Value;
+import com.android.tools.r8.ir.conversion.MethodConversionOptions;
import com.android.tools.r8.shaking.AppInfoWithLiveness;
import it.unimi.dsi.fastutil.ints.Int2ReferenceArrayMap;
import it.unimi.dsi.fastutil.ints.Int2ReferenceMap;
@@ -94,7 +95,10 @@
List<DexEncodedField> switchMapFields = clazz.staticFields().stream()
.filter(this::maybeIsSwitchMap).collect(Collectors.toList());
if (!switchMapFields.isEmpty()) {
- IRCode initializer = clazz.getProgramClassInitializer().buildIR(appView);
+ IRCode initializer =
+ clazz
+ .getProgramClassInitializer()
+ .buildIR(appView, MethodConversionOptions.nonConverting());
switchMapFields.forEach(field -> extractSwitchMap(field, initializer));
}
}
diff --git a/src/main/java/com/android/tools/r8/ir/optimize/classinliner/ClassInliner.java b/src/main/java/com/android/tools/r8/ir/optimize/classinliner/ClassInliner.java
index d3d2a08..19b2d81 100644
--- a/src/main/java/com/android/tools/r8/ir/optimize/classinliner/ClassInliner.java
+++ b/src/main/java/com/android/tools/r8/ir/optimize/classinliner/ClassInliner.java
@@ -25,7 +25,6 @@
import com.android.tools.r8.ir.optimize.Inliner;
import com.android.tools.r8.ir.optimize.InliningOracle;
import com.android.tools.r8.ir.optimize.classinliner.InlineCandidateProcessor.IllegalClassInlinerStateException;
-import com.android.tools.r8.ir.optimize.enums.EnumValueOptimizer;
import com.android.tools.r8.ir.optimize.info.OptimizationFeedback;
import com.android.tools.r8.ir.optimize.inliner.InliningIRProvider;
import com.android.tools.r8.ir.optimize.string.StringOptimizer;
@@ -129,7 +128,6 @@
public final void processMethodCode(
AppView<AppInfoWithLiveness> appView,
StringOptimizer stringOptimizer,
- EnumValueOptimizer enumValueOptimizer,
ProgramMethod method,
IRCode code,
OptimizationFeedback feedback,
@@ -242,7 +240,7 @@
appView.withGeneratedMessageLiteBuilderShrinker(
shrinker ->
shrinker.inlineCallsToDynamicMethod(
- method, code, enumValueOptimizer, feedback, methodProcessor, inliner));
+ method, code, feedback, methodProcessor, inliner));
}
if (anyInlinedMethods) {
@@ -252,7 +250,7 @@
new TrivialCheckCastAndInstanceOfRemover(appView)
.run(code, methodProcessor, methodProcessingContext, Timing.empty());
// If a method was inlined we may be able to prune additional branches.
- new BranchSimplifier(appView).simplifyBranches(code);
+ new BranchSimplifier(appView).run(code, Timing.empty());
// If a method was inlined we may see more trivial computation/conversion of String.
boolean isDebugMode =
appView.options().debug || method.getOrComputeReachabilitySensitive(appView);
diff --git a/src/main/java/com/android/tools/r8/ir/optimize/enums/EnumUnboxerImpl.java b/src/main/java/com/android/tools/r8/ir/optimize/enums/EnumUnboxerImpl.java
index 115ab23..7f34299 100644
--- a/src/main/java/com/android/tools/r8/ir/optimize/enums/EnumUnboxerImpl.java
+++ b/src/main/java/com/android/tools/r8/ir/optimize/enums/EnumUnboxerImpl.java
@@ -319,9 +319,12 @@
enumUnboxingCandidatesInfo.addMethodDependency(eligibleEnum, code.context());
}
}
- if (methodsDependingOnLibraryModelisation.contains(code.context(), appView.graphLens())) {
- code.mutateConversionOptions(
- conversionOptions -> conversionOptions.disablePeepholeOptimizations(methodProcessor));
+ // TODO(b/225838009): Remove this when always using LIR.
+ if (!appView.testing().canUseLir(appView)) {
+ if (methodsDependingOnLibraryModelisation.contains(code.context(), appView.graphLens())) {
+ code.mutateConversionOptions(
+ conversionOptions -> conversionOptions.disablePeepholeOptimizations(methodProcessor));
+ }
}
}
diff --git a/src/main/java/com/android/tools/r8/ir/optimize/enums/EnumUnboxingRewriter.java b/src/main/java/com/android/tools/r8/ir/optimize/enums/EnumUnboxingRewriter.java
index fa88164..867c2dc 100644
--- a/src/main/java/com/android/tools/r8/ir/optimize/enums/EnumUnboxingRewriter.java
+++ b/src/main/java/com/android/tools/r8/ir/optimize/enums/EnumUnboxingRewriter.java
@@ -387,11 +387,15 @@
Value rewrittenOutValue =
code.createValue(
TypeElement.fromDexType(fieldMethod.getReturnType(), maybeNull(), appView));
+ Value in = instanceGet.object();
+ if (in.getType().isNullType()) {
+ iterator.previous();
+ in = iterator.insertConstIntInstruction(code, options, 0);
+ iterator.next();
+ }
InvokeStatic invoke =
new InvokeStatic(
- fieldMethod.getReference(),
- rewrittenOutValue,
- ImmutableList.of(instanceGet.object()));
+ fieldMethod.getReference(), rewrittenOutValue, ImmutableList.of(in));
iterator.replaceCurrentInstruction(invoke);
if (unboxedEnumsData.isUnboxedEnum(instanceGet.getField().type)) {
convertedEnums.put(invoke, instanceGet.getField().type);
@@ -529,6 +533,8 @@
if (invokedMethod == factory.javaLangSystemMembers.arraycopy) {
// Intentionally empty.
} else if (invokedMethod == factory.javaLangSystemMembers.identityHashCode) {
+ // Note that System.identityHashCode(null) == 0, so it works even if the input is null
+ // and not rewritten.
assert invoke.arguments().size() == 1;
Value argument = invoke.getFirstArgument();
DexType enumType = getEnumClassTypeOrNull(argument, convertedEnums);
diff --git a/src/main/java/com/android/tools/r8/ir/optimize/enums/EnumUnboxingTreeFixer.java b/src/main/java/com/android/tools/r8/ir/optimize/enums/EnumUnboxingTreeFixer.java
index eaa1d40..a0d4d36 100644
--- a/src/main/java/com/android/tools/r8/ir/optimize/enums/EnumUnboxingTreeFixer.java
+++ b/src/main/java/com/android/tools/r8/ir/optimize/enums/EnumUnboxingTreeFixer.java
@@ -50,6 +50,7 @@
import com.android.tools.r8.ir.conversion.ExtraParameter;
import com.android.tools.r8.ir.conversion.ExtraUnusedNullParameter;
import com.android.tools.r8.ir.conversion.IRConverter;
+import com.android.tools.r8.ir.conversion.MethodConversionOptions;
import com.android.tools.r8.ir.conversion.MethodProcessorEventConsumer;
import com.android.tools.r8.ir.conversion.OneTimeMethodProcessor;
import com.android.tools.r8.ir.optimize.enums.EnumDataMap.EnumData;
@@ -283,7 +284,11 @@
methodProcessor.forEachWaveWithExtension(
(method, methodProcessingContext) ->
converter.processDesugaredMethod(
- method, OptimizationFeedback.getSimple(), methodProcessor, methodProcessingContext),
+ method,
+ OptimizationFeedback.getSimple(),
+ methodProcessor,
+ methodProcessingContext,
+ MethodConversionOptions.forLirPhase(appView)),
executorService);
return checkNotNullToCheckNotZeroMapping;
diff --git a/src/main/java/com/android/tools/r8/ir/optimize/enums/EnumUnboxingUtilityClasses.java b/src/main/java/com/android/tools/r8/ir/optimize/enums/EnumUnboxingUtilityClasses.java
index fc83f40..fe3de2f 100644
--- a/src/main/java/com/android/tools/r8/ir/optimize/enums/EnumUnboxingUtilityClasses.java
+++ b/src/main/java/com/android/tools/r8/ir/optimize/enums/EnumUnboxingUtilityClasses.java
@@ -9,6 +9,7 @@
import com.android.tools.r8.graph.DexProgramClass;
import com.android.tools.r8.graph.DexType;
import com.android.tools.r8.ir.conversion.IRConverter;
+import com.android.tools.r8.ir.conversion.MethodConversionOptions;
import com.android.tools.r8.ir.conversion.MethodProcessorEventConsumer;
import com.android.tools.r8.ir.conversion.OneTimeMethodProcessor;
import com.android.tools.r8.ir.optimize.enums.EnumDataMap.EnumData;
@@ -111,7 +112,8 @@
method,
OptimizationFeedbackSimple.getInstance(),
methodProcessor,
- methodProcessingContext),
+ methodProcessingContext,
+ MethodConversionOptions.forLirPhase(appView)),
executorService);
return utilityClasses;
}
diff --git a/src/main/java/com/android/tools/r8/ir/optimize/enums/EnumValueOptimizer.java b/src/main/java/com/android/tools/r8/ir/optimize/enums/EnumValueOptimizer.java
index 46ed560..c88b48d 100644
--- a/src/main/java/com/android/tools/r8/ir/optimize/enums/EnumValueOptimizer.java
+++ b/src/main/java/com/android/tools/r8/ir/optimize/enums/EnumValueOptimizer.java
@@ -25,7 +25,6 @@
import com.android.tools.r8.ir.code.ConstNumber;
import com.android.tools.r8.ir.code.ConstString;
import com.android.tools.r8.ir.code.IRCode;
-import com.android.tools.r8.ir.code.IRMetadata;
import com.android.tools.r8.ir.code.Instruction;
import com.android.tools.r8.ir.code.InstructionListIterator;
import com.android.tools.r8.ir.code.IntSwitch;
@@ -51,7 +50,7 @@
public class EnumValueOptimizer extends CodeRewriterPass<AppInfoWithLiveness> {
- public EnumValueOptimizer(AppView<AppInfoWithLiveness> appView) {
+ public EnumValueOptimizer(AppView<?> appView) {
super(appView);
}
@@ -62,22 +61,8 @@
@Override
protected CodeRewriterResult rewriteCode(IRCode code) {
- rewriteConstantEnumMethodCalls(code);
- return CodeRewriterResult.NONE;
- }
-
- @Override
- protected boolean shouldRewriteCode(IRCode code) {
- return code.metadata().mayHaveInvokeMethodWithReceiver();
- }
-
- @SuppressWarnings("ConstantConditions")
- private void rewriteConstantEnumMethodCalls(IRCode code) {
- IRMetadata metadata = code.metadata();
- if (!metadata.mayHaveInvokeMethodWithReceiver()) {
- return;
- }
-
+ assert appView.enableWholeProgramOptimizations();
+ boolean hasChanged = false;
Set<Value> affectedValues = Sets.newIdentityHashSet();
InstructionListIterator iterator = code.instructionListIterator();
while (iterator.hasNext()) {
@@ -128,6 +113,7 @@
&& !isToStringInvoke) {
assert isNameInvoke || isOrdinalInvoke;
iterator.removeOrReplaceByDebugLocalRead();
+ hasChanged = true;
}
continue;
}
@@ -138,6 +124,7 @@
getOrdinalValue(code, abstractValue, methodWithReceiver.getReceiver().isNeverNull());
if (ordinalValue != null) {
iterator.replaceCurrentInstruction(new ConstNumber(outValue, ordinalValue.getValue()));
+ hasChanged = true;
}
continue;
}
@@ -149,10 +136,8 @@
}
if (isNameInvoke) {
- Value newValue =
- code.createValue(TypeElement.stringClassType(appView, definitelyNotNull()));
- iterator.replaceCurrentInstruction(new ConstString(newValue, nameValue.getDexString()));
- newValue.addAffectedValuesTo(affectedValues);
+ replaceByName(code, affectedValues, iterator, nameValue);
+ hasChanged = true;
continue;
}
@@ -182,16 +167,33 @@
continue;
}
- Value newValue =
- code.createValue(TypeElement.stringClassType(appView, definitelyNotNull()));
- iterator.replaceCurrentInstruction(new ConstString(newValue, nameValue.getDexString()));
- newValue.addAffectedValuesTo(affectedValues);
+ replaceByName(code, affectedValues, iterator, nameValue);
+ hasChanged = true;
}
}
if (!affectedValues.isEmpty()) {
new TypeAnalysis(appView).narrowing(affectedValues);
}
assert code.isConsistentSSA(appView);
+ return CodeRewriterResult.hasChanged(hasChanged);
+ }
+
+ private void replaceByName(
+ IRCode code,
+ Set<Value> affectedValues,
+ InstructionListIterator iterator,
+ SingleStringValue nameValue) {
+ Value newValue = code.createValue(TypeElement.stringClassType(appView, definitelyNotNull()));
+ iterator.replaceCurrentInstruction(new ConstString(newValue, nameValue.getDexString()));
+ newValue.addAffectedValuesTo(affectedValues);
+ }
+
+ @Override
+ protected boolean shouldRewriteCode(IRCode code) {
+ if (!options.enableEnumValueOptimization || !appView.hasLiveness()) {
+ return false;
+ }
+ return code.metadata().mayHaveInvokeMethodWithReceiver();
}
/**
@@ -215,6 +217,10 @@
* </blockquote>
*/
public void removeSwitchMaps(IRCode code) {
+ if (!options.enableEnumValueOptimization || !appView.hasLiveness()) {
+ return;
+ }
+ assert appView.enableWholeProgramOptimizations();
Set<Value> affectedValues = Sets.newIdentityHashSet();
boolean mayHaveIntroducedUnreachableBlocks = false;
for (BasicBlock block : code.blocks) {
diff --git a/src/main/java/com/android/tools/r8/ir/optimize/outliner/OutlinerImpl.java b/src/main/java/com/android/tools/r8/ir/optimize/outliner/OutlinerImpl.java
index 1cedcc3..45f03bc 100644
--- a/src/main/java/com/android/tools/r8/ir/optimize/outliner/OutlinerImpl.java
+++ b/src/main/java/com/android/tools/r8/ir/optimize/outliner/OutlinerImpl.java
@@ -59,6 +59,7 @@
import com.android.tools.r8.ir.code.ValueTypeConstraint;
import com.android.tools.r8.ir.conversion.IRBuilder;
import com.android.tools.r8.ir.conversion.IRConverter;
+import com.android.tools.r8.ir.conversion.MethodConversionOptions;
import com.android.tools.r8.ir.conversion.MethodConversionOptions.MutableMethodConversionOptions;
import com.android.tools.r8.ir.conversion.MethodProcessorEventConsumer;
import com.android.tools.r8.ir.conversion.SourceCode;
@@ -1360,7 +1361,10 @@
MethodProcessorEventConsumer methodProcessorEventConsumer =
MethodProcessorEventConsumer.empty();
converter.optimizeSynthesizedMethods(
- outlineMethods, methodProcessorEventConsumer, executorService);
+ outlineMethods,
+ methodProcessorEventConsumer,
+ MethodConversionOptions.forLirPhase(appView),
+ executorService);
feedback.updateVisibleOptimizationInfo();
forEachSelectedOutliningMethod(
converter,
diff --git a/src/main/java/com/android/tools/r8/ir/optimize/string/StringBuilderAppendOptimizer.java b/src/main/java/com/android/tools/r8/ir/optimize/string/StringBuilderAppendOptimizer.java
index 2ff8ec9..5ed16f7 100644
--- a/src/main/java/com/android/tools/r8/ir/optimize/string/StringBuilderAppendOptimizer.java
+++ b/src/main/java/com/android/tools/r8/ir/optimize/string/StringBuilderAppendOptimizer.java
@@ -95,8 +95,10 @@
@Override
protected boolean shouldRewriteCode(IRCode code) {
- return code.metadata().mayHaveNewInstance()
- || code.metadata().mayHaveInvokeMethodWithReceiver();
+ return options.enableStringConcatenationOptimization
+ && !isDebugMode(code.context())
+ && (code.metadata().mayHaveNewInstance()
+ || code.metadata().mayHaveInvokeMethodWithReceiver());
}
@Override
diff --git a/src/main/java/com/android/tools/r8/ir/synthetic/AbstractSynthesizedCode.java b/src/main/java/com/android/tools/r8/ir/synthetic/AbstractSynthesizedCode.java
index 2200050..f726dda 100644
--- a/src/main/java/com/android/tools/r8/ir/synthetic/AbstractSynthesizedCode.java
+++ b/src/main/java/com/android/tools/r8/ir/synthetic/AbstractSynthesizedCode.java
@@ -18,8 +18,8 @@
import com.android.tools.r8.ir.code.NumberGenerator;
import com.android.tools.r8.ir.code.Position;
import com.android.tools.r8.ir.conversion.IRBuilder;
+import com.android.tools.r8.ir.conversion.MethodConversionOptions;
import com.android.tools.r8.ir.conversion.MethodConversionOptions.MutableMethodConversionOptions;
-import com.android.tools.r8.ir.conversion.MethodConversionOptions.ThrowingMethodConversionOptions;
import com.android.tools.r8.ir.conversion.SourceCode;
import com.android.tools.r8.origin.Origin;
import com.android.tools.r8.utils.RetracerForCodePrinting;
@@ -68,7 +68,7 @@
origin,
valueNumberGenerator,
protoChanges)
- .build(context, new ThrowingMethodConversionOptions(appView.options()));
+ .build(context, MethodConversionOptions.nonConverting());
}
@Override
diff --git a/src/main/java/com/android/tools/r8/lightir/Lir2IRConverter.java b/src/main/java/com/android/tools/r8/lightir/Lir2IRConverter.java
index f455dda..079b862 100644
--- a/src/main/java/com/android/tools/r8/lightir/Lir2IRConverter.java
+++ b/src/main/java/com/android/tools/r8/lightir/Lir2IRConverter.java
@@ -128,7 +128,8 @@
AppView<?> appView,
Position callerPosition,
RewrittenPrototypeDescription protoChanges,
- DexMethod originalMethod) {
+ DexMethod originalMethod,
+ MutableMethodConversionOptions conversionOptions) {
Parser<EV> parser =
new Parser<>(
lirCode,
@@ -141,7 +142,7 @@
parser.parseArguments(method);
parser.ensureDebugInfo();
lirCode.forEach(view -> view.accept(parser));
- IRCode irCode = parser.getIRCode(method);
+ IRCode irCode = parser.getIRCode(method, conversionOptions);
// Some instructions have bottom types (e.g., phis). Compute their actual types by widening.
new TypeAnalysis(appView).widening(irCode);
return irCode;
@@ -338,7 +339,8 @@
// TODO(b/270398965): Replace LinkedList.
@SuppressWarnings("JdkObsolete")
- public IRCode getIRCode(ProgramMethod method) {
+ public IRCode getIRCode(
+ ProgramMethod method, MutableMethodConversionOptions conversionOptions) {
LinkedList<BasicBlock> blockList = new LinkedList<>();
IntList blockIndices = new IntArrayList(blocks.keySet());
blockIndices.sort(Integer::compare);
@@ -364,7 +366,7 @@
basicBlockNumberGenerator,
code.getMetadataForIR(),
method.getOrigin(),
- new MutableMethodConversionOptions(appView.options()));
+ conversionOptions);
}
public BasicBlock getBasicBlock(int instructionIndex) {
diff --git a/src/main/java/com/android/tools/r8/lightir/LirCode.java b/src/main/java/com/android/tools/r8/lightir/LirCode.java
index d1a7149..0fccf4e 100644
--- a/src/main/java/com/android/tools/r8/lightir/LirCode.java
+++ b/src/main/java/com/android/tools/r8/lightir/LirCode.java
@@ -28,6 +28,7 @@
import com.android.tools.r8.ir.code.NumberGenerator;
import com.android.tools.r8.ir.code.Position;
import com.android.tools.r8.ir.code.Position.SourcePosition;
+import com.android.tools.r8.ir.conversion.MethodConversionOptions;
import com.android.tools.r8.ir.conversion.MethodConversionOptions.MutableMethodConversionOptions;
import com.android.tools.r8.origin.Origin;
import com.android.tools.r8.utils.InternalOptions;
@@ -282,7 +283,8 @@
MutableMethodConversionOptions conversionOptions) {
RewrittenPrototypeDescription protoChanges =
appView.graphLens().lookupPrototypeChangesForMethodDefinition(method.getReference());
- return internalBuildIR(method, appView, new NumberGenerator(), null, protoChanges);
+ return internalBuildIR(
+ method, appView, new NumberGenerator(), null, protoChanges, conversionOptions);
}
@Override
@@ -298,7 +300,13 @@
assert valueNumberGenerator != null;
assert callerPosition != null;
assert protoChanges != null;
- return internalBuildIR(method, appView, valueNumberGenerator, callerPosition, protoChanges);
+ return internalBuildIR(
+ method,
+ appView,
+ valueNumberGenerator,
+ callerPosition,
+ protoChanges,
+ MethodConversionOptions.nonConverting());
}
private IRCode internalBuildIR(
@@ -306,7 +314,8 @@
AppView<?> appView,
NumberGenerator valueNumberGenerator,
Position callerPosition,
- RewrittenPrototypeDescription protoChanges) {
+ RewrittenPrototypeDescription protoChanges,
+ MutableMethodConversionOptions conversionOptions) {
LirCode<Integer> typedLir = asLirCode();
return Lir2IRConverter.translate(
method,
@@ -315,7 +324,8 @@
appView,
callerPosition,
protoChanges,
- appView.graphLens().getOriginalMethodSignature(method.getReference()));
+ appView.graphLens().getOriginalMethodSignature(method.getReference()),
+ conversionOptions);
}
@Override
diff --git a/src/main/java/com/android/tools/r8/naming/ComposingBuilder.java b/src/main/java/com/android/tools/r8/naming/ComposingBuilder.java
index d0d89a8..04e7817 100644
--- a/src/main/java/com/android/tools/r8/naming/ComposingBuilder.java
+++ b/src/main/java/com/android/tools/r8/naming/ComposingBuilder.java
@@ -588,7 +588,6 @@
List<MappedRangesOfName> mappedRangesOfNames =
entry.getValue().partitionOnMethodSignature();
for (MappedRangesOfName rangesOfName : mappedRangesOfNames) {
- MemberNaming memberNaming = rangesOfName.getMemberNaming(mapper);
List<MappedRange> newRangesToCompose = rangesOfName.getMappedRanges();
RangeBuilder minified = new RangeBuilder();
// The new minified ranges may have ranges that range over positions that has additional
@@ -654,13 +653,10 @@
}
}
composedRanges =
- fixupOutlineInformation(
- computedOutlineInformation,
- newRangesToCompose,
- composedRanges,
- memberNaming.getOriginalSignature().asMethodSignature());
+ fixupOutlines(computedOutlineInformation, newRangesToCompose, composedRanges);
MethodSignature residualSignature =
- memberNaming
+ rangesOfName
+ .getMemberNaming(mapper)
.computeResidualSignature(type -> inverseClassMapping.getOrDefault(type, type))
.asMethodSignature();
if (ListUtils.last(composedRanges).minifiedRange != null) {
@@ -677,16 +673,14 @@
}
}
- private List<MappedRange> fixupOutlineInformation(
+ private List<MappedRange> fixupOutlines(
ComputedOutlineInformation computedOutlineInformation,
List<MappedRange> newRangesToBeComposed,
- List<MappedRange> composedRanges,
- MethodSignature originalSignature)
+ List<MappedRange> composedRanges)
throws MappingComposeException {
composedRanges = fixupInlinedOutlines(computedOutlineInformation, composedRanges);
fixupOutlineInformation(computedOutlineInformation, newRangesToBeComposed, composedRanges);
- fixupOutlineCallsiteInformation(
- computedOutlineInformation, originalSignature, composedRanges);
+ fixupOutlineCallsiteInformation(computedOutlineInformation, composedRanges);
return composedRanges;
}
@@ -846,10 +840,12 @@
private void fixupOutlineCallsiteInformation(
ComputedOutlineInformation computedOutlineInformation,
- MethodSignature originalSignature,
List<MappedRange> composedRanges)
throws MappingComposeException {
- if (computedOutlineInformation.outlineCallsiteMappingInformationToPatchUp.isEmpty()) {
+ Map<OutlineCallsiteMappingInformation, List<ComputedMappedRangeForOutline>>
+ outlineCallsitesToPatchUp =
+ computedOutlineInformation.outlineCallsiteMappingInformationToPatchUp;
+ if (outlineCallsitesToPatchUp.isEmpty()) {
return;
}
MappedRange lastComposedRange = ListUtils.last(composedRanges);
@@ -857,42 +853,45 @@
// program. We therefore have to find the original positions and copy all inline frames
// and amend the outermost frame with the residual signature and the next free position.
List<OutlineCallsiteMappingInformation> outlineCallSites =
- new ArrayList<>(
- computedOutlineInformation.outlineCallsiteMappingInformationToPatchUp.keySet());
- outlineCallSites.sort(Comparator.comparing(mapping -> mapping.getOutline().toString()));
+ ListUtils.sort(
+ outlineCallsitesToPatchUp.keySet(),
+ Comparator.comparing(mapping -> mapping.getOutline().toString()));
IntBox firstAvailableRange = new IntBox(lastComposedRange.minifiedRange.to + 1);
for (OutlineCallsiteMappingInformation outlineCallSite : outlineCallSites) {
- Int2IntSortedMap newPositionMap =
- new Int2IntLinkedOpenHashMap(outlineCallSite.getPositions().size());
- visitOutlineMappedPositions(
- outlineCallSite,
- originalSignature,
- positionInfo -> {
- int newIndex = firstAvailableRange.getAndIncrement();
- Range newMinifiedRange = new Range(newIndex, newIndex);
- MappedRange outerMostOutlineCallsiteFrame =
- ListUtils.last(positionInfo.mappedRanges());
- for (MappedRange inlineMappedRangeInOutlinePosition : positionInfo.mappedRanges()) {
- if (inlineMappedRangeInOutlinePosition != outerMostOutlineCallsiteFrame) {
- composedRanges.add(
- inlineMappedRangeInOutlinePosition.withMinifiedRange(newMinifiedRange));
+ for (ComputedMappedRangeForOutline computedMappedRangeForOutline :
+ outlineCallsitesToPatchUp.get(outlineCallSite)) {
+ Int2IntSortedMap newPositionMap =
+ new Int2IntLinkedOpenHashMap(outlineCallSite.getPositions().size());
+ visitOutlineMappedPositions(
+ outlineCallSite,
+ computedMappedRangeForOutline.current.getOriginalSignature(),
+ positionInfo -> {
+ int newIndex = firstAvailableRange.getAndIncrement();
+ Range newMinifiedRange = new Range(newIndex, newIndex);
+ MappedRange outerMostOutlineCallsiteFrame =
+ ListUtils.last(positionInfo.mappedRanges());
+ for (MappedRange inlineMappedRangeInOutlinePosition : positionInfo.mappedRanges()) {
+ if (inlineMappedRangeInOutlinePosition != outerMostOutlineCallsiteFrame) {
+ composedRanges.add(
+ inlineMappedRangeInOutlinePosition.withMinifiedRange(newMinifiedRange));
+ }
}
- }
- int originalPosition =
- outerMostOutlineCallsiteFrame.getOriginalLineNumber(
- positionInfo.outlineCallsitePosition());
- boolean hasInlineFrames = positionInfo.mappedRanges().size() > 1;
- composedRanges.add(
- new MappedRange(
- newMinifiedRange,
- lastComposedRange.signature,
- hasInlineFrames
- ? new Range(originalPosition)
- : new Range(originalPosition, originalPosition),
- lastComposedRange.getRenamedName()));
- newPositionMap.put(positionInfo.outlinePosition(), newIndex);
- outlineCallSite.setPositionsInternal(newPositionMap);
- });
+ int originalPosition =
+ outerMostOutlineCallsiteFrame.getOriginalLineNumber(
+ positionInfo.outlineCallsitePosition());
+ boolean hasInlineFrames = positionInfo.mappedRanges().size() > 1;
+ composedRanges.add(
+ new MappedRange(
+ newMinifiedRange,
+ lastComposedRange.signature,
+ hasInlineFrames
+ ? new Range(originalPosition)
+ : new Range(originalPosition, originalPosition),
+ lastComposedRange.getRenamedName()));
+ newPositionMap.put(positionInfo.outlinePosition(), newIndex);
+ outlineCallSite.setPositionsInternal(newPositionMap);
+ });
+ }
}
}
diff --git a/src/main/java/com/android/tools/r8/naming/dexitembasedstring/RecordFieldNamesComputationInfo.java b/src/main/java/com/android/tools/r8/naming/dexitembasedstring/RecordFieldNamesComputationInfo.java
index 8c2f8b7..253aa47 100644
--- a/src/main/java/com/android/tools/r8/naming/dexitembasedstring/RecordFieldNamesComputationInfo.java
+++ b/src/main/java/com/android/tools/r8/naming/dexitembasedstring/RecordFieldNamesComputationInfo.java
@@ -16,7 +16,6 @@
import com.android.tools.r8.naming.NamingLens;
import com.android.tools.r8.utils.StringUtils;
import java.util.ArrayList;
-import java.util.Arrays;
import java.util.List;
import java.util.function.IntFunction;
@@ -119,7 +118,6 @@
DexDefinitionSupplier definitions,
GraphLens graphLens,
IntFunction<String> nameSupplier) {
- assert Arrays.stream(fields).allMatch(f -> f.holder == type);
DexClass recordClass = definitions.contextIndependentDefinitionFor(type);
assert recordClass != null;
List<String> names = new ArrayList<>(fields.length);
diff --git a/src/main/java/com/android/tools/r8/optimize/accessmodification/AccessModifier.java b/src/main/java/com/android/tools/r8/optimize/accessmodification/AccessModifier.java
index f5482db..6304490 100644
--- a/src/main/java/com/android/tools/r8/optimize/accessmodification/AccessModifier.java
+++ b/src/main/java/com/android/tools/r8/optimize/accessmodification/AccessModifier.java
@@ -15,8 +15,6 @@
import com.android.tools.r8.graph.DexMethod;
import com.android.tools.r8.graph.DexMethodSignature;
import com.android.tools.r8.graph.DexProgramClass;
-import com.android.tools.r8.graph.FieldAccessFlags;
-import com.android.tools.r8.graph.FieldAccessInfo;
import com.android.tools.r8.graph.ImmediateProgramSubtypingInfo;
import com.android.tools.r8.graph.InnerClassAttribute;
import com.android.tools.r8.graph.MethodAccessFlags;
@@ -106,15 +104,13 @@
DexProgramClass clazz,
AccessModifierNamingState namingState,
BottomUpTraversalState traversalState) {
- publicizeClass(clazz);
- publicizeFields(clazz);
+ publicizeClass(clazz, traversalState);
+ publicizeFields(clazz, traversalState);
publicizeMethods(clazz, namingState, traversalState);
- // TODO(b/278736230): Also finalize classes and methods here.
- finalizeFields(clazz);
}
- private void publicizeClass(DexProgramClass clazz) {
- if (isAccessModificationAllowed(clazz) && !clazz.getAccessFlags().isPublic()) {
+ private void publicizeClass(DexProgramClass clazz, BottomUpTraversalState traversalState) {
+ if (isAccessModificationAllowed(clazz, traversalState) && !clazz.getAccessFlags().isPublic()) {
clazz.getAccessFlags().promoteToPublic();
}
@@ -130,12 +126,12 @@
}
}
- private void publicizeFields(DexProgramClass clazz) {
- clazz.forEachProgramField(this::publicizeField);
+ private void publicizeFields(DexProgramClass clazz, BottomUpTraversalState traversalState) {
+ clazz.forEachProgramField(field -> publicizeField(field, traversalState));
}
- private void publicizeField(ProgramField field) {
- if (isAccessModificationAllowed(field) && !field.getAccessFlags().isPublic()) {
+ private void publicizeField(ProgramField field, BottomUpTraversalState traversalState) {
+ if (isAccessModificationAllowed(field, traversalState) && !field.getAccessFlags().isPublic()) {
field.getAccessFlags().promoteToPublic();
}
}
@@ -165,7 +161,7 @@
AccessModifierNamingState namingState,
BottomUpTraversalState traversalState) {
MethodAccessFlags accessFlags = method.getAccessFlags();
- if (accessFlags.isPublic() || !isAccessModificationAllowed(method)) {
+ if (accessFlags.isPublic() || !isAccessModificationAllowed(method, traversalState)) {
return commitMethod(method, localNamingState, namingState);
}
@@ -254,18 +250,35 @@
return newMethodReference;
}
- private boolean isAccessModificationAllowed(ProgramDefinition definition) {
+ private boolean isAccessModificationAllowed(
+ ProgramDefinition definition, BottomUpTraversalState traversalState) {
if (!appView.getKeepInfo(definition).isAccessModificationAllowed(options)) {
+ if (!options.getAccessModifierOptions().isForceModifyingPackagePrivateAndProtectedMethods()
+ || !definition.isMethod()
+ || definition.getAccessFlags().isPrivate()) {
+ return false;
+ }
+ }
+ if (!appView.getKeepInfo(definition).isAccessModificationAllowedForTesting(options)) {
return false;
}
+ if (isFailedResolutionTarget(definition)) {
+ return false;
+ }
+ return definition.isClass()
+ || options.getAccessModifierOptions().canPollutePublicApi()
+ || !traversalState.isKeptOrHasKeptSubclass;
+ }
+
+ private boolean isFailedResolutionTarget(ProgramDefinition definition) {
if (definition.isClass()) {
- return !appView.appInfo().isFailedClassResolutionTarget(definition.asClass().getType());
+ return appView.appInfo().isFailedClassResolutionTarget(definition.asClass().getType());
}
if (definition.isField()) {
- return !appView.appInfo().isFailedFieldResolutionTarget(definition.asField().getReference());
+ return appView.appInfo().isFailedFieldResolutionTarget(definition.asField().getReference());
}
assert definition.isMethod();
- return !appView.appInfo().isFailedMethodResolutionTarget(definition.asMethod().getReference());
+ return appView.appInfo().isFailedMethodResolutionTarget(definition.asMethod().getReference());
}
private boolean isRenamingAllowed(ProgramMethod method) {
@@ -296,28 +309,4 @@
}
return method.getDefinition();
}
-
- // Finalization of classes and members.
-
- private void finalizeFields(DexProgramClass clazz) {
- clazz.forEachProgramField(this::finalizeField);
- }
-
- private void finalizeField(ProgramField field) {
- FieldAccessFlags flags = field.getAccessFlags();
- FieldAccessInfo accessInfo =
- appView.appInfo().getFieldAccessInfoCollection().get(field.getReference());
- if (!appView.getKeepInfo(field).isPinned(options)
- && !accessInfo.hasReflectiveWrite()
- && !accessInfo.isWrittenFromMethodHandle()
- && accessInfo.isWrittenOnlyInMethodSatisfying(
- method ->
- method.getDefinition().isInitializer()
- && method.getAccessFlags().isStatic() == flags.isStatic()
- && method.getHolder() == field.getHolder())
- && !flags.isFinal()
- && !flags.isVolatile()) {
- flags.promoteToFinal();
- }
- }
}
diff --git a/src/main/java/com/android/tools/r8/optimize/accessmodification/AccessModifierOptions.java b/src/main/java/com/android/tools/r8/optimize/accessmodification/AccessModifierOptions.java
index a9d69d6..99a0645 100644
--- a/src/main/java/com/android/tools/r8/optimize/accessmodification/AccessModifierOptions.java
+++ b/src/main/java/com/android/tools/r8/optimize/accessmodification/AccessModifierOptions.java
@@ -8,14 +8,42 @@
public class AccessModifierOptions {
+ // TODO(b/131130038): Do not allow accessmodification when kept.
+ private boolean forceModifyPackagePrivateAndProtectedMethods = true;
+
private InternalOptions options;
public AccessModifierOptions(InternalOptions options) {
this.options = options;
}
+ public boolean canPollutePublicApi() {
+ return isAccessModificationRulePresent() || options.isGeneratingDex();
+ }
+
public boolean isAccessModificationEnabled() {
+ // TODO(b/288062771): Enable access modification for L8.
+ if (!options.synthesizedClassPrefix.isEmpty()) {
+ return false;
+ }
+ if (options.forceProguardCompatibility) {
+ return isAccessModificationRulePresent();
+ }
+ return true;
+ }
+
+ private boolean isAccessModificationRulePresent() {
return options.hasProguardConfiguration()
&& options.getProguardConfiguration().isAccessModificationAllowed();
}
+
+ public boolean isForceModifyingPackagePrivateAndProtectedMethods() {
+ return forceModifyPackagePrivateAndProtectedMethods;
+ }
+
+ public void setForceModifyPackagePrivateAndProtectedMethods(
+ boolean forceModifyPackagePrivateAndProtectedMethods) {
+ this.forceModifyPackagePrivateAndProtectedMethods =
+ forceModifyPackagePrivateAndProtectedMethods;
+ }
}
diff --git a/src/main/java/com/android/tools/r8/optimize/accessmodification/AccessModifierTraversal.java b/src/main/java/com/android/tools/r8/optimize/accessmodification/AccessModifierTraversal.java
index 1fef67f..e07407b 100644
--- a/src/main/java/com/android/tools/r8/optimize/accessmodification/AccessModifierTraversal.java
+++ b/src/main/java/com/android/tools/r8/optimize/accessmodification/AccessModifierTraversal.java
@@ -14,6 +14,8 @@
import com.android.tools.r8.graph.ProgramMethod;
import com.android.tools.r8.optimize.argumentpropagation.utils.DepthFirstTopDownClassHierarchyTraversal;
import com.android.tools.r8.shaking.AppInfoWithLiveness;
+import com.android.tools.r8.shaking.KeepClassInfo;
+import com.android.tools.r8.utils.InternalOptions;
import com.android.tools.r8.utils.MapUtils;
import com.android.tools.r8.utils.collections.DexMethodSignatureMap;
import com.google.common.collect.Iterables;
@@ -65,7 +67,11 @@
states.remove(clazz.getType());
// Remove and join the bottom up traversal states of the subclasses.
- BottomUpTraversalState state = new BottomUpTraversalState();
+ KeepClassInfo keepInfo = appView.getKeepInfo(clazz);
+ InternalOptions options = appView.options();
+ BottomUpTraversalState state =
+ new BottomUpTraversalState(
+ !keepInfo.isMinificationAllowed(options) && !keepInfo.isShrinkingAllowed(options));
forEachSubClass(
clazz,
subclass -> {
@@ -125,11 +131,14 @@
private static final BottomUpTraversalState EMPTY =
new BottomUpTraversalState(DexMethodSignatureMap.empty());
+ boolean isKeptOrHasKeptSubclass;
+
// The set of non-private virtual methods below the current class.
DexMethodSignatureMap<Set<String>> nonPrivateVirtualMethods;
- BottomUpTraversalState() {
+ BottomUpTraversalState(boolean isKept) {
this(DexMethodSignatureMap.create());
+ this.isKeptOrHasKeptSubclass = isKept;
}
BottomUpTraversalState(DexMethodSignatureMap<Set<String>> packagePrivateMethods) {
@@ -146,6 +155,7 @@
}
void add(BottomUpTraversalState backtrackingState) {
+ isKeptOrHasKeptSubclass |= backtrackingState.isKeptOrHasKeptSubclass;
backtrackingState.nonPrivateVirtualMethods.forEach(
(methodSignature, packageDescriptors) ->
this.nonPrivateVirtualMethods
@@ -173,5 +183,9 @@
boolean isEmpty() {
return nonPrivateVirtualMethods.isEmpty();
}
+
+ void setIsKeptOrHasKeptSubclass() {
+ isKeptOrHasKeptSubclass = true;
+ }
}
}
diff --git a/src/main/java/com/android/tools/r8/optimize/redundantbridgeremoval/RedundantBridgeRemover.java b/src/main/java/com/android/tools/r8/optimize/redundantbridgeremoval/RedundantBridgeRemover.java
index 73a0444..ad329a1 100644
--- a/src/main/java/com/android/tools/r8/optimize/redundantbridgeremoval/RedundantBridgeRemover.java
+++ b/src/main/java/com/android/tools/r8/optimize/redundantbridgeremoval/RedundantBridgeRemover.java
@@ -43,13 +43,20 @@
private final RedundantBridgeRemovalLens.Builder lensBuilder =
new RedundantBridgeRemovalLens.Builder();
+ private boolean mustRetargetInvokesToTargetMethod = false;
+
public RedundantBridgeRemover(AppView<AppInfoWithLiveness> appView) {
this.appView = appView;
this.immediateSubtypingInfo = ImmediateProgramSubtypingInfo.create(appView);
this.redundantBridgeRemovalOptions = appView.options().getRedundantBridgeRemovalOptions();
}
- private DexClassAndMethod getTargetForRedundantBridge(ProgramMethod method) {
+ public RedundantBridgeRemover setMustRetargetInvokesToTargetMethod() {
+ mustRetargetInvokesToTargetMethod = true;
+ return this;
+ }
+
+ private DexClassAndMethod getTargetForRedundantNonAbstractBridge(ProgramMethod method) {
DexEncodedMethod definition = method.getDefinition();
BridgeInfo bridgeInfo = definition.getOptimizationInfo().getBridgeInfo();
boolean isBridge = definition.isBridge() || bridgeInfo != null;
@@ -112,10 +119,14 @@
return false;
}
+ public void run(ExecutorService executorService, Timing timing) throws ExecutionException {
+ run(executorService, timing, null);
+ }
+
public void run(
- MemberRebindingIdentityLens memberRebindingIdentityLens,
ExecutorService executorService,
- Timing timing)
+ Timing timing,
+ MemberRebindingIdentityLens memberRebindingIdentityLens)
throws ExecutionException {
assert memberRebindingIdentityLens == null
|| memberRebindingIdentityLens == appView.graphLens();
@@ -148,6 +159,7 @@
}
appView.notifyOptimizationFinishedForTesting();
+ appView.appInfo().notifyRedundantBridgeRemoverFinished(true);
timing.end();
}
@@ -185,38 +197,42 @@
return traversal.getRemovedBridges();
}
- private boolean isRedundantAbstractBridge(ProgramMethod method) {
+ private DexClassAndMethod getTargetForRedundantAbstractBridge(ProgramMethod method) {
if (!method.getAccessFlags().isAbstract() || method.getDefinition().getCode() != null) {
- return false;
+ return null;
}
DexProgramClass holder = method.getHolder();
if (holder.getSuperType() == null) {
assert holder.getType() == appView.dexItemFactory().objectType;
- return false;
+ return null;
}
MethodResolutionResult superTypeResolution =
appView.appInfo().resolveMethodOn(holder.getSuperType(), method.getReference(), false);
if (superTypeResolution.isMultiMethodResolutionResult()) {
- return false;
+ return null;
}
// Check if there is a definition in the super type hieararchy that is also abstract and has the
// same visibility.
if (superTypeResolution.isSingleResolution()) {
- DexClassAndMethod resolutionPair =
+ DexClassAndMethod resolvedMethod =
superTypeResolution.asSingleResolution().getResolutionPair();
- return resolutionPair.getDefinition().isAbstract()
- && resolutionPair
+ if (resolvedMethod.getDefinition().isAbstract()
+ && resolvedMethod
.getDefinition()
.isAtLeastAsVisibleAsOtherInSameHierarchy(method.getDefinition(), appView)
- && (!resolutionPair.getHolder().isInterface() || holder.getInterfaces().isEmpty());
+ && (!resolvedMethod.getHolder().isInterface() || holder.getInterfaces().isEmpty())) {
+ return resolvedMethod;
+ }
+ return null;
}
// Only check for interfaces if resolving the method on super type causes NoSuchMethodError.
FailedResolutionResult failedResolutionResult = superTypeResolution.asFailedResolution();
if (failedResolutionResult == null
|| !failedResolutionResult.isNoSuchMethodErrorResult(holder, appView, appView.appInfo())
|| holder.getInterfaces().isEmpty()) {
- return false;
+ return null;
}
+ DexClassAndMethod representativeInterfaceMethod = null;
for (DexType iface : holder.getInterfaces()) {
SingleResolutionResult<?> singleIfaceResult =
appView
@@ -228,10 +244,14 @@
|| !singleIfaceResult
.getResolvedMethod()
.isAtLeastAsVisibleAsOtherInSameHierarchy(method.getDefinition(), appView)) {
- return false;
+ return null;
+ }
+ if (representativeInterfaceMethod == null) {
+ representativeInterfaceMethod = singleIfaceResult.getResolutionPair();
}
}
- return true;
+ assert representativeInterfaceMethod != null;
+ return representativeInterfaceMethod;
}
private void pruneApp(
@@ -266,21 +286,23 @@
|| !keepInfo.isOptimizationAllowed(appView.options())) {
return;
}
- if (isRedundantAbstractBridge(method)) {
- // Record that the redundant bridge should be removed.
- bridgesToRemoveForClass.add(method);
- return;
- }
- DexClassAndMethod target = getTargetForRedundantBridge(method);
- if (target != null) {
- // Record that the redundant bridge should be removed.
- bridgesToRemoveForClass.add(method);
-
- // Rewrite invokes to the bridge to the target if it is accessible.
- if (canRetargetInvokesToTargetMethod(method, target)) {
- lensBuilder.map(method, target);
+ DexClassAndMethod target = getTargetForRedundantAbstractBridge(method);
+ if (target == null) {
+ target = getTargetForRedundantNonAbstractBridge(method);
+ if (target == null) {
+ return;
}
}
+
+ // Rewrite invokes to the bridge to the target if it is accessible.
+ if (canRetargetInvokesToTargetMethod(method, target)) {
+ lensBuilder.map(method, target);
+ } else if (mustRetargetInvokesToTargetMethod) {
+ return;
+ }
+
+ // Record that the redundant bridge should be removed.
+ bridgesToRemoveForClass.add(method);
});
if (!bridgesToRemoveForClass.isEmpty()) {
clazz.getMethodCollection().removeMethods(bridgesToRemoveForClass.toDefinitionSet());
@@ -295,6 +317,14 @@
&& !redundantBridgeRemovalOptions.isRetargetingOfConstructorBridgeCallsEnabled()) {
return false;
}
+ // Check if the current method is an interface method targeted by invoke-super.
+ if (method.getHolder().isInterface()
+ && appView
+ .appInfo()
+ .getMethodAccessInfoCollection()
+ .hasSuperInvoke(method.getReference())) {
+ return false;
+ }
// Check if all possible contexts that have access to the holder of the redundant bridge
// method also have access to the holder of the target method.
DexProgramClass methodHolder = method.getHolder();
diff --git a/src/main/java/com/android/tools/r8/profile/startup/instrumentation/StartupInstrumentation.java b/src/main/java/com/android/tools/r8/profile/startup/instrumentation/StartupInstrumentation.java
index a64d1c7..8919b83 100644
--- a/src/main/java/com/android/tools/r8/profile/startup/instrumentation/StartupInstrumentation.java
+++ b/src/main/java/com/android/tools/r8/profile/startup/instrumentation/StartupInstrumentation.java
@@ -33,6 +33,7 @@
import com.android.tools.r8.ir.code.Value;
import com.android.tools.r8.ir.conversion.IRConverter;
import com.android.tools.r8.ir.conversion.IRToDexFinalizer;
+import com.android.tools.r8.ir.conversion.MethodConversionOptions;
import com.android.tools.r8.ir.conversion.MethodConversionOptions.MutableMethodConversionOptions;
import com.android.tools.r8.ir.conversion.MethodProcessorEventConsumer;
import com.android.tools.r8.startup.generated.InstrumentationServerFactory;
@@ -99,7 +100,11 @@
List<DexProgramClass> extraProgramClasses = createStartupRuntimeLibraryClasses();
MethodProcessorEventConsumer eventConsumer = MethodProcessorEventConsumer.empty();
- converter.processClassesConcurrently(extraProgramClasses, eventConsumer, executorService);
+ converter.processClassesConcurrently(
+ extraProgramClasses,
+ eventConsumer,
+ MethodConversionOptions.forD8(appView),
+ executorService);
DexApplication newApplication =
appView.app().builder().addProgramClasses(extraProgramClasses).build();
@@ -167,7 +172,7 @@
// Disable StringSwitch conversion to avoid having to run the StringSwitchRemover before
// finalizing the code.
MutableMethodConversionOptions conversionOptions =
- new MutableMethodConversionOptions(options).disableStringSwitchConversion();
+ MethodConversionOptions.forD8(appView).disableStringSwitchConversion();
IRCode code = method.buildIR(appView, conversionOptions);
InstructionListIterator instructionIterator = code.entryBlock().listIterator(code);
instructionIterator.positionBeforeNextInstructionThatMatches(not(Instruction::isArgument));
diff --git a/src/main/java/com/android/tools/r8/shaking/AnnotationRemover.java b/src/main/java/com/android/tools/r8/shaking/AnnotationRemover.java
index ab4015d..1666178 100644
--- a/src/main/java/com/android/tools/r8/shaking/AnnotationRemover.java
+++ b/src/main/java/com/android/tools/r8/shaking/AnnotationRemover.java
@@ -360,6 +360,9 @@
if (clazz.getClassSignature().isValid() && keepInfo.isSignatureRemovalAllowed(options)) {
clazz.clearClassSignature();
}
+ if (keepInfo.isPermittedSubclassesRemovalAllowed(options)) {
+ clazz.clearPermittedSubclasses();
+ }
}
private boolean canRemoveInnerClassAttribute(
diff --git a/src/main/java/com/android/tools/r8/shaking/AppInfoWithLiveness.java b/src/main/java/com/android/tools/r8/shaking/AppInfoWithLiveness.java
index d3ed9d1..5b459c3 100644
--- a/src/main/java/com/android/tools/r8/shaking/AppInfoWithLiveness.java
+++ b/src/main/java/com/android/tools/r8/shaking/AppInfoWithLiveness.java
@@ -504,7 +504,13 @@
public void notifyMemberRebindingFinished(AppView<AppInfoWithLiveness> appView) {
getFieldAccessInfoCollection().restrictToProgram(appView);
- getMethodAccessInfoCollection().destroyNonDirectInvokes();
+ getMethodAccessInfoCollection().destroyNonDirectNonSuperInvokes();
+ }
+
+ public void notifyRedundantBridgeRemoverFinished(boolean initial) {
+ if (initial) {
+ getMethodAccessInfoCollection().destroySuperInvokes();
+ }
}
@Override
diff --git a/src/main/java/com/android/tools/r8/shaking/Enqueuer.java b/src/main/java/com/android/tools/r8/shaking/Enqueuer.java
index 471c6b0..1ea86b5 100644
--- a/src/main/java/com/android/tools/r8/shaking/Enqueuer.java
+++ b/src/main/java/com/android/tools/r8/shaking/Enqueuer.java
@@ -23,7 +23,6 @@
import com.android.tools.r8.contexts.CompilationContext.ProcessorContext;
import com.android.tools.r8.dex.IndexedItemCollection;
import com.android.tools.r8.dex.code.CfOrDexInstruction;
-import com.android.tools.r8.errors.CompilationError;
import com.android.tools.r8.errors.InterfaceDesugarMissingTypeDiagnostic;
import com.android.tools.r8.errors.Unreachable;
import com.android.tools.r8.experimental.graphinfo.GraphConsumer;
@@ -108,6 +107,7 @@
import com.android.tools.r8.ir.code.InvokeVirtual;
import com.android.tools.r8.ir.code.NewArrayEmpty;
import com.android.tools.r8.ir.code.Value;
+import com.android.tools.r8.ir.conversion.MethodConversionOptions;
import com.android.tools.r8.ir.desugar.CfInstructionDesugaringCollection;
import com.android.tools.r8.ir.desugar.CfInstructionDesugaringEventConsumer;
import com.android.tools.r8.ir.desugar.CfPostProcessingDesugaringCollection;
@@ -2051,11 +2051,6 @@
assert !appView.unboxedEnums().isUnboxedEnum(clazz)
: "Enum " + clazz.toSourceString() + " has been unboxed but is still in the program.";
- if (options.isGeneratingClassFiles() && clazz.hasPermittedSubclassAttributes()) {
- throw new CompilationError(
- "Sealed classes are not supported as program classes when generating class files",
- clazz.getOrigin());
- }
// Mark types in inner-class attributes referenced.
{
BiConsumer<DexType, ProgramDerivedContext> missingClassConsumer =
@@ -3495,7 +3490,11 @@
DexProgramClass clazz = asProgramClassOrNull(definitionFor(referencedType, context));
if (clazz != null) {
applyMinimumKeepInfoWhenLive(
- clazz, KeepClassInfo.newEmptyJoiner().disallowMinification().disallowOptimization());
+ clazz,
+ KeepClassInfo.newEmptyJoiner()
+ .disallowMinification()
+ .disallowOptimization()
+ .disallowRepackaging());
}
}
}
@@ -4913,7 +4912,7 @@
}
private void handleReflectiveBehavior(ProgramMethod method) {
- IRCode code = method.buildIR(appView);
+ IRCode code = method.buildIR(appView, MethodConversionOptions.nonConverting());
InstructionIterator iterator = code.instructionIterator();
while (iterator.hasNext()) {
Instruction instruction = iterator.next();
diff --git a/src/main/java/com/android/tools/r8/shaking/EnqueuerDeferredTracingImpl.java b/src/main/java/com/android/tools/r8/shaking/EnqueuerDeferredTracingImpl.java
index 8f08d77..adbf8d0 100644
--- a/src/main/java/com/android/tools/r8/shaking/EnqueuerDeferredTracingImpl.java
+++ b/src/main/java/com/android/tools/r8/shaking/EnqueuerDeferredTracingImpl.java
@@ -24,6 +24,7 @@
import com.android.tools.r8.ir.conversion.IRFinalizer;
import com.android.tools.r8.ir.conversion.IRToCfFinalizer;
import com.android.tools.r8.ir.conversion.IRToDexFinalizer;
+import com.android.tools.r8.ir.conversion.MethodConversionOptions;
import com.android.tools.r8.ir.conversion.MethodConversionOptions.MutableMethodConversionOptions;
import com.android.tools.r8.ir.conversion.passes.ThrowCatchOptimizer;
import com.android.tools.r8.ir.optimize.membervaluepropagation.assume.AssumeInfo;
@@ -264,8 +265,8 @@
// Build IR.
MutableMethodConversionOptions conversionOptions =
mode.isInitialTreeShaking()
- ? new MutableMethodConversionOptions(options).setIsGeneratingClassFiles(true)
- : new MutableMethodConversionOptions(options);
+ ? MethodConversionOptions.forPreLirPhase(appView)
+ : MethodConversionOptions.forPostLirPhase(appView);
conversionOptions.disableStringSwitchConversion();
IRCode ir = method.buildIR(appView, conversionOptions);
@@ -274,7 +275,7 @@
rewriter.rewriteCode(ir, initializedClassesWithContexts, prunedFields);
// Run dead code elimination.
- new ThrowCatchOptimizer(appView).optimizeAlwaysThrowingInstructions(ir);
+ new ThrowCatchOptimizer(appView).run(ir, Timing.empty());
rewriter.getDeadCodeRemover().run(ir, Timing.empty());
// Finalize to class files or dex.
diff --git a/src/main/java/com/android/tools/r8/shaking/GlobalKeepInfoConfiguration.java b/src/main/java/com/android/tools/r8/shaking/GlobalKeepInfoConfiguration.java
index 7ff0803..9fec619 100644
--- a/src/main/java/com/android/tools/r8/shaking/GlobalKeepInfoConfiguration.java
+++ b/src/main/java/com/android/tools/r8/shaking/GlobalKeepInfoConfiguration.java
@@ -39,4 +39,6 @@
boolean isKeepRuntimeVisibleTypeAnnotationsEnabled();
boolean isKeepRuntimeInvisibleTypeAnnotationsEnabled();
+
+ boolean isKeepPermittedSubclassesEnabled();
}
diff --git a/src/main/java/com/android/tools/r8/shaking/KeepClassInfo.java b/src/main/java/com/android/tools/r8/shaking/KeepClassInfo.java
index f504792..9898d34 100644
--- a/src/main/java/com/android/tools/r8/shaking/KeepClassInfo.java
+++ b/src/main/java/com/android/tools/r8/shaking/KeepClassInfo.java
@@ -14,10 +14,12 @@
public final class KeepClassInfo extends KeepInfo<KeepClassInfo.Builder, KeepClassInfo> {
// Requires all aspects of a class to be kept.
- private static final KeepClassInfo TOP = new Builder().makeTop().disallowRepackaging().build();
+ private static final KeepClassInfo TOP =
+ new Builder().makeTop().disallowRepackaging().disallowPermittedSubclassesRemoval().build();
// Requires no aspects of a class to be kept.
- private static final KeepClassInfo BOTTOM = new Builder().makeBottom().allowRepackaging().build();
+ private static final KeepClassInfo BOTTOM =
+ new Builder().makeBottom().allowRepackaging().allowPermittedSubclassesRemoval().build();
public static KeepClassInfo top() {
return TOP;
@@ -33,11 +35,13 @@
private final boolean allowRepackaging;
private final boolean checkEnumUnboxed;
+ private final boolean allowPermittedSubclassesRemoval;
private KeepClassInfo(Builder builder) {
super(builder);
this.allowRepackaging = builder.isRepackagingAllowed();
this.checkEnumUnboxed = builder.isCheckEnumUnboxedEnabled();
+ this.allowPermittedSubclassesRemoval = builder.isPermittedSubclassesRemovalAllowed();
}
@Override
@@ -58,6 +62,11 @@
return new Joiner(this);
}
+ public boolean isPermittedSubclassesRemovalAllowed(GlobalKeepInfoConfiguration configuration) {
+ return !configuration.isKeepPermittedSubclassesEnabled()
+ && internalIsPermittedSubclassesRemovalAllowed();
+ }
+
/**
* True if an item may be repackaged.
*
@@ -92,6 +101,10 @@
|| !getClassInfo.apply(kotlinMetadataClass.asProgramClass()).isShrinkingAllowed(options);
}
+ boolean internalIsPermittedSubclassesRemovalAllowed() {
+ return allowPermittedSubclassesRemoval;
+ }
+
@Override
public boolean isTop() {
return this.equals(top());
@@ -106,6 +119,7 @@
private boolean allowRepackaging;
private boolean checkEnumUnboxed;
+ private boolean allowPermittedSubclassesRemoval;
private Builder() {
super();
@@ -115,6 +129,7 @@
super(original);
allowRepackaging = original.internalIsRepackagingAllowed();
checkEnumUnboxed = original.internalIsCheckEnumUnboxedEnabled();
+ allowPermittedSubclassesRemoval = original.internalIsPermittedSubclassesRemovalAllowed();
}
// Check enum unboxed.
@@ -153,6 +168,23 @@
return setCheckEnumUnboxed(false);
}
+ public Builder allowPermittedSubclassesRemoval() {
+ return setAllowPermittedSubclassesRemoval(true);
+ }
+
+ public boolean isPermittedSubclassesRemovalAllowed() {
+ return allowPermittedSubclassesRemoval;
+ }
+
+ private Builder setAllowPermittedSubclassesRemoval(boolean allowPermittedSubclassesRemoval) {
+ this.allowPermittedSubclassesRemoval = allowPermittedSubclassesRemoval;
+ return self();
+ }
+
+ public Builder disallowPermittedSubclassesRemoval() {
+ return setAllowPermittedSubclassesRemoval(false);
+ }
+
@Override
public KeepClassInfo getTopInfo() {
return TOP;
@@ -177,7 +209,9 @@
boolean internalIsEqualTo(KeepClassInfo other) {
return super.internalIsEqualTo(other)
&& isRepackagingAllowed() == other.internalIsRepackagingAllowed()
- && isCheckEnumUnboxedEnabled() == other.internalIsCheckEnumUnboxedEnabled();
+ && isCheckEnumUnboxedEnabled() == other.internalIsCheckEnumUnboxedEnabled()
+ && isPermittedSubclassesRemovalAllowed()
+ == other.internalIsPermittedSubclassesRemovalAllowed();
}
@Override
@@ -187,12 +221,18 @@
@Override
public Builder makeTop() {
- return super.makeTop().unsetCheckEnumUnboxed().disallowRepackaging();
+ return super.makeTop()
+ .unsetCheckEnumUnboxed()
+ .disallowRepackaging()
+ .disallowPermittedSubclassesRemoval();
}
@Override
public Builder makeBottom() {
- return super.makeBottom().unsetCheckEnumUnboxed().allowRepackaging();
+ return super.makeBottom()
+ .unsetCheckEnumUnboxed()
+ .allowRepackaging()
+ .allowPermittedSubclassesRemoval();
}
}
@@ -212,6 +252,11 @@
return self();
}
+ public Joiner disallowPermittedSubclassesRemoval() {
+ builder.disallowPermittedSubclassesRemoval();
+ return self();
+ }
+
@Override
public Joiner asClassJoiner() {
return this;
@@ -222,7 +267,10 @@
// Should be extended to merge the fields of this class in case any are added.
return super.merge(joiner)
.applyIf(joiner.builder.isCheckEnumUnboxedEnabled(), Joiner::setCheckEnumUnboxed)
- .applyIf(!joiner.builder.isRepackagingAllowed(), Joiner::disallowRepackaging);
+ .applyIf(!joiner.builder.isRepackagingAllowed(), Joiner::disallowRepackaging)
+ .applyIf(
+ !joiner.builder.isPermittedSubclassesRemovalAllowed(),
+ Joiner::disallowPermittedSubclassesRemoval);
}
@Override
diff --git a/src/main/java/com/android/tools/r8/shaking/KeepInfo.java b/src/main/java/com/android/tools/r8/shaking/KeepInfo.java
index 092f4ea..fc0ec2d 100644
--- a/src/main/java/com/android/tools/r8/shaking/KeepInfo.java
+++ b/src/main/java/com/android/tools/r8/shaking/KeepInfo.java
@@ -18,6 +18,7 @@
public abstract class KeepInfo<B extends Builder<B, K>, K extends KeepInfo<B, K>> {
private final boolean allowAccessModification;
+ private final boolean allowAccessModificationForTesting;
private final boolean allowAnnotationRemoval;
private final boolean allowMinification;
private final boolean allowOptimization;
@@ -27,6 +28,7 @@
private KeepInfo(
boolean allowAccessModification,
+ boolean allowAccessModificationForTesting,
boolean allowAnnotationRemoval,
boolean allowMinification,
boolean allowOptimization,
@@ -34,6 +36,7 @@
boolean allowSignatureRemoval,
boolean checkDiscarded) {
this.allowAccessModification = allowAccessModification;
+ this.allowAccessModificationForTesting = allowAccessModificationForTesting;
this.allowAnnotationRemoval = allowAnnotationRemoval;
this.allowMinification = allowMinification;
this.allowOptimization = allowOptimization;
@@ -45,6 +48,7 @@
KeepInfo(B builder) {
this(
builder.isAccessModificationAllowed(),
+ builder.isAccessModificationAllowedForTesting(),
builder.isAnnotationRemovalAllowed(),
builder.isMinificationAllowed(),
builder.isOptimizationAllowed(),
@@ -171,6 +175,15 @@
return allowAccessModification;
}
+ public boolean isAccessModificationAllowedForTesting(GlobalKeepInfoConfiguration configuration) {
+ return internalIsAccessModificationAllowedForTesting();
+ }
+
+ // Internal accessor for the items access-modification bit.
+ boolean internalIsAccessModificationAllowedForTesting() {
+ return allowAccessModificationForTesting;
+ }
+
public boolean isEnclosingMethodAttributeRemovalAllowed(
GlobalKeepInfoConfiguration configuration,
EnclosingMethodAttribute enclosingMethodAttribute,
@@ -213,6 +226,8 @@
// An item is less, aka, lower in the lattice, if each of its attributes is at least as
// permissive of that on other.
return (allowAccessModification || !other.internalIsAccessModificationAllowed())
+ && (allowAccessModificationForTesting
+ || !other.internalIsAccessModificationAllowedForTesting())
&& (allowAnnotationRemoval || !other.internalIsAnnotationRemovalAllowed())
&& (allowMinification || !other.internalIsMinificationAllowed())
&& (allowOptimization || !other.internalIsOptimizationAllowed())
@@ -236,6 +251,7 @@
protected K original;
private boolean allowAccessModification;
+ private boolean allowAccessModificationForTesting;
private boolean allowAnnotationRemoval;
private boolean allowMinification;
private boolean allowOptimization;
@@ -250,6 +266,7 @@
Builder(K original) {
this.original = original;
allowAccessModification = original.internalIsAccessModificationAllowed();
+ allowAccessModificationForTesting = original.internalIsAccessModificationAllowedForTesting();
allowAnnotationRemoval = original.internalIsAnnotationRemovalAllowed();
allowMinification = original.internalIsMinificationAllowed();
allowOptimization = original.internalIsOptimizationAllowed();
@@ -260,6 +277,7 @@
B makeTop() {
disallowAccessModification();
+ disallowAccessModificationForTesting();
disallowAnnotationRemoval();
disallowMinification();
disallowOptimization();
@@ -271,6 +289,7 @@
B makeBottom() {
allowAccessModification();
+ allowAccessModificationForTesting();
allowAnnotationRemoval();
allowMinification();
allowOptimization();
@@ -297,6 +316,8 @@
boolean internalIsEqualTo(K other) {
return isAccessModificationAllowed() == other.internalIsAccessModificationAllowed()
+ && isAccessModificationAllowedForTesting()
+ == other.internalIsAccessModificationAllowedForTesting()
&& isAnnotationRemovalAllowed() == other.internalIsAnnotationRemovalAllowed()
&& isMinificationAllowed() == other.internalIsMinificationAllowed()
&& isOptimizationAllowed() == other.internalIsOptimizationAllowed()
@@ -309,6 +330,10 @@
return allowAccessModification;
}
+ public boolean isAccessModificationAllowedForTesting() {
+ return allowAccessModificationForTesting;
+ }
+
public boolean isAnnotationRemovalAllowed() {
return allowAnnotationRemoval;
}
@@ -398,6 +423,19 @@
return setAllowAccessModification(false);
}
+ public B setAllowAccessModificationForTesting(boolean allowAccessModificationForTesting) {
+ this.allowAccessModificationForTesting = allowAccessModificationForTesting;
+ return self();
+ }
+
+ public B allowAccessModificationForTesting() {
+ return setAllowAccessModificationForTesting(true);
+ }
+
+ public B disallowAccessModificationForTesting() {
+ return setAllowAccessModificationForTesting(false);
+ }
+
public B setAllowAnnotationRemoval(boolean allowAnnotationRemoval) {
this.allowAnnotationRemoval = allowAnnotationRemoval;
return self();
@@ -524,6 +562,11 @@
return self();
}
+ public J disallowAccessModificationForTesting() {
+ builder.disallowAccessModificationForTesting();
+ return self();
+ }
+
public J disallowAnnotationRemoval() {
builder.disallowAnnotationRemoval();
return self();
@@ -557,6 +600,9 @@
public J merge(J joiner) {
Builder<B, K> builder = joiner.builder;
applyIf(!builder.isAccessModificationAllowed(), Joiner::disallowAccessModification);
+ applyIf(
+ !builder.isAccessModificationAllowedForTesting(),
+ Joiner::disallowAccessModificationForTesting);
applyIf(!builder.isAnnotationRemovalAllowed(), Joiner::disallowAnnotationRemoval);
applyIf(!builder.isMinificationAllowed(), Joiner::disallowMinification);
applyIf(!builder.isOptimizationAllowed(), Joiner::disallowOptimization);
diff --git a/src/main/java/com/android/tools/r8/shaking/ProguardKeepAttributes.java b/src/main/java/com/android/tools/r8/shaking/ProguardKeepAttributes.java
index e47ff67..19a6946 100644
--- a/src/main/java/com/android/tools/r8/shaking/ProguardKeepAttributes.java
+++ b/src/main/java/com/android/tools/r8/shaking/ProguardKeepAttributes.java
@@ -31,6 +31,7 @@
public static final String RUNTIME_INVISIBLE_TYPE_ANNOTATIONS =
"RuntimeInvisibleTypeAnnotations";
public static final String ANNOTATION_DEFAULT = "AnnotationDefault";
+ public static final String PERMITTED_SUBCLASSES = "PermittedSubclasses";
public static final String STACK_MAP_TABLE = "StackMapTable";
public static final List<String> KEEP_ALL = ImmutableList.of("*");
@@ -54,6 +55,7 @@
public boolean runtimeInvisibleTypeAnnotations = false;
public boolean annotationDefault = false;
public boolean stackMapTable = false;
+ public boolean permittedSubclasses = false;
private ProguardKeepAttributes() {
}
@@ -138,6 +140,7 @@
RUNTIME_INVISIBLE_TYPE_ANNOTATIONS, patterns);
annotationDefault = update(annotationDefault, ANNOTATION_DEFAULT, patterns);
stackMapTable = update(stackMapTable, STACK_MAP_TABLE, patterns);
+ permittedSubclasses = update(permittedSubclasses, PERMITTED_SUBCLASSES, patterns);
}
public void ensureValid(boolean forceProguardCompatibility) {
@@ -189,7 +192,8 @@
&& this.runtimeVisibleTypeAnnotations == other.runtimeVisibleTypeAnnotations
&& this.runtimeInvisibleTypeAnnotations == other.runtimeInvisibleTypeAnnotations
&& this.annotationDefault == other.annotationDefault
- && this.stackMapTable == other.stackMapTable;
+ && this.stackMapTable == other.stackMapTable
+ && this.permittedSubclasses == other.permittedSubclasses;
}
@Override
@@ -209,7 +213,8 @@
+ (this.runtimeInvisibleTypeAnnotations ? 1 << 12 : 0)
+ (this.annotationDefault ? 1 << 13 : 0)
+ (this.stackMapTable ? 1 << 14 : 0)
- + (this.methodParameters ? 1 << 15 : 0);
+ + (this.methodParameters ? 1 << 15 : 0)
+ + (this.permittedSubclasses ? 1 << 16 : 0);
}
public boolean isEmpty() {
@@ -228,7 +233,8 @@
&& !runtimeVisibleTypeAnnotations
&& !runtimeInvisibleTypeAnnotations
&& !annotationDefault
- && !stackMapTable;
+ && !stackMapTable
+ && !permittedSubclasses;
}
public StringBuilder append(StringBuilder builder) {
@@ -281,6 +287,9 @@
if (stackMapTable) {
attributes.add(STACK_MAP_TABLE);
}
+ if (permittedSubclasses) {
+ attributes.add(PERMITTED_SUBCLASSES);
+ }
if (attributes.size() > 0) {
builder.append("-keepattributes ");
diff --git a/src/main/java/com/android/tools/r8/shaking/RootSetUtils.java b/src/main/java/com/android/tools/r8/shaking/RootSetUtils.java
index 367a2fc..8678717 100644
--- a/src/main/java/com/android/tools/r8/shaking/RootSetUtils.java
+++ b/src/main/java/com/android/tools/r8/shaking/RootSetUtils.java
@@ -385,6 +385,8 @@
}
appView.withGeneratedMessageLiteShrinker(
shrinker -> shrinker.extendRootSet(dependentMinimumKeepInfo));
+ appView.withGeneratedMessageLiteBuilderShrinker(
+ shrinker -> shrinker.extendRootSet(dependentMinimumKeepInfo));
if (appView.options().protoShrinking().enableGeneratedMessageLiteBuilderShrinking) {
GeneratedMessageLiteBuilderShrinker.addInliningHeuristicsForBuilderInlining(
appView,
@@ -1236,7 +1238,7 @@
assert item.isProgramDefinition();
dependentMinimumKeepInfo
.getOrCreateUnconditionalMinimumKeepInfoFor(item.getReference())
- .disallowAccessModification();
+ .disallowAccessModificationForTesting();
context.markAsUsed();
} else if (context instanceof NoFieldTypeStrengtheningRule) {
assert item.isProgramField();
diff --git a/src/main/java/com/android/tools/r8/shaking/VerticalClassMerger.java b/src/main/java/com/android/tools/r8/shaking/VerticalClassMerger.java
index a7106fc..4ad6ef2 100644
--- a/src/main/java/com/android/tools/r8/shaking/VerticalClassMerger.java
+++ b/src/main/java/com/android/tools/r8/shaking/VerticalClassMerger.java
@@ -393,11 +393,7 @@
// before merging [clazz] into its subtype.
private boolean isStillMergeCandidate(DexProgramClass sourceClass, DexProgramClass targetClass) {
assert isMergeCandidate(sourceClass, targetClass, pinnedTypes);
- if (mergedClasses.containsValue(sourceClass.getType())) {
- // Do not allow merging the resulting class into its subclass.
- // TODO(christofferqa): Get rid of this limitation.
- return false;
- }
+ assert !mergedClasses.containsValue(sourceClass.getType());
// For interface types, this is more complicated, see:
// https://docs.oracle.com/javase/specs/jvms/se9/html/jvms-5.html#jvms-5.5
// We basically can't move the clinit, since it is not called when implementing classes have
@@ -447,13 +443,14 @@
}
private boolean mergeMayLeadToIllegalAccesses(DexProgramClass source, DexProgramClass target) {
- if (source.type.isSamePackage(target.type)) {
+ if (source.isSamePackage(target)) {
// When merging two classes from the same package, we only need to make sure that [source]
// does not get less visible, since that could make a valid access to [source] from another
// package illegal after [source] has been merged into [target].
- int accessLevel = source.isPrivate() ? 0 : (source.isPublic() ? 2 : 1);
- int otherAccessLevel = target.isPrivate() ? 0 : (target.isPublic() ? 2 : 1);
- return accessLevel > otherAccessLevel;
+ assert source.getAccessFlags().isPackagePrivateOrPublic();
+ assert target.getAccessFlags().isPackagePrivateOrPublic();
+ // TODO(b/287891322): Allow merging if `source` is only accessed from inside its own package.
+ return source.getAccessFlags().isPublic() && target.getAccessFlags().isPackagePrivate();
}
// Check that all accesses to [source] and its members from inside the current package of
@@ -801,12 +798,12 @@
DexType singleSubtype = subtypingInfo.getSingleDirectSubtype(clazz.type);
DexProgramClass targetClass = appView.definitionFor(singleSubtype).asProgramClass();
- assert isMergeCandidate(clazz, targetClass, pinnedTypes);
assert !mergedClasses.containsKey(targetClass.type);
-
- boolean clazzOrTargetClassHasBeenMerged =
- mergedClasses.containsValue(clazz.type) || mergedClasses.containsValue(targetClass.type);
- if (clazzOrTargetClassHasBeenMerged) {
+ if (mergedClasses.containsValue(clazz.type)) {
+ return;
+ }
+ assert isMergeCandidate(clazz, targetClass, pinnedTypes);
+ if (mergedClasses.containsValue(targetClass.type)) {
if (!isStillMergeCandidate(clazz, targetClass)) {
return;
}
@@ -907,7 +904,11 @@
DexEncodedMethod definition = directMethod.getDefinition();
if (definition.isInstanceInitializer()) {
DexEncodedMethod resultingConstructor =
- renameConstructor(definition, availableMethodSignatures);
+ renameConstructor(
+ definition,
+ candidate ->
+ availableMethodSignatures.test(candidate)
+ && source.lookupVirtualMethod(candidate) == null);
add(directMethods, resultingConstructor, MethodSignatureEquivalence.get());
blockRedirectionOfSuperCalls(resultingConstructor.getReference());
} else {
diff --git a/src/main/java/com/android/tools/r8/utils/DescriptorUtils.java b/src/main/java/com/android/tools/r8/utils/DescriptorUtils.java
index 19b4d38..df0ac25 100644
--- a/src/main/java/com/android/tools/r8/utils/DescriptorUtils.java
+++ b/src/main/java/com/android/tools/r8/utils/DescriptorUtils.java
@@ -740,7 +740,8 @@
* @param innerDescriptor the inner descriptor, such as Lfoo/bar/Baz$Qux;
* @return the inner name or null, i.e. Qux in the example above
*/
- public static String getInnerClassName(String outerDescriptor, String innerDescriptor) {
+ public static String getInnerClassNameFromDescriptor(
+ String outerDescriptor, String innerDescriptor) {
if (innerDescriptor.length() <= outerDescriptor.length()) {
return null;
}
@@ -752,6 +753,18 @@
return null;
}
+ public static String getInnerClassNameFromSimpleName(
+ String outerSimpleName, String innerSimpleName) {
+ if (innerSimpleName.length() <= outerSimpleName.length()) {
+ return null;
+ }
+ String prefix = outerSimpleName + INNER_CLASS_SEPARATOR;
+ if (innerSimpleName.startsWith(prefix)) {
+ return innerSimpleName.substring(prefix.length());
+ }
+ return null;
+ }
+
public static class ModuleAndDescriptor {
private final String module;
private final String descriptor;
diff --git a/src/main/java/com/android/tools/r8/utils/InternalOptions.java b/src/main/java/com/android/tools/r8/utils/InternalOptions.java
index 6ef1691..c284670 100644
--- a/src/main/java/com/android/tools/r8/utils/InternalOptions.java
+++ b/src/main/java/com/android/tools/r8/utils/InternalOptions.java
@@ -828,6 +828,12 @@
return proguardConfiguration.getKeepAttributes().runtimeInvisibleTypeAnnotations;
}
+ @Override
+ public boolean isKeepPermittedSubclassesEnabled() {
+ return proguardConfiguration == null
+ || proguardConfiguration.getKeepAttributes().permittedSubclasses;
+ }
+
/**
* If any non-static class merging is enabled, information about types referred to by instanceOf
* and check cast instructions needs to be collected.
@@ -1693,9 +1699,11 @@
if (simpleInliningInstructionLimit >= 0) {
return simpleInliningInstructionLimit;
}
- // Allow 2 instructions when using LIR regardless of backend.
+ // Allow 4 instructions when using LIR regardless of backend.
if (options.testing.useLir) {
- return 2;
+ // TODO(b/288226522): We should reevaluate this for size and other inputs as it regresses
+ // compared to DEX code with limit 5. This is set to 4 to avoid discard errors in chrome.
+ return 4;
}
// Allow 3 instructions when generating to class files.
if (options.isGeneratingClassFiles()) {
@@ -2097,9 +2105,39 @@
}
public boolean canUseLir(AppView<?> appView) {
- return useLir
- && appView.enableWholeProgramOptimizations()
- && !appView.options().protoShrinking().isProtoShrinkingEnabled();
+ return useLir && appView.enableWholeProgramOptimizations();
+ }
+
+ // As part of integrating LIR the compiler is split in three phases: pre, supported, and post.
+ // Any attempt at building IR must have conversion options consistent with the active phase.
+ private enum LirPhase {
+ PRE,
+ SUPPORTED,
+ POST
+ }
+
+ private LirPhase currentPhase = LirPhase.PRE;
+
+ public void enterLirSupportedPhase() {
+ assert isPreLirPhase();
+ currentPhase = LirPhase.SUPPORTED;
+ }
+
+ public void exitLirSupportedPhase() {
+ assert isSupportedLirPhase();
+ currentPhase = LirPhase.POST;
+ }
+
+ public boolean isPreLirPhase() {
+ return currentPhase == LirPhase.PRE;
+ }
+
+ public boolean isSupportedLirPhase() {
+ return currentPhase == LirPhase.SUPPORTED;
+ }
+
+ public boolean isPostLirPhase() {
+ return currentPhase == LirPhase.POST;
}
// If false, use the desugared library implementation when desugared library is enabled.
@@ -2218,7 +2256,6 @@
*/
public boolean addCallEdgesForLibraryInvokes = false;
- public boolean allowCheckDiscardedErrors = false;
public boolean allowClassInliningOfSynthetics = true;
public boolean allowInjectedAnnotationMethods = false;
public boolean allowInliningOfSynthetics = true;
@@ -2256,7 +2293,8 @@
public BiConsumer<IRCode, AppView<?>> irModifier = null;
public Consumer<IRCode> inlineeIrModifier = null;
public int basicBlockMuncherIterationLimit = NO_LIMIT;
- public boolean dontReportFailingCheckDiscarded = false;
+ public boolean dontReportFailingCheckDiscarded =
+ System.getProperty("com.android.tools.r8.testing.dontReportFailingCheckDiscarded") != null;
public boolean disableRecordApplicationReaderMap = false;
public boolean trackDesugaredAPIConversions =
System.getProperty("com.android.tools.r8.trackDesugaredAPIConversions") != null;
diff --git a/src/main/java/com/android/tools/r8/utils/positions/MappedPositionToClassNameMapperBuilder.java b/src/main/java/com/android/tools/r8/utils/positions/MappedPositionToClassNameMapperBuilder.java
index 54efc7d..7fe3d32 100644
--- a/src/main/java/com/android/tools/r8/utils/positions/MappedPositionToClassNameMapperBuilder.java
+++ b/src/main/java/com/android/tools/r8/utils/positions/MappedPositionToClassNameMapperBuilder.java
@@ -79,6 +79,7 @@
PositionRangeAllocator.createCardinalPositionRangeAllocator();
private final NonCardinalPositionRangeAllocator nonCardinalRangeCache =
PositionRangeAllocator.createNonCardinalPositionRangeAllocator();
+ private final int maxGap = 1000;
private MappedPositionToClassNameMapperBuilder(
AppView<?> appView, OriginalSourceFiles originalSourceFiles) {
@@ -301,7 +302,7 @@
MappedPosition currentMappedPosition = mappedPositions.get(j);
mappedPositionRange =
mappedPositionRange.canAddNextMappingToRange(
- lastMappedPosition, currentMappedPosition);
+ lastMappedPosition, currentMappedPosition, maxGap);
// Note that currentPosition.caller and lastPosition.class must be deep-compared since
// multiple inlining passes lose the canonical property of the positions.
Position currentPosition = currentMappedPosition.getPosition();
@@ -538,7 +539,7 @@
}
public MappedPositionRange canAddNextMappingToRange(
- MappedPosition lastPosition, MappedPosition currentPosition) {
+ MappedPosition lastPosition, MappedPosition currentPosition, int maxGap) {
if (isOutOfRange()) {
return this;
}
@@ -562,10 +563,12 @@
// We cannot recover a delta encoding if we have had range to single encoding.
return OUT_OF_RANGE;
}
+ int gap = currentPosition.getObfuscatedLine() - lastPosition.getObfuscatedLine();
+ boolean gapLessThanMaxGap = gap >= 0 && gap <= maxGap;
boolean sameDelta =
currentOriginalLine - lastOriginalLine
== currentPosition.getObfuscatedLine() - lastPosition.getObfuscatedLine();
- return sameDelta ? SAME_DELTA : OUT_OF_RANGE;
+ return (gapLessThanMaxGap && sameDelta) ? SAME_DELTA : OUT_OF_RANGE;
}
}
diff --git a/src/test/examples/classmerging/ConflictInGeneratedNameTest.java b/src/test/examples/classmerging/ConflictInGeneratedNameTest.java
index 528f9bf..e76a8e3 100644
--- a/src/test/examples/classmerging/ConflictInGeneratedNameTest.java
+++ b/src/test/examples/classmerging/ConflictInGeneratedNameTest.java
@@ -51,6 +51,7 @@
}
// There is a private method in B with the same name as this one.
+ @NoAccessModification
private String getName() {
return name;
}
@@ -101,10 +102,12 @@
super.boo();
}
+ @NoAccessModification
private void boo$classmerging$ConflictInGeneratedNameTest$A() {
print("In B.boo$classmerging$ConflictInGeneratedNameTest$A()");
}
+ @NoAccessModification
private String getName() {
return name;
}
diff --git a/src/test/examples/classmerging/NoAccessModification.java b/src/test/examples/classmerging/NoAccessModification.java
new file mode 100644
index 0000000..b78d447
--- /dev/null
+++ b/src/test/examples/classmerging/NoAccessModification.java
@@ -0,0 +1,10 @@
+// Copyright (c) 2023, 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 classmerging;
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Target;
+
+@Target({ElementType.METHOD, ElementType.TYPE})
+public @interface NoAccessModification {}
diff --git a/src/test/examples/classmerging/SimpleInterfaceAccessTest.java b/src/test/examples/classmerging/SimpleInterfaceAccessTest.java
index 804b4ed..56095b5 100644
--- a/src/test/examples/classmerging/SimpleInterfaceAccessTest.java
+++ b/src/test/examples/classmerging/SimpleInterfaceAccessTest.java
@@ -45,6 +45,7 @@
void bar();
}
+ @NoAccessModification
private static class OtherSimpleInterfaceImpl implements OtherSimpleInterface {
@Override
diff --git a/src/test/examples/classmerging/keep-rules.txt b/src/test/examples/classmerging/keep-rules.txt
index 8b87740..316bf73 100644
--- a/src/test/examples/classmerging/keep-rules.txt
+++ b/src/test/examples/classmerging/keep-rules.txt
@@ -73,5 +73,7 @@
@classmerging.NeverInline <methods>;
}
-neverpropagatevalue class * { @classmerging.NeverPropagateValue *; }
+-noaccessmodification @classmerging.NoAccessModification class *
+-noaccessmodification class * { @classmerging.NoAccessModification *; }
-nohorizontalclassmerging @classmerging.NoHorizontalClassMerging class *
-noredundantfieldloadelimination class * { @classmerging.NoRedundantFieldLoadElimination *; }
diff --git a/src/test/examples/classmerging/pkg/SimpleInterfaceImplRetriever.java b/src/test/examples/classmerging/pkg/SimpleInterfaceImplRetriever.java
index 22391e9..63ae103 100644
--- a/src/test/examples/classmerging/pkg/SimpleInterfaceImplRetriever.java
+++ b/src/test/examples/classmerging/pkg/SimpleInterfaceImplRetriever.java
@@ -4,6 +4,7 @@
package classmerging.pkg;
+import classmerging.NoAccessModification;
import classmerging.SimpleInterfaceAccessTest.SimpleInterface;
public class SimpleInterfaceImplRetriever {
@@ -15,6 +16,7 @@
// This class is intentionally marked private. It is not possible to merge the interface
// SimpleInterface into SimpleInterfaceImpl, since this would lead to an illegal class access
// in SimpleInterfaceAccessTest.
+ @NoAccessModification
private static class SimpleInterfaceImpl implements SimpleInterface {
@Override
diff --git a/src/test/examples/inlining/InlineConstructor.java b/src/test/examples/inlining/InlineConstructor.java
index 09973fd..87d3a1d 100644
--- a/src/test/examples/inlining/InlineConstructor.java
+++ b/src/test/examples/inlining/InlineConstructor.java
@@ -3,6 +3,7 @@
// BSD-style license that can be found in the LICENSE file.
package inlining;
+@NoHorizontalClassMerging
class InlineConstructor {
int a;
diff --git a/src/test/examples/inlining/keep-rules-discard.txt b/src/test/examples/inlining/keep-rules-discard.txt
index 1021e5d..6f93c15 100644
--- a/src/test/examples/inlining/keep-rules-discard.txt
+++ b/src/test/examples/inlining/keep-rules-discard.txt
@@ -20,3 +20,5 @@
-neverinline class * {
@inlining.NeverInline <methods>;
}
+
+-nohorizontalclassmerging @inlining.NoHorizontalClassMerging class *
diff --git a/src/test/examples/memberrebinding2/NoAccessModification.java b/src/test/examples/memberrebinding2/NoAccessModification.java
new file mode 100644
index 0000000..0feebb6
--- /dev/null
+++ b/src/test/examples/memberrebinding2/NoAccessModification.java
@@ -0,0 +1,10 @@
+// Copyright (c) 2023, 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 memberrebinding2;
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Target;
+
+@Target({ElementType.TYPE})
+public @interface NoAccessModification {}
diff --git a/src/test/examples/memberrebinding2/keep-rules.txt b/src/test/examples/memberrebinding2/keep-rules.txt
index ae40c43..b405146 100644
--- a/src/test/examples/memberrebinding2/keep-rules.txt
+++ b/src/test/examples/memberrebinding2/keep-rules.txt
@@ -9,4 +9,6 @@
}
# Remove once b/62048823 is fixed.
--allowaccessmodification
\ No newline at end of file
+-allowaccessmodification
+
+-noaccessmodification @memberrebinding2.NoAccessModification class *
diff --git a/src/test/examples/memberrebinding2/subpackage/PackagePrivateClass.java b/src/test/examples/memberrebinding2/subpackage/PackagePrivateClass.java
index 733776c..a8ab2c6 100644
--- a/src/test/examples/memberrebinding2/subpackage/PackagePrivateClass.java
+++ b/src/test/examples/memberrebinding2/subpackage/PackagePrivateClass.java
@@ -3,6 +3,9 @@
// BSD-style license that can be found in the LICENSE file.
package memberrebinding2.subpackage;
+import memberrebinding2.NoAccessModification;
+
+@NoAccessModification
abstract class PackagePrivateClass {
public static int staticField;
diff --git a/src/test/java/com/android/tools/r8/R8RunArtTestsTest.java b/src/test/java/com/android/tools/r8/R8RunArtTestsTest.java
index 802e714..6aa0a30 100644
--- a/src/test/java/com/android/tools/r8/R8RunArtTestsTest.java
+++ b/src/test/java/com/android/tools/r8/R8RunArtTestsTest.java
@@ -463,37 +463,38 @@
"1337-gc-coverage"
);
- private static List<String> expectedToFailRunWithArtNonDefault = ImmutableList.of(
- // Fails due to missing symbol, jni tests, fails on non-R8/D8 run.
- "004-JniTest",
- "004-SignalTest",
- "004-ThreadStress",
- "004-UnsafeTest",
- "044-proxy",
- "051-thread",
- "136-daemon-jni-shutdown",
- "139-register-natives",
- "148-multithread-gc-annotations",
- "149-suspend-all-stress",
- "154-gc-loop",
- "155-java-set-resolved-type",
- "157-void-class",
- "158-app-image-class-table",
- "466-get-live-vreg",
- "497-inlining-and-class-loader",
- "566-polymorphic-inlining",
- "596-app-images",
- "616-cha",
- "616-cha-abstract",
- "616-cha-regression-proxy-method",
- "616-cha-native",
- "626-set-resolved-string",
- "629-vdex-speed",
- "1337-gc-coverage",
+ private static List<String> expectedToFailRunWithArtNonDefault =
+ ImmutableList.of(
+ // Fails due to missing symbol, jni tests, fails on non-R8/D8 run.
+ "004-JniTest",
+ "004-SignalTest",
+ "004-ThreadStress",
+ "004-UnsafeTest",
+ "044-proxy",
+ "051-thread",
+ "136-daemon-jni-shutdown",
+ "139-register-natives",
+ "148-multithread-gc-annotations",
+ "149-suspend-all-stress",
+ "154-gc-loop",
+ "155-java-set-resolved-type",
+ "157-void-class",
+ "158-app-image-class-table",
+ "466-get-live-vreg",
+ "497-inlining-and-class-loader",
+ "566-polymorphic-inlining",
+ "537-checker-inline-and-unverified",
+ "596-app-images",
+ "616-cha",
+ "616-cha-abstract",
+ "616-cha-regression-proxy-method",
+ "616-cha-native",
+ "626-set-resolved-string",
+ "629-vdex-speed",
+ "1337-gc-coverage",
- // Fails on non-R8/D8 run
- "031-class-attributes"
- );
+ // Fails on non-R8/D8 run
+ "031-class-attributes");
private static Map<DexVm.Version, List<String>> expectedToFailRunWithArtVersion;
@@ -764,11 +765,12 @@
// by the program at runtime.
.put("005-annotations", TestCondition.match(TestCondition.D8_COMPILER))
// On Art 4.4.4 we have fewer refs than expected (except for d8 when compiled with dx).
- .put("072-precise-gc",
+ .put(
+ "072-precise-gc",
TestCondition.match(
- TestCondition.R8_COMPILER,
- TestCondition.runtimesUpTo(DexVm.Version.V4_4_4)))
- .put("072-precise-gc",
+ TestCondition.R8_COMPILER, TestCondition.runtimesUpTo(DexVm.Version.V4_4_4)))
+ .put(
+ "072-precise-gc",
TestCondition.match(
TestCondition.tools(DexTool.NONE),
TestCondition.D8_COMPILER,
@@ -779,16 +781,23 @@
.put("099-vmdebug", TestCondition.any())
// This test relies on output on stderr, which we currently do not collect.
.put("143-string-value", TestCondition.any())
- .put("800-smali",
+ .put(
+ "800-smali",
TestCondition.match(
TestCondition.D8_COMPILER,
TestCondition.runtimes(DexVm.Version.V5_1_1, DexVm.Version.V6_0_1)))
// Triggers regression test in 6.0.1 when using R8/D8 in debug mode.
- .put("474-fp-sub-neg",
+ .put(
+ "474-fp-sub-neg",
TestCondition.match(
TestCondition.tools(DexTool.NONE),
TestCondition.D8_NOT_AFTER_R8CF_COMPILER,
TestCondition.runtimes(DexVm.Version.V6_0_1)))
+ .put(
+ "536-checker-needs-access-check",
+ // DEX VMs incorrectly check access before checking null-value in instanceof.
+ // See IllegalAccessDeadInstanceOfTest and b/288376353.
+ TestCondition.anyDexVm())
.build();
private static final TestCondition beforeAndroidN =
@@ -1168,12 +1177,34 @@
"958-methodhandle-stackframe",
"1338-gc-no-los");
+ private static final String NO_CLASS_ACCESS_MODIFICATION_RULE =
+ "-keep,allowobfuscation,allowoptimization,allowshrinking class *";
+ private static final String NO_MEMBER_ACCESS_MODIFICATION_RULE =
+ "-keepclassmembers,allowobfuscation,allowoptimization,allowshrinking class * { *; }";
+
private static Map<String, List<String>> keepRules =
ImmutableMap.of(
+ "005-annotations",
+ ImmutableList.of(NO_MEMBER_ACCESS_MODIFICATION_RULE),
"021-string2",
ImmutableList.of("-dontwarn junit.framework.**"),
+ "042-new-instance",
+ ImmutableList.of(NO_MEMBER_ACCESS_MODIFICATION_RULE),
+ "046-reflect",
+ ImmutableList.of(NO_MEMBER_ACCESS_MODIFICATION_RULE),
+ "064-field-access",
+ ImmutableList.of(NO_MEMBER_ACCESS_MODIFICATION_RULE),
"082-inline-execute",
ImmutableList.of("-dontwarn junit.framework.**"),
+ "100-reflect2",
+ ImmutableList.of(NO_CLASS_ACCESS_MODIFICATION_RULE),
+ "301-abstract-protected",
+ ImmutableList.of(
+ "-keepclassmembers,allowobfuscation,allowoptimization,allowshrinking class Abstract {"
+ + " protected abstract java.lang.String m();"
+ + "}"),
+ "435-new-instance",
+ ImmutableList.of(NO_CLASS_ACCESS_MODIFICATION_RULE),
// Constructor MakeBoundType.<init>(int) is called using reflection.
"476-checker-ctor-fence-redun-elim",
ImmutableList.of(
@@ -1566,6 +1597,7 @@
if (configuration != null) {
configuration.accept(options);
}
+ options.getAccessModifierOptions().setForceModifyPackagePrivateAndProtectedMethods(false);
}
@Override
diff --git a/src/test/java/com/android/tools/r8/TestBase.java b/src/test/java/com/android/tools/r8/TestBase.java
index 35eb6dd..ec3a345 100644
--- a/src/test/java/com/android/tools/r8/TestBase.java
+++ b/src/test/java/com/android/tools/r8/TestBase.java
@@ -1757,6 +1757,11 @@
&& parameters.getApiLevel().isGreaterThanOrEqualTo(AndroidApiLevel.N);
}
+ // TODO(b/131130038): Do not allow accessmodification when kept.
+ public boolean isForceAccessModifyingPackagePrivateAndProtectedMethods() {
+ return true;
+ }
+
public Path compileToZip(
TestParameters parameters, Collection<Class<?>> classPath, Class<?>... compilationUnit)
throws Exception {
diff --git a/src/test/java/com/android/tools/r8/TestParameters.java b/src/test/java/com/android/tools/r8/TestParameters.java
index c792710..76f237b 100644
--- a/src/test/java/com/android/tools/r8/TestParameters.java
+++ b/src/test/java/com/android/tools/r8/TestParameters.java
@@ -120,6 +120,14 @@
return isDexRuntime() && getApiLevel().isGreaterThanOrEqualTo(AndroidApiLevel.U);
}
+ public boolean isAccessModificationEnabled(boolean allowAccessModification) {
+ return allowAccessModification || isAccessModificationEnabledByDefault();
+ }
+
+ public boolean isAccessModificationEnabledByDefault() {
+ return true;
+ }
+
public boolean runtimeWithClassValue() {
assert isCfRuntime() || isDexRuntime();
return isCfRuntime() || getDexRuntimeVersion().isNewerThanOrEqual(DexVm.Version.V14_0_0);
diff --git a/src/test/java/com/android/tools/r8/TestShrinkerBuilder.java b/src/test/java/com/android/tools/r8/TestShrinkerBuilder.java
index cfd2a95..f27b3b8 100644
--- a/src/test/java/com/android/tools/r8/TestShrinkerBuilder.java
+++ b/src/test/java/com/android/tools/r8/TestShrinkerBuilder.java
@@ -13,6 +13,7 @@
import com.android.tools.r8.utils.FileUtils;
import com.android.tools.r8.utils.OptionalBool;
import com.android.tools.r8.utils.StringUtils;
+import com.google.common.collect.ImmutableList;
import com.google.common.collect.Sets;
import java.io.IOException;
import java.lang.annotation.Annotation;
@@ -243,6 +244,24 @@
return self();
}
+ private final List<String> keepModifiers =
+ ImmutableList.of(
+ // TODO: Add allowannotationremoval (currently requires options.isTestingOptionsEnabled())
+ // TODO: Add (optional) allowshrinking as well?
+ "allowobfuscation", "allowoptimization", "allowrepackage");
+
+ public T addKeepPermittedSubclasses(Class<?>... classes) {
+ return addKeepPermittedSubclasses(
+ Arrays.stream(classes).map(Class::getTypeName).toArray(String[]::new));
+ }
+
+ public T addKeepPermittedSubclasses(String... classes) {
+ for (String clazz : classes) {
+ addKeepRules("-keep," + String.join(",", keepModifiers) + " class " + clazz);
+ }
+ return self();
+ }
+
public T addKeepClassAndMembersRules(Class<?>... classes) {
return addKeepClassAndMembersRules(
Arrays.stream(classes).map(Class::getTypeName).toArray(String[]::new));
@@ -446,6 +465,10 @@
return addKeepAttributes(ProguardKeepAttributes.RUNTIME_INVISIBLE_TYPE_ANNOTATIONS);
}
+ public T addKeepAttributePermittedSubclasses() {
+ return addKeepAttributes(ProguardKeepAttributes.PERMITTED_SUBCLASSES);
+ }
+
public T addKeepAllAttributes() {
return addKeepAttributes("*");
}
diff --git a/src/test/java/com/android/tools/r8/ToolHelper.java b/src/test/java/com/android/tools/r8/ToolHelper.java
index 069acbf..42b728e 100644
--- a/src/test/java/com/android/tools/r8/ToolHelper.java
+++ b/src/test/java/com/android/tools/r8/ToolHelper.java
@@ -101,16 +101,19 @@
}
public static String getProjectRoot() {
- String userDirProperty = System.getProperty("user.dir");
- if (userDirProperty.endsWith("d8_r8/test")) {
- return Paths.get(userDirProperty).getParent().getParent().toString() + "/";
+ String current = System.getProperty("user.dir");
+ if (!current.contains("test_modules")) {
+ return "";
}
- return "";
+ while (current.contains("test_modules")) {
+ current = Paths.get(current).getParent().toString();
+ }
+ return Paths.get(current).getParent().toString() + "/";
}
public static final String SOURCE_DIR = "src/main/java/";
public static final String RESOURCES_DIR = "src/main/resources/";
- public static final String BUILD_DIR = "build/";
+ public static final String BUILD_DIR = getProjectRoot() + "build/";
public static final String TEST_MODULE_DIR = getProjectRoot() + "d8_r8/test_modules/";
public static final String GENERATED_TEST_BUILD_DIR = BUILD_DIR + "generated/test/";
public static final String LIBS_DIR = BUILD_DIR + "libs/";
@@ -135,8 +138,7 @@
public static final String EXAMPLES_JAVA11_BUILD_DIR = BUILD_DIR + "classes/java/examplesJava11/";
public static final String EXAMPLES_PROTO_BUILD_DIR = TESTS_BUILD_DIR + "examplesProto/";
public static final String GENERATED_PROTO_BUILD_DIR = GENERATED_TEST_BUILD_DIR + "proto/";
- public static final String SMALI_DIR = TESTS_DIR + "smali/";
- public static final String SMALI_BUILD_DIR = TESTS_BUILD_DIR + "smali/";
+ public static final String SMALI_BUILD_DIR = THIRD_PARTY_DIR + "smali/";
public static final String JAVA_CLASSES_DIR = BUILD_DIR + "classes/java/";
public static final String JDK_11_TESTS_CLASSES_DIR = JAVA_CLASSES_DIR + "jdk11Tests/";
@@ -972,7 +974,7 @@
}
if (isLinux() || isMac()) {
// The Linux version is used on Mac, where it is run in a Docker container.
- return TOOLS_DIR + "/linux/" + dir;
+ return TOOLS_DIR + "linux/" + dir;
}
fail("Unsupported platform, we currently only support mac and linux: " + getPlatform());
return ""; //never here
@@ -1305,7 +1307,7 @@
public static Path getClassPathForTests() {
if (isNewGradleSetup()) {
- return Paths.get(TEST_MODULE_DIR, "tests_java_8", "build", "classes", "java", "main");
+ return Paths.get(TEST_MODULE_DIR, "tests_java_8", "build", "classes", "java", "test");
} else {
return Paths.get(BUILD_DIR, "classes", "java", "test");
}
diff --git a/src/test/java/com/android/tools/r8/accessrelaxation/AccessRelaxationByDefaultTest.java b/src/test/java/com/android/tools/r8/accessrelaxation/AccessRelaxationByDefaultTest.java
new file mode 100644
index 0000000..cf4b361
--- /dev/null
+++ b/src/test/java/com/android/tools/r8/accessrelaxation/AccessRelaxationByDefaultTest.java
@@ -0,0 +1,131 @@
+// Copyright (c) 2023, 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.accessrelaxation;
+
+import static com.android.tools.r8.utils.codeinspector.Matchers.isPresent;
+import static com.android.tools.r8.utils.codeinspector.Matchers.isPublic;
+import static com.android.tools.r8.utils.codeinspector.Matchers.onlyIf;
+import static org.hamcrest.CoreMatchers.not;
+import static org.hamcrest.MatcherAssert.assertThat;
+
+import com.android.tools.r8.NeverClassInline;
+import com.android.tools.r8.NeverInline;
+import com.android.tools.r8.NoHorizontalClassMerging;
+import com.android.tools.r8.NoVerticalClassMerging;
+import com.android.tools.r8.TestBase;
+import com.android.tools.r8.TestParameters;
+import com.android.tools.r8.TestParametersCollection;
+import com.android.tools.r8.utils.codeinspector.ClassSubject;
+import com.android.tools.r8.utils.codeinspector.MethodSubject;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.junit.runners.Parameterized;
+import org.junit.runners.Parameterized.Parameter;
+import org.junit.runners.Parameterized.Parameters;
+
+@RunWith(Parameterized.class)
+public class AccessRelaxationByDefaultTest extends TestBase {
+
+ @Parameter(0)
+ public TestParameters parameters;
+
+ @Parameters(name = "{0}")
+ public static TestParametersCollection data() {
+ return getTestParameters().withAllRuntimesAndApiLevels().build();
+ }
+
+ @Test
+ public void testR8() throws Exception {
+ runTest(false);
+ }
+
+ @Test
+ public void testR8Compat() throws Exception {
+ runTest(true);
+ }
+
+ private void runTest(boolean isCompat) throws Exception {
+ testForR8Compat(parameters.getBackend(), isCompat)
+ .addInnerClasses(getClass())
+ .addKeepMainRule(Main.class)
+ .addKeepClassRules(B.class)
+ .enableInliningAnnotations()
+ .enableNeverClassInliningAnnotations()
+ .enableNoHorizontalClassMergingAnnotations()
+ .enableNoVerticalClassMergingAnnotations()
+ .setMinApi(parameters)
+ .compile()
+ .inspect(
+ inspector -> {
+ ClassSubject aClassSubject = inspector.clazz(A.class);
+ assertThat(aClassSubject, isPresent());
+ assertThat(aClassSubject, onlyIf(!isCompat, isPublic())); // Always publicized.
+
+ MethodSubject fooMethodSubject = aClassSubject.uniqueMethodWithOriginalName("foo");
+ assertThat(fooMethodSubject, isPresent());
+ assertThat(
+ fooMethodSubject, onlyIf(parameters.isDexRuntime() && !isCompat, isPublic()));
+
+ ClassSubject bClassSubject = inspector.clazz(B.class);
+ assertThat(bClassSubject, isPresent());
+ assertThat(bClassSubject, not(isPublic())); // Kept, so never publicized.
+
+ MethodSubject barMethodSubject = bClassSubject.uniqueMethodWithOriginalName("bar");
+ assertThat(barMethodSubject, isPresent());
+ assertThat(
+ barMethodSubject, onlyIf(parameters.isDexRuntime() && !isCompat, isPublic()));
+
+ ClassSubject cClassSubject = inspector.clazz(C.class);
+ assertThat(cClassSubject, isPresent());
+ assertThat(cClassSubject, onlyIf(!isCompat, isPublic())); // Always publicized.
+
+ MethodSubject bazMethodSubject = cClassSubject.uniqueMethodWithOriginalName("baz");
+ assertThat(bazMethodSubject, isPresent());
+ assertThat(bazMethodSubject, onlyIf(!isCompat, isPublic())); // Always publicized.
+ })
+ .run(parameters.getRuntime(), Main.class)
+ .assertSuccessWithOutputLines("A.foo()", "B.bar()", "C.baz()");
+ }
+
+ static class Main {
+
+ public static void main(String[] args) {
+ new A().foo();
+ new B().bar();
+ new C().baz();
+ }
+ }
+
+ @NeverClassInline
+ @NoHorizontalClassMerging
+ @NoVerticalClassMerging
+ static class A {
+
+ @NeverInline
+ void foo() {
+ System.out.println("A.foo()");
+ }
+ }
+
+ // @Keep
+ @NeverClassInline
+ static class B extends A {
+
+ @NeverInline
+ void bar() {
+ System.out.println("B.bar()");
+ }
+ }
+
+ @NeverClassInline
+ @NoHorizontalClassMerging
+ static class C {
+
+ @NeverInline
+ void baz() {
+ System.out.println("C.baz()");
+ }
+ }
+}
diff --git a/src/test/java/com/android/tools/r8/accessrelaxation/EffectiveFinalFieldMarkedFinalTest.java b/src/test/java/com/android/tools/r8/accessrelaxation/EffectiveFinalFieldMarkedFinalTest.java
index d491189..364b35e 100644
--- a/src/test/java/com/android/tools/r8/accessrelaxation/EffectiveFinalFieldMarkedFinalTest.java
+++ b/src/test/java/com/android/tools/r8/accessrelaxation/EffectiveFinalFieldMarkedFinalTest.java
@@ -7,7 +7,6 @@
import static com.android.tools.r8.utils.codeinspector.Matchers.isFinal;
import static com.android.tools.r8.utils.codeinspector.Matchers.isPresent;
import static com.android.tools.r8.utils.codeinspector.Matchers.onlyIf;
-import static org.hamcrest.CoreMatchers.allOf;
import static org.hamcrest.MatcherAssert.assertThat;
import com.android.tools.r8.NoRedundantFieldLoadElimination;
@@ -51,11 +50,18 @@
ClassSubject mainClassSubject = inspector.clazz(Main.class);
assertThat(mainClassSubject, isPresent());
assertThat(
+ mainClassSubject.uniqueFieldWithOriginalName("instanceField"), isPresent());
+ assertThat(
mainClassSubject.uniqueFieldWithOriginalName("instanceField"),
- allOf(isPresent(), onlyIf(allowAccessModification, isFinal())));
+ onlyIf(
+ parameters.isAccessModificationEnabled(allowAccessModification)
+ && !parameters.canInitNewInstanceUsingSuperclassConstructor(),
+ isFinal()));
+ assertThat(mainClassSubject.uniqueFieldWithOriginalName("staticField"), isPresent());
assertThat(
mainClassSubject.uniqueFieldWithOriginalName("staticField"),
- allOf(isPresent(), onlyIf(allowAccessModification, isFinal())));
+ onlyIf(
+ parameters.isAccessModificationEnabled(allowAccessModification), isFinal()));
})
.run(parameters.getRuntime(), Main.class)
.assertSuccessWithOutputLines("Hello, world!");
diff --git a/src/test/java/com/android/tools/r8/accessrelaxation/PackagePrivateNonOverridePublicizerTest.java b/src/test/java/com/android/tools/r8/accessrelaxation/PackagePrivateNonOverridePublicizerTest.java
index f253c40..0d6d2ee 100644
--- a/src/test/java/com/android/tools/r8/accessrelaxation/PackagePrivateNonOverridePublicizerTest.java
+++ b/src/test/java/com/android/tools/r8/accessrelaxation/PackagePrivateNonOverridePublicizerTest.java
@@ -5,7 +5,7 @@
package com.android.tools.r8.accessrelaxation;
import static com.android.tools.r8.utils.codeinspector.Matchers.isPresent;
-import static org.hamcrest.CoreMatchers.not;
+import static com.android.tools.r8.utils.codeinspector.Matchers.notIf;
import static org.hamcrest.MatcherAssert.assertThat;
import com.android.tools.r8.NeverClassInline;
@@ -65,14 +65,15 @@
.assertSuccessWithOutputLines(EXPECTED)
.inspect(
inspector -> {
- ClassSubject clazz = inspector.clazz(ViewModel.class);
// ViewModel.clear() is package private. When we publicize the method, we can inline
// the clearBridge() into Main and thereby remove the ViewModel class entirely.
- if (allowAccessModification) {
- assertThat(clazz, not(isPresent()));
- } else {
- assertThat(clazz, isPresent());
- }
+ ClassSubject clazz = inspector.clazz(ViewModel.class);
+ assertThat(
+ clazz,
+ notIf(
+ isPresent(),
+ allowAccessModification
+ || parameters.isAccessModificationEnabledByDefault()));
});
}
diff --git a/src/test/java/com/android/tools/r8/apimodel/ApiModelFieldAssignNewInstanceTest.java b/src/test/java/com/android/tools/r8/apimodel/ApiModelFieldAssignNewInstanceTest.java
index 4145d38..14f996d 100644
--- a/src/test/java/com/android/tools/r8/apimodel/ApiModelFieldAssignNewInstanceTest.java
+++ b/src/test/java/com/android/tools/r8/apimodel/ApiModelFieldAssignNewInstanceTest.java
@@ -13,6 +13,7 @@
import static org.junit.Assume.assumeTrue;
import com.android.tools.r8.CompilationMode;
+import com.android.tools.r8.NoAccessModification;
import com.android.tools.r8.SingleTestRunResult;
import com.android.tools.r8.TestBase;
import com.android.tools.r8.TestCompileResult;
@@ -29,7 +30,7 @@
import org.junit.runners.Parameterized.Parameter;
import org.junit.runners.Parameterized.Parameters;
-/** This i a regression test for b/269097876. */
+/** This is a regression test for b/269097876. */
@RunWith(Parameterized.class)
public class ApiModelFieldAssignNewInstanceTest extends TestBase {
@@ -134,6 +135,7 @@
testForR8(parameters.getBackend())
.apply(this::setupTestBuilder)
.addKeepMainRule(Main.class)
+ .enableNoAccessModificationAnnotationsForMembers()
.compile()
.inspect(this::inspect)
.apply(this::setupRuntime)
@@ -178,7 +180,7 @@
public static class Helper {
- private LibraryClass libraryClass;
+ @NoAccessModification private LibraryClass libraryClass;
public void setLibraryClass() {
if (AndroidBuildVersion.VERSION >= 30) {
diff --git a/src/test/java/com/android/tools/r8/apimodel/ApiModelNoInliningOfHigherApiLevelInterfaceTest.java b/src/test/java/com/android/tools/r8/apimodel/ApiModelNoInliningOfHigherApiLevelInterfaceTest.java
index 668bea6..8bd3d88 100644
--- a/src/test/java/com/android/tools/r8/apimodel/ApiModelNoInliningOfHigherApiLevelInterfaceTest.java
+++ b/src/test/java/com/android/tools/r8/apimodel/ApiModelNoInliningOfHigherApiLevelInterfaceTest.java
@@ -10,6 +10,7 @@
import com.android.tools.r8.KeepConstantArguments;
import com.android.tools.r8.NeverInline;
+import com.android.tools.r8.NoAccessModification;
import com.android.tools.r8.NoHorizontalClassMerging;
import com.android.tools.r8.TestBase;
import com.android.tools.r8.TestParameters;
@@ -48,6 +49,7 @@
.addKeepMainRule(Main.class)
.enableConstantArgumentAnnotations()
.enableInliningAnnotations()
+ .enableNoAccessModificationAnnotationsForClasses()
.enableNoHorizontalClassMergingAnnotations()
.apply(setMockApiLevelForClass(Api.class, AndroidApiLevel.L_MR1))
.apply(setMockApiLevelForMethod(apiMethod, AndroidApiLevel.L_MR1))
@@ -92,15 +94,14 @@
public static class Main {
public static void main(String[] args) {
- A.noApiCall(
- args.length > 0
- ? new Api() {
- @Override
- public void apiLevel22() {
- throw new RuntimeException("Foo");
- }
- }
- : null);
+ @NoAccessModification
+ class ApiImpl implements Api {
+ @Override
+ public void apiLevel22() {
+ throw new RuntimeException("Foo");
+ }
+ }
+ A.noApiCall(args.length > 0 ? new ApiImpl() : null);
}
}
}
diff --git a/src/test/java/com/android/tools/r8/bridgeremoval/BridgeWithInvokeSuperTest.java b/src/test/java/com/android/tools/r8/bridgeremoval/BridgeWithInvokeSuperTest.java
index 93795cf..3ff48dc 100644
--- a/src/test/java/com/android/tools/r8/bridgeremoval/BridgeWithInvokeSuperTest.java
+++ b/src/test/java/com/android/tools/r8/bridgeremoval/BridgeWithInvokeSuperTest.java
@@ -4,10 +4,10 @@
package com.android.tools.r8.bridgeremoval;
-import static com.android.tools.r8.utils.codeinspector.Matchers.isPresent;
-import static org.hamcrest.CoreMatchers.not;
+import static com.android.tools.r8.utils.codeinspector.Matchers.isPresentIf;
import static org.hamcrest.MatcherAssert.assertThat;
+import com.android.tools.r8.NeverClassInline;
import com.android.tools.r8.NeverInline;
import com.android.tools.r8.NoVerticalClassMerging;
import com.android.tools.r8.TestBase;
@@ -51,18 +51,20 @@
.addProgramClassFileData(getAWithBridgeAccessFlag())
.setMinApi(parameters)
.addKeepMainRule(Main.class)
- .enableNoVerticalClassMergingAnnotations()
.enableInliningAnnotations()
+ .enableNeverClassInliningAnnotations()
+ .enableNoVerticalClassMergingAnnotations()
.compile()
.inspect(
inspector -> {
+ boolean canUseDefaultAndStaticInterfaceMethods =
+ parameters.canUseDefaultAndStaticInterfaceMethods();
// Check that we are removing the bridge if we support default methods.
- if (parameters.canUseDefaultAndStaticInterfaceMethods()) {
- ClassSubject A = inspector.clazz(A.class);
- assertThat(A, isPresent());
- MethodSubject fooMethod = A.uniqueMethodWithOriginalName("foo");
- assertThat(fooMethod, not(isPresent()));
- }
+ ClassSubject A = inspector.clazz(A.class);
+ assertThat(A, isPresentIf(!canUseDefaultAndStaticInterfaceMethods));
+
+ MethodSubject fooMethod = A.uniqueMethodWithOriginalName("foo");
+ assertThat(fooMethod, isPresentIf(!canUseDefaultAndStaticInterfaceMethods));
})
.run(parameters.getRuntime(), Main.class)
.assertSuccessWithOutputLines(EXPECTED);
@@ -83,6 +85,7 @@
}
}
+ @NeverClassInline
public static class A implements I {
@Override
diff --git a/src/test/java/com/android/tools/r8/bridgeremoval/hoisting/BridgeHoistingAccessibilityTest.java b/src/test/java/com/android/tools/r8/bridgeremoval/hoisting/BridgeHoistingAccessibilityTest.java
index 2868cd8..2a2f7e9 100644
--- a/src/test/java/com/android/tools/r8/bridgeremoval/hoisting/BridgeHoistingAccessibilityTest.java
+++ b/src/test/java/com/android/tools/r8/bridgeremoval/hoisting/BridgeHoistingAccessibilityTest.java
@@ -9,6 +9,7 @@
import com.android.tools.r8.KeepConstantArguments;
import com.android.tools.r8.NeverClassInline;
import com.android.tools.r8.NeverInline;
+import com.android.tools.r8.NoAccessModification;
import com.android.tools.r8.NoMethodStaticizing;
import com.android.tools.r8.NoVerticalClassMerging;
import com.android.tools.r8.TestBase;
@@ -75,6 +76,7 @@
.addKeepMainRule(TestClass.class)
.enableConstantArgumentAnnotations()
.enableInliningAnnotations()
+ .enableNoAccessModificationAnnotationsForMembers()
.enableNoHorizontalClassMergingAnnotations()
.enableNoMethodStaticizingAnnotations()
.enableNoVerticalClassMergingAnnotations()
@@ -127,6 +129,7 @@
// in TestClass.main().
@KeepConstantArguments
@NeverInline
+ @NoAccessModification
@NoMethodStaticizing
/*bridge*/ String bridgeB(Object o) {
return (String) m((String) o);
@@ -154,6 +157,7 @@
// in TestClass.main().
@KeepConstantArguments
@NeverInline
+ @NoAccessModification
@NoMethodStaticizing
/*bridge*/ String bridgeB(Object o, int a, int b, int c, int d, int e) {
return (String) m((String) o, a, b, c, d, e);
diff --git a/src/test/java/com/android/tools/r8/bridgeremoval/hoisting/NonReboundBridgeHoistingTest.java b/src/test/java/com/android/tools/r8/bridgeremoval/hoisting/NonReboundBridgeHoistingTest.java
index 06f1e31..517edfe 100644
--- a/src/test/java/com/android/tools/r8/bridgeremoval/hoisting/NonReboundBridgeHoistingTest.java
+++ b/src/test/java/com/android/tools/r8/bridgeremoval/hoisting/NonReboundBridgeHoistingTest.java
@@ -43,6 +43,7 @@
transformer(C.class).setBridge(C.class.getDeclaredMethod("bridge")).transform())
.addKeepMainRule(TestClass.class)
.enableInliningAnnotations()
+ .enableNoAccessModificationAnnotationsForClasses()
.enableNoVerticalClassMergingAnnotations()
.enableNeverClassInliningAnnotations()
.setMinApi(parameters)
diff --git a/src/test/java/com/android/tools/r8/bridgeremoval/hoisting/testclasses/NonReboundBridgeHoistingTestClasses.java b/src/test/java/com/android/tools/r8/bridgeremoval/hoisting/testclasses/NonReboundBridgeHoistingTestClasses.java
index c419f7f..7a40b3f 100644
--- a/src/test/java/com/android/tools/r8/bridgeremoval/hoisting/testclasses/NonReboundBridgeHoistingTestClasses.java
+++ b/src/test/java/com/android/tools/r8/bridgeremoval/hoisting/testclasses/NonReboundBridgeHoistingTestClasses.java
@@ -5,6 +5,7 @@
package com.android.tools.r8.bridgeremoval.hoisting.testclasses;
import com.android.tools.r8.NeverInline;
+import com.android.tools.r8.NoAccessModification;
import com.android.tools.r8.NoVerticalClassMerging;
public class NonReboundBridgeHoistingTestClasses {
@@ -13,6 +14,7 @@
return A.class;
}
+ @NoAccessModification
@NoVerticalClassMerging
static class A {
diff --git a/src/test/java/com/android/tools/r8/classmerging/StatefulSingletonClassesMergingTest.java b/src/test/java/com/android/tools/r8/classmerging/StatefulSingletonClassesMergingTest.java
index 3604880..852fc89 100644
--- a/src/test/java/com/android/tools/r8/classmerging/StatefulSingletonClassesMergingTest.java
+++ b/src/test/java/com/android/tools/r8/classmerging/StatefulSingletonClassesMergingTest.java
@@ -8,6 +8,7 @@
import com.android.tools.r8.NeverClassInline;
import com.android.tools.r8.NeverInline;
import com.android.tools.r8.NeverPropagateValue;
+import com.android.tools.r8.NoAccessModification;
import com.android.tools.r8.TestBase;
import com.android.tools.r8.TestParameters;
import com.android.tools.r8.TestParametersCollection;
@@ -34,20 +35,14 @@
testForR8(parameters.getBackend())
.addInnerClasses(getClass())
.addKeepMainRule(Main.class)
- // TODO(b/280384153): A and B should always be merged in the final round of tree shaking
- // since their class initializers are postponeable, but we fail to conclude so with
- // constructor inlining enabled.
.addHorizontallyMergedClassesInspector(
inspector ->
- inspector
- .applyIf(
- !parameters.canInitNewInstanceUsingSuperclassConstructor(),
- i -> i.assertIsCompleteMergeGroup(A.class, B.class))
- .assertNoOtherClassesMerged())
+ inspector.assertIsCompleteMergeGroup(A.class, B.class).assertNoOtherClassesMerged())
.enableConstantArgumentAnnotations()
.enableInliningAnnotations()
.enableMemberValuePropagationAnnotations()
.enableNeverClassInliningAnnotations()
+ .enableNoAccessModificationAnnotationsForMembers()
.setMinApi(parameters)
.run(parameters.getRuntime(), Main.class)
.assertSuccessWithOutputLines("A", "B");
@@ -65,11 +60,12 @@
static final A INSTANCE = new A("A");
- @NeverPropagateValue private final String data;
+ @NeverPropagateValue @NoAccessModification private final String data;
// TODO(b/198758663): With argument propagation the constructors end up not being equivalent,
// which prevents merging in the final round of horizontal class merging.
@KeepConstantArguments
+ @NeverInline
A(String data) {
this.data = data;
}
@@ -85,11 +81,12 @@
static final B INSTANCE = new B("B");
- @NeverPropagateValue private String data;
+ @NeverPropagateValue @NoAccessModification private String data;
// TODO(b/198758663): With argument propagation the constructors end up not being equivalent,
// which prevents merging in the final round of horizontal class merging.
@KeepConstantArguments
+ @NeverInline
B(String data) {
this.data = data;
}
diff --git a/src/test/java/com/android/tools/r8/classmerging/horizontal/ClassesWithDifferentVisibilityFieldsTest.java b/src/test/java/com/android/tools/r8/classmerging/horizontal/ClassesWithDifferentVisibilityFieldsTest.java
index ebbb020..7406b9b 100644
--- a/src/test/java/com/android/tools/r8/classmerging/horizontal/ClassesWithDifferentVisibilityFieldsTest.java
+++ b/src/test/java/com/android/tools/r8/classmerging/horizontal/ClassesWithDifferentVisibilityFieldsTest.java
@@ -11,6 +11,7 @@
import com.android.tools.r8.NeverClassInline;
import com.android.tools.r8.NeverInline;
+import com.android.tools.r8.NoAccessModification;
import com.android.tools.r8.TestParameters;
import com.android.tools.r8.utils.codeinspector.ClassSubject;
import com.android.tools.r8.utils.codeinspector.FieldSubject;
@@ -29,6 +30,7 @@
.addKeepMainRule(Main.class)
.enableInliningAnnotations()
.enableNeverClassInliningAnnotations()
+ .enableNoAccessModificationAnnotationsForMembers()
.setMinApi(parameters)
.addHorizontallyMergedClassesInspector(
inspector -> inspector.assertMergedInto(B.class, A.class))
@@ -66,7 +68,9 @@
@NeverClassInline
public static class A {
- private int v1;
+
+ @NoAccessModification private int v1;
+
public int v2;
public A(int v) {
@@ -92,8 +96,10 @@
@NeverClassInline
public static class B {
+
public int v1;
- private int v2;
+
+ @NoAccessModification private int v2;
public B(int v) {
v1 = 3 * v;
diff --git a/src/test/java/com/android/tools/r8/classmerging/horizontal/ClassesWithOverlappingVisibilitiesTest.java b/src/test/java/com/android/tools/r8/classmerging/horizontal/ClassesWithOverlappingVisibilitiesTest.java
index f3380dc..57e100b 100644
--- a/src/test/java/com/android/tools/r8/classmerging/horizontal/ClassesWithOverlappingVisibilitiesTest.java
+++ b/src/test/java/com/android/tools/r8/classmerging/horizontal/ClassesWithOverlappingVisibilitiesTest.java
@@ -12,6 +12,7 @@
import com.android.tools.r8.NeverClassInline;
import com.android.tools.r8.NeverInline;
+import com.android.tools.r8.NoAccessModification;
import com.android.tools.r8.TestParameters;
import com.android.tools.r8.utils.codeinspector.ClassSubject;
import com.android.tools.r8.utils.codeinspector.MethodSubject;
@@ -29,6 +30,7 @@
.addKeepMainRule(Main.class)
.enableInliningAnnotations()
.enableNeverClassInliningAnnotations()
+ .enableNoAccessModificationAnnotationsForMembers()
.setMinApi(parameters)
.run(parameters.getRuntime(), Main.class)
.assertSuccessWithOutputLines("foo A", "FOO B", "FOO C", "foo D", "FOO E")
@@ -59,6 +61,7 @@
@NeverClassInline
public static class A {
@NeverInline
+ @NoAccessModification
void foo() {
System.out.println("foo A");
}
@@ -72,6 +75,7 @@
@Override
@NeverInline
+ @NoAccessModification
void foo() {
System.out.println("FOO B");
}
@@ -86,6 +90,7 @@
@Override
@NeverInline
+ @NoAccessModification
void foo() {
System.out.println("FOO C");
}
diff --git a/src/test/java/com/android/tools/r8/classmerging/horizontal/ConstructorCantInlineTest.java b/src/test/java/com/android/tools/r8/classmerging/horizontal/ConstructorCantInlineTest.java
index 3b62f5b..f2db164 100644
--- a/src/test/java/com/android/tools/r8/classmerging/horizontal/ConstructorCantInlineTest.java
+++ b/src/test/java/com/android/tools/r8/classmerging/horizontal/ConstructorCantInlineTest.java
@@ -10,6 +10,7 @@
import com.android.tools.r8.NeverClassInline;
import com.android.tools.r8.NeverInline;
+import com.android.tools.r8.NoAccessModification;
import com.android.tools.r8.TestParameters;
import org.junit.Test;
@@ -25,6 +26,7 @@
.addKeepMainRule(Main.class)
.enableInliningAnnotations()
.enableNeverClassInliningAnnotations()
+ .enableNoAccessModificationAnnotationsForMembers()
.setMinApi(parameters)
.run(parameters.getRuntime(), Main.class)
.assertSuccessWithOutputLines("c", "foo: foo")
@@ -48,16 +50,21 @@
@NeverClassInline
public static class C {
+
+ @NoAccessModification
C() {
System.out.println("c");
}
}
public static class D {
+
+ @NoAccessModification
D() {
foo(new B());
}
+ @NoAccessModification
@NeverInline
static void foo(A a) {
System.out.println("foo: " + a.foo());
diff --git a/src/test/java/com/android/tools/r8/classmerging/horizontal/EquivalentConstructorsWithClassIdAndExtraNullsMergingTest.java b/src/test/java/com/android/tools/r8/classmerging/horizontal/EquivalentConstructorsWithClassIdAndExtraNullsMergingTest.java
index c4aafe8..5e15d11 100644
--- a/src/test/java/com/android/tools/r8/classmerging/horizontal/EquivalentConstructorsWithClassIdAndExtraNullsMergingTest.java
+++ b/src/test/java/com/android/tools/r8/classmerging/horizontal/EquivalentConstructorsWithClassIdAndExtraNullsMergingTest.java
@@ -9,6 +9,7 @@
import static org.junit.Assert.assertEquals;
import com.android.tools.r8.NeverClassInline;
+import com.android.tools.r8.NoAccessModification;
import com.android.tools.r8.NoHorizontalClassMerging;
import com.android.tools.r8.TestBase;
import com.android.tools.r8.TestParameters;
@@ -43,6 +44,7 @@
inspector ->
inspector.assertIsCompleteMergeGroup(A.class, B.class).assertNoOtherClassesMerged())
.enableNeverClassInliningAnnotations()
+ .enableNoAccessModificationAnnotationsForMembers()
.enableNoHorizontalClassMergingAnnotations()
.setMinApi(parameters)
.compile()
@@ -74,7 +76,7 @@
@NeverClassInline
static class A {
- private final Object c;
+ @NoAccessModification private final Object c;
A(C c) {
this.c = c;
@@ -94,7 +96,7 @@
@NeverClassInline
static class B {
- private final D d;
+ @NoAccessModification private final D d;
B(D d) {
this.d = d;
diff --git a/src/test/java/com/android/tools/r8/classmerging/horizontal/InitClassToPackagePrivateFieldWithCrossPackageMergingTest.java b/src/test/java/com/android/tools/r8/classmerging/horizontal/InitClassToPackagePrivateFieldWithCrossPackageMergingTest.java
index c48c0c1..e8b40c2 100644
--- a/src/test/java/com/android/tools/r8/classmerging/horizontal/InitClassToPackagePrivateFieldWithCrossPackageMergingTest.java
+++ b/src/test/java/com/android/tools/r8/classmerging/horizontal/InitClassToPackagePrivateFieldWithCrossPackageMergingTest.java
@@ -5,6 +5,7 @@
package com.android.tools.r8.classmerging.horizontal;
import com.android.tools.r8.NeverInline;
+import com.android.tools.r8.NoAccessModification;
import com.android.tools.r8.NoHorizontalClassMerging;
import com.android.tools.r8.TestBase;
import com.android.tools.r8.TestParameters;
@@ -49,6 +50,7 @@
.addHorizontallyMergedClassesInspector(
HorizontallyMergedClassesInspector::assertNoClassesMerged)
.enableInliningAnnotations()
+ .enableNoAccessModificationAnnotationsForMembers()
.enableNoHorizontalClassMergingAnnotations()
.setMinApi(parameters)
.compile()
@@ -88,13 +90,14 @@
public static class A2 {
// Will remain due to the use in Main.main.
- static int f = (int) System.currentTimeMillis();
+ @NoAccessModification static int f = (int) System.currentTimeMillis();
static {
System.out.print("Hello");
}
// Will be inlined.
+ @NoAccessModification
static void sayHello() {}
}
diff --git a/src/test/java/com/android/tools/r8/classmerging/horizontal/InterfacesVisibilityTest.java b/src/test/java/com/android/tools/r8/classmerging/horizontal/InterfacesVisibilityTest.java
index aeccb3c..5430a70 100644
--- a/src/test/java/com/android/tools/r8/classmerging/horizontal/InterfacesVisibilityTest.java
+++ b/src/test/java/com/android/tools/r8/classmerging/horizontal/InterfacesVisibilityTest.java
@@ -33,6 +33,7 @@
.addKeepMainRule(Main.class)
.enableInliningAnnotations()
.enableNeverClassInliningAnnotations()
+ .enableNoAccessModificationAnnotationsForClasses()
.enableNoMethodStaticizingAnnotations()
.enableNoParameterTypeStrengtheningAnnotations()
.enableNoVerticalClassMergingAnnotations()
diff --git a/src/test/java/com/android/tools/r8/classmerging/horizontal/MergePackagePrivateWithPublicClassTest.java b/src/test/java/com/android/tools/r8/classmerging/horizontal/MergePackagePrivateWithPublicClassTest.java
index d348bb4..bf3e27f 100644
--- a/src/test/java/com/android/tools/r8/classmerging/horizontal/MergePackagePrivateWithPublicClassTest.java
+++ b/src/test/java/com/android/tools/r8/classmerging/horizontal/MergePackagePrivateWithPublicClassTest.java
@@ -27,6 +27,7 @@
.addKeepMainRule(Main.class)
.enableInliningAnnotations()
.enableNeverClassInliningAnnotations()
+ .enableNoAccessModificationAnnotationsForClasses()
.setMinApi(parameters)
.compile()
.run(parameters.getRuntime(), Main.class)
diff --git a/src/test/java/com/android/tools/r8/classmerging/horizontal/MergingWithSafeCheckCastTest.java b/src/test/java/com/android/tools/r8/classmerging/horizontal/MergingWithSafeCheckCastTest.java
index 0810864..2a36a79 100644
--- a/src/test/java/com/android/tools/r8/classmerging/horizontal/MergingWithSafeCheckCastTest.java
+++ b/src/test/java/com/android/tools/r8/classmerging/horizontal/MergingWithSafeCheckCastTest.java
@@ -12,6 +12,7 @@
import com.android.tools.r8.NeverClassInline;
import com.android.tools.r8.NeverInline;
import com.android.tools.r8.NeverPropagateValue;
+import com.android.tools.r8.NoAccessModification;
import com.android.tools.r8.NoHorizontalClassMerging;
import com.android.tools.r8.NoUnusedInterfaceRemoval;
import com.android.tools.r8.NoVerticalClassMerging;
@@ -35,6 +36,7 @@
.enableInliningAnnotations()
.enableMemberValuePropagationAnnotations()
.enableNeverClassInliningAnnotations()
+ .enableNoAccessModificationAnnotationsForMembers()
.enableNoHorizontalClassMergingAnnotations()
.enableNoUnusedInterfaceRemovalAnnotations()
.enableNoVerticalClassMergingAnnotations()
@@ -76,7 +78,7 @@
@NeverClassInline
public static class A {
- @NeverPropagateValue I f;
+ @NeverPropagateValue @NoAccessModification I f;
A(I f) {
this.f = f;
@@ -86,7 +88,7 @@
@NeverClassInline
public static class B {
- @NeverPropagateValue J f;
+ @NeverPropagateValue @NoAccessModification J f;
B(J f) {
this.f = f;
diff --git a/src/test/java/com/android/tools/r8/classmerging/horizontal/NoClassesOrMembersWithAnnotationsTest.java b/src/test/java/com/android/tools/r8/classmerging/horizontal/NoClassesOrMembersWithAnnotationsTest.java
index ebe21cf..4efe443 100644
--- a/src/test/java/com/android/tools/r8/classmerging/horizontal/NoClassesOrMembersWithAnnotationsTest.java
+++ b/src/test/java/com/android/tools/r8/classmerging/horizontal/NoClassesOrMembersWithAnnotationsTest.java
@@ -12,6 +12,7 @@
import com.android.tools.r8.KeepConstantArguments;
import com.android.tools.r8.NeverClassInline;
import com.android.tools.r8.NeverInline;
+import com.android.tools.r8.NoAccessModification;
import com.android.tools.r8.TestParameters;
import com.android.tools.r8.shaking.ProguardKeepAttributes;
import com.android.tools.r8.utils.BooleanUtils;
@@ -57,6 +58,7 @@
})
.enableConstantArgumentAnnotations()
.enableNeverClassInliningAnnotations()
+ .enableNoAccessModificationAnnotationsForClasses()
.enableInliningAnnotations()
.setMinApi(parameters)
.compile()
@@ -135,13 +137,14 @@
C c = new C("c");
c.foo();
foo(null);
- foo2(
- new MethodAnnotation() {
- @Override
- public Class<? extends Annotation> annotationType() {
- return null;
- }
- });
+ @NoAccessModification
+ class MethodAnnotationImpl implements MethodAnnotation {
+ @Override
+ public Class<? extends Annotation> annotationType() {
+ return null;
+ }
+ }
+ foo2(new MethodAnnotationImpl());
if (b.getClass().getAnnotations().length > 0) {
System.out.println(
b.getClass().getAnnotations()[0].toString().replaceFirst(".*", "annotation 1"));
diff --git a/src/test/java/com/android/tools/r8/classmerging/horizontal/NonPublicOverrideOfPublicMethodAfterAbstractClassMergingTest.java b/src/test/java/com/android/tools/r8/classmerging/horizontal/NonPublicOverrideOfPublicMethodAfterAbstractClassMergingTest.java
index 39b5438..e9af361 100644
--- a/src/test/java/com/android/tools/r8/classmerging/horizontal/NonPublicOverrideOfPublicMethodAfterAbstractClassMergingTest.java
+++ b/src/test/java/com/android/tools/r8/classmerging/horizontal/NonPublicOverrideOfPublicMethodAfterAbstractClassMergingTest.java
@@ -14,6 +14,7 @@
import com.android.tools.r8.NeverClassInline;
import com.android.tools.r8.NeverInline;
+import com.android.tools.r8.NoAccessModification;
import com.android.tools.r8.NoHorizontalClassMerging;
import com.android.tools.r8.NoMethodStaticizing;
import com.android.tools.r8.NoVerticalClassMerging;
@@ -48,6 +49,7 @@
HorizontallyMergedClassesInspector::assertNoClassesMerged)
.enableInliningAnnotations()
.enableNeverClassInliningAnnotations()
+ .enableNoAccessModificationAnnotationsForMembers()
.enableNoHorizontalClassMergingAnnotations()
.enableNoMethodStaticizingAnnotations()
.enableNoVerticalClassMergingAnnotations()
@@ -88,6 +90,7 @@
abstract static class A {
@NeverInline
+ @NoAccessModification
@NoMethodStaticizing
void m() {
System.out.println("A.m()");
diff --git a/src/test/java/com/android/tools/r8/classmerging/horizontal/NonPublicOverrideOfPublicMethodAfterClassMergingTest.java b/src/test/java/com/android/tools/r8/classmerging/horizontal/NonPublicOverrideOfPublicMethodAfterClassMergingTest.java
index dbe5c95..1edbf47 100644
--- a/src/test/java/com/android/tools/r8/classmerging/horizontal/NonPublicOverrideOfPublicMethodAfterClassMergingTest.java
+++ b/src/test/java/com/android/tools/r8/classmerging/horizontal/NonPublicOverrideOfPublicMethodAfterClassMergingTest.java
@@ -13,6 +13,7 @@
import com.android.tools.r8.NeverClassInline;
import com.android.tools.r8.NeverInline;
+import com.android.tools.r8.NoAccessModification;
import com.android.tools.r8.NoHorizontalClassMerging;
import com.android.tools.r8.NoUnusedInterfaceRemoval;
import com.android.tools.r8.NoVerticalClassMerging;
@@ -47,6 +48,7 @@
inspector.assertIsCompleteMergeGroup(I.class, J.class).assertNoOtherClassesMerged())
.enableInliningAnnotations()
.enableNeverClassInliningAnnotations()
+ .enableNoAccessModificationAnnotationsForMembers()
.enableNoHorizontalClassMergingAnnotations()
.enableNoUnusedInterfaceRemovalAnnotations()
.enableNoVerticalClassMergingAnnotations()
@@ -94,6 +96,7 @@
static class A extends I {
@NeverInline
+ @NoAccessModification
void m() {
System.out.println("A.m()");
}
diff --git a/src/test/java/com/android/tools/r8/classmerging/horizontal/UnresolvableMethodWithClassMergingTest.java b/src/test/java/com/android/tools/r8/classmerging/horizontal/UnresolvableMethodWithClassMergingTest.java
index ba7e586..dc66746 100644
--- a/src/test/java/com/android/tools/r8/classmerging/horizontal/UnresolvableMethodWithClassMergingTest.java
+++ b/src/test/java/com/android/tools/r8/classmerging/horizontal/UnresolvableMethodWithClassMergingTest.java
@@ -21,7 +21,7 @@
.addKeepMainRule(Main.class)
.addDontWarn(Missing.class)
.addHorizontallyMergedClassesInspector(
- HorizontallyMergedClassesInspector::assertNoOtherClassesMerged)
+ HorizontallyMergedClassesInspector::assertNoClassesMerged)
.setMinApi(parameters)
.compile()
.addRunClasspathFiles(buildOnDexRuntime(parameters, Missing.class))
diff --git a/src/test/java/com/android/tools/r8/classmerging/horizontal/dispatch/OverrideDefaultOnSuperMethodTest.java b/src/test/java/com/android/tools/r8/classmerging/horizontal/dispatch/OverrideDefaultOnSuperMethodTest.java
index 93548c1..8f92bab 100644
--- a/src/test/java/com/android/tools/r8/classmerging/horizontal/dispatch/OverrideDefaultOnSuperMethodTest.java
+++ b/src/test/java/com/android/tools/r8/classmerging/horizontal/dispatch/OverrideDefaultOnSuperMethodTest.java
@@ -10,6 +10,7 @@
import com.android.tools.r8.NeverClassInline;
import com.android.tools.r8.NeverInline;
+import com.android.tools.r8.NoAccessModification;
import com.android.tools.r8.NoUnusedInterfaceRemoval;
import com.android.tools.r8.NoVerticalClassMerging;
import com.android.tools.r8.TestParameters;
@@ -29,6 +30,7 @@
.addKeepMainRule(Main.class)
.enableInliningAnnotations()
.enableNeverClassInliningAnnotations()
+ .enableNoAccessModificationAnnotationsForMembers()
.enableNoUnusedInterfaceRemovalAnnotations()
.enableNoVerticalClassMergingAnnotations()
.setMinApi(parameters)
@@ -69,6 +71,7 @@
});
}
+ @NoAccessModification
@NoVerticalClassMerging
interface I {
@NeverInline
@@ -92,6 +95,7 @@
}
@NeverClassInline
+ @NoAccessModification
@NoUnusedInterfaceRemoval
@NoVerticalClassMerging
interface J extends I {
diff --git a/src/test/java/com/android/tools/r8/classmerging/horizontal/interfaces/IllegalOverrideAfterInterfaceMergingTest.java b/src/test/java/com/android/tools/r8/classmerging/horizontal/interfaces/IllegalOverrideAfterInterfaceMergingTest.java
index b3a256c..f91ff1e 100644
--- a/src/test/java/com/android/tools/r8/classmerging/horizontal/interfaces/IllegalOverrideAfterInterfaceMergingTest.java
+++ b/src/test/java/com/android/tools/r8/classmerging/horizontal/interfaces/IllegalOverrideAfterInterfaceMergingTest.java
@@ -13,6 +13,7 @@
import com.android.tools.r8.NeverClassInline;
import com.android.tools.r8.NeverInline;
+import com.android.tools.r8.NoAccessModification;
import com.android.tools.r8.NoHorizontalClassMerging;
import com.android.tools.r8.NoMethodStaticizing;
import com.android.tools.r8.NoUnusedInterfaceRemoval;
@@ -48,6 +49,7 @@
HorizontallyMergedClassesInspector::assertNoClassesMerged)
.enableInliningAnnotations()
.enableNeverClassInliningAnnotations()
+ .enableNoAccessModificationAnnotationsForMembers()
.enableNoHorizontalClassMergingAnnotations()
.enableNoMethodStaticizingAnnotations()
.enableNoUnusedInterfaceRemovalAnnotations()
@@ -99,6 +101,7 @@
// Intentionally package private. If J is merged into I then this is an illegal override of
// I.m().
@NeverInline
+ @NoAccessModification
@NoMethodStaticizing
void m() {
System.out.println("A.m()");
diff --git a/src/test/java/com/android/tools/r8/classmerging/horizontal/interfaces/IllegalSiblingAfterInterfaceMergingTest.java b/src/test/java/com/android/tools/r8/classmerging/horizontal/interfaces/IllegalSiblingAfterInterfaceMergingTest.java
index e03a298..775d754 100644
--- a/src/test/java/com/android/tools/r8/classmerging/horizontal/interfaces/IllegalSiblingAfterInterfaceMergingTest.java
+++ b/src/test/java/com/android/tools/r8/classmerging/horizontal/interfaces/IllegalSiblingAfterInterfaceMergingTest.java
@@ -14,6 +14,7 @@
import com.android.tools.r8.NeverClassInline;
import com.android.tools.r8.NeverInline;
+import com.android.tools.r8.NoAccessModification;
import com.android.tools.r8.NoHorizontalClassMerging;
import com.android.tools.r8.NoMethodStaticizing;
import com.android.tools.r8.NoUnusedInterfaceRemoval;
@@ -49,6 +50,7 @@
HorizontallyMergedClassesInspector::assertNoClassesMerged)
.enableInliningAnnotations()
.enableNeverClassInliningAnnotations()
+ .enableNoAccessModificationAnnotationsForMembers()
.enableNoHorizontalClassMergingAnnotations()
.enableNoMethodStaticizingAnnotations()
.enableNoUnusedInterfaceRemovalAnnotations()
@@ -104,6 +106,7 @@
// Intentionally package private. If J is merged into I then this is an illegal override of
// I.m().
@NeverInline
+ @NoAccessModification
@NoMethodStaticizing
void m() {
System.out.println("A.m()");
diff --git a/src/test/java/com/android/tools/r8/classmerging/horizontal/testclasses/InterfacesVisibilityTestClasses.java b/src/test/java/com/android/tools/r8/classmerging/horizontal/testclasses/InterfacesVisibilityTestClasses.java
index c857046..47428cc 100644
--- a/src/test/java/com/android/tools/r8/classmerging/horizontal/testclasses/InterfacesVisibilityTestClasses.java
+++ b/src/test/java/com/android/tools/r8/classmerging/horizontal/testclasses/InterfacesVisibilityTestClasses.java
@@ -6,6 +6,7 @@
import com.android.tools.r8.NeverClassInline;
import com.android.tools.r8.NeverInline;
+import com.android.tools.r8.NoAccessModification;
import com.android.tools.r8.NoHorizontalClassMerging;
import com.android.tools.r8.NoParameterTypeStrengthening;
import com.android.tools.r8.NoVerticalClassMerging;
@@ -27,6 +28,7 @@
}
}
+ @NoAccessModification
@NoHorizontalClassMerging
@NoVerticalClassMerging
interface PackagePrivateInterface {
diff --git a/src/test/java/com/android/tools/r8/classmerging/horizontal/testclasses/PackagePrivateClass.java b/src/test/java/com/android/tools/r8/classmerging/horizontal/testclasses/PackagePrivateClass.java
index 7deccb2..dfa6ba9 100644
--- a/src/test/java/com/android/tools/r8/classmerging/horizontal/testclasses/PackagePrivateClass.java
+++ b/src/test/java/com/android/tools/r8/classmerging/horizontal/testclasses/PackagePrivateClass.java
@@ -5,8 +5,10 @@
package com.android.tools.r8.classmerging.horizontal.testclasses;
import com.android.tools.r8.NeverClassInline;
+import com.android.tools.r8.NoAccessModification;
@NeverClassInline
+@NoAccessModification
class PackagePrivateClass {
public PackagePrivateClass() {
System.out.println("package private");
diff --git a/src/test/java/com/android/tools/r8/classmerging/horizontalstatic/StaticClassMergerVisibilityTest.java b/src/test/java/com/android/tools/r8/classmerging/horizontalstatic/StaticClassMergerVisibilityTest.java
index aa373c6..8b5680a 100644
--- a/src/test/java/com/android/tools/r8/classmerging/horizontalstatic/StaticClassMergerVisibilityTest.java
+++ b/src/test/java/com/android/tools/r8/classmerging/horizontalstatic/StaticClassMergerVisibilityTest.java
@@ -10,6 +10,7 @@
import static org.junit.Assert.assertEquals;
import com.android.tools.r8.NeverInline;
+import com.android.tools.r8.NoAccessModification;
import com.android.tools.r8.TestBase;
import com.android.tools.r8.TestParameters;
import com.android.tools.r8.TestParametersCollection;
@@ -41,34 +42,35 @@
.addHorizontallyMergedClassesInspector(
inspector ->
inspector
- .assertMergedInto(A.class, D.class)
- .assertMergedInto(B.class, D.class)
- .assertMergedInto(C.class, D.class))
+ .assertIsCompleteMergeGroup(A.class, B.class, C.class, D.class)
+ .assertNoOtherClassesMerged())
.enableInliningAnnotations()
+ .enableNoAccessModificationAnnotationsForMembers()
.setMinApi(parameters)
- .addDontObfuscate()
.run(parameters.getRuntime(), Main.class)
.assertSuccessWithOutputLines("A.print()", "B.print()", "C.print()", "D.print()")
.inspect(
inspector -> {
- // All classes are merged into D.
- ClassSubject clazzD = inspector.clazz(D.class);
- assertThat(clazzD, isPresent());
- assertThat(clazzD, isPublic());
- // D now has 5 methods (there is a synthetic access bridge for the private A.print()).
- assertEquals(5, clazzD.allMethods().size());
+ // All classes are merged into C.
+ ClassSubject classSubject = inspector.clazz(C.class);
+ assertThat(classSubject, isPresent());
+ assertThat(classSubject, isPublic());
+ // A now has 5 methods (there is a synthetic access bridge for the private A.print()).
+ assertEquals(5, classSubject.allMethods().size());
});
}
- // Will be merged into D.
+ // Will be merged into C.
private static class A {
+
@NeverInline
+ @NoAccessModification
private static void print() {
System.out.println("A.print()");
}
}
- // Will be merged into D.
+ // Will be merged into C.
static class B {
@NeverInline
static void print() {
@@ -76,7 +78,6 @@
}
}
- // Will be merged into D
public static class C {
@NeverInline
public static void print() {
@@ -84,6 +85,7 @@
}
}
+ // Will be merged into C.
protected static class D {
@NeverInline
protected static void print() {
diff --git a/src/test/java/com/android/tools/r8/classmerging/vertical/B141942381.java b/src/test/java/com/android/tools/r8/classmerging/vertical/B141942381.java
index 07d4778..3063698 100644
--- a/src/test/java/com/android/tools/r8/classmerging/vertical/B141942381.java
+++ b/src/test/java/com/android/tools/r8/classmerging/vertical/B141942381.java
@@ -9,12 +9,14 @@
import static org.junit.Assert.assertEquals;
import com.android.tools.r8.NeverClassInline;
+import com.android.tools.r8.NoAccessModification;
import com.android.tools.r8.TestBase;
import com.android.tools.r8.TestParameters;
import com.android.tools.r8.TestParametersCollection;
import com.android.tools.r8.utils.codeinspector.ClassSubject;
import com.android.tools.r8.utils.codeinspector.CodeInspector;
import com.android.tools.r8.utils.codeinspector.FieldSubject;
+import com.android.tools.r8.utils.codeinspector.HorizontallyMergedClassesInspector;
import com.android.tools.r8.utils.codeinspector.MethodSubject;
import org.junit.Test;
import org.junit.runner.RunWith;
@@ -50,7 +52,10 @@
.addKeepMainRule(TestClass.class)
.setMinApi(parameters)
.addKeepAttributes("Signatures")
+ .addHorizontallyMergedClassesInspector(
+ HorizontallyMergedClassesInspector::assertNoClassesMerged)
.enableNeverClassInliningAnnotations()
+ .enableNoAccessModificationAnnotationsForMembers()
.addDontObfuscate()
.compile()
.inspect(this::inspect)
@@ -90,6 +95,7 @@
}
static abstract class Box<T extends BoxValue> {
+ @NoAccessModification
@SuppressWarnings("unchecked")
private T[] _storage = (T[]) (new BoxValue[1]);
diff --git a/src/test/java/com/android/tools/r8/classmerging/vertical/NonReboundFieldAccessOnMergedClassTest.java b/src/test/java/com/android/tools/r8/classmerging/vertical/NonReboundFieldAccessOnMergedClassTest.java
index 913f012..d94fbf9 100644
--- a/src/test/java/com/android/tools/r8/classmerging/vertical/NonReboundFieldAccessOnMergedClassTest.java
+++ b/src/test/java/com/android/tools/r8/classmerging/vertical/NonReboundFieldAccessOnMergedClassTest.java
@@ -37,6 +37,7 @@
.addVerticallyMergedClassesInspector(
inspector -> inspector.assertMergedIntoSubtype(C.class))
.enableNeverClassInliningAnnotations()
+ .enableNoAccessModificationAnnotationsForClasses()
.enableNoVerticalClassMergingAnnotations()
.setMinApi(parameters)
.compile()
diff --git a/src/test/java/com/android/tools/r8/classmerging/vertical/VerticalClassMergerTest.java b/src/test/java/com/android/tools/r8/classmerging/vertical/VerticalClassMergerTest.java
index e01af0f..162f678 100644
--- a/src/test/java/com/android/tools/r8/classmerging/vertical/VerticalClassMergerTest.java
+++ b/src/test/java/com/android/tools/r8/classmerging/vertical/VerticalClassMergerTest.java
@@ -256,6 +256,7 @@
Path[] programFiles =
new Path[] {
CF_DIR.resolve("NeverPropagateValue.class"),
+ CF_DIR.resolve("NoAccessModification.class"),
CF_DIR.resolve("NoRedundantFieldLoadElimination.class"),
CF_DIR.resolve("ConflictInGeneratedNameTest.class"),
CF_DIR.resolve("ConflictInGeneratedNameTest$A.class"),
@@ -1081,6 +1082,7 @@
CF_DIR.resolve("pkg/SimpleInterfaceImplRetriever$SimpleInterfaceImpl.class"),
CF_DIR.resolve("pkg/SimpleInterfaceImplRetriever$1.class"),
CF_DIR.resolve("NeverInline.class"),
+ CF_DIR.resolve("NoAccessModification.class"),
CF_DIR.resolve("NoHorizontalClassMerging.class")
};
// SimpleInterface cannot be merged into SimpleInterfaceImpl because SimpleInterfaceImpl
diff --git a/src/test/java/com/android/tools/r8/classmerging/vertical/testclasses/NonReboundFieldAccessOnMergedClassTestClasses.java b/src/test/java/com/android/tools/r8/classmerging/vertical/testclasses/NonReboundFieldAccessOnMergedClassTestClasses.java
index 7653f54..f8caa00 100644
--- a/src/test/java/com/android/tools/r8/classmerging/vertical/testclasses/NonReboundFieldAccessOnMergedClassTestClasses.java
+++ b/src/test/java/com/android/tools/r8/classmerging/vertical/testclasses/NonReboundFieldAccessOnMergedClassTestClasses.java
@@ -4,10 +4,12 @@
package com.android.tools.r8.classmerging.vertical.testclasses;
+import com.android.tools.r8.NoAccessModification;
import com.android.tools.r8.NoVerticalClassMerging;
public class NonReboundFieldAccessOnMergedClassTestClasses {
+ @NoAccessModification
@NoVerticalClassMerging
static class A {
diff --git a/src/test/java/com/android/tools/r8/dagger/DaggerBasicSingletonUsingBindsTest.java b/src/test/java/com/android/tools/r8/dagger/DaggerBasicSingletonUsingBindsTest.java
index 742b463..0fc4708 100644
--- a/src/test/java/com/android/tools/r8/dagger/DaggerBasicSingletonUsingBindsTest.java
+++ b/src/test/java/com/android/tools/r8/dagger/DaggerBasicSingletonUsingBindsTest.java
@@ -71,15 +71,23 @@
}
private void inspect(CodeInspector inspector) {
+ ImmutableSet.Builder<String> expectedClasses =
+ ImmutableSet.<String>builder()
+ .add(
+ "basic.I1Impl1",
+ "basic.I2Impl1",
+ "basic.I3Impl1",
+ "basic.MainUsingBinds",
+ "dagger.internal.DoubleCheck",
+ "javax.inject.Provider");
+ if (parameters.isCfRuntime()) {
+ expectedClasses.add("basic.DaggerMainComponentUsingBinds");
+ }
+ if (target.equals("1.8") || parameters.isDexRuntime()) {
+ expectedClasses.add("basic.DaggerMainComponentUsingBinds$Builder");
+ }
assertEquals(
- ImmutableSet.of(
- "basic.I1Impl1",
- "basic.I2Impl1",
- "basic.I3Impl1",
- "basic.MainUsingBinds",
- "basic.DaggerMainComponentUsingBinds",
- "dagger.internal.DoubleCheck",
- "javax.inject.Provider"),
+ expectedClasses.build(),
inspector.allClasses().stream()
.map(FoundClassSubject::getOriginalName)
.filter(name -> !name.contains("_Factory"))
@@ -93,24 +101,27 @@
.setMinApi(parameters)
.addKeepMainRule(MAIN_CLASS)
.addHorizontallyMergedClassesInspector(
- inspector -> {
- inspector
- .applyIf(
- target.equals("1.8") || parameters.isDexRuntime(),
- i ->
- i.assertIsCompleteMergeGroup(
- "basic.I1Impl1_Factory",
- "basic.I2Impl1_Factory",
- "basic.I3Impl1_Factory"))
- .applyIf(
- target.equals("1.8") || parameters.isDexRuntime(),
- i ->
- i.assertIsCompleteMergeGroup(
- "basic.I1Impl1_Factory$InstanceHolder",
- "basic.I2Impl1_Factory$InstanceHolder",
- "basic.I3Impl1_Factory$InstanceHolder"))
- .assertNoOtherClassesMerged();
- })
+ inspector ->
+ inspector
+ .applyIf(
+ target.equals("1.8") || parameters.isDexRuntime(),
+ i ->
+ i.assertIsCompleteMergeGroup(
+ "basic.DaggerMainComponentUsingBinds$Builder",
+ "basic.I1Impl1_Factory",
+ "basic.I2Impl1_Factory",
+ "basic.I3Impl1_Factory")
+ .assertIsCompleteMergeGroup(
+ "a.I1Impl1_Factory$InstanceHolder",
+ "a.I2Impl1_Factory$InstanceHolder",
+ "a.I3Impl1_Factory$InstanceHolder"))
+ .applyIf(
+ target.equals("1.8"),
+ i ->
+ i.assertIsCompleteMergeGroup(
+ "dagger.internal.Preconditions",
+ "basic.DaggerMainComponentUsingBinds$1"))
+ .assertNoOtherClassesMerged())
.addVerticallyMergedClassesInspector(
inspector -> inspector.assertMergedIntoSubtype("basic.I1", "basic.I2", "basic.I3"))
.run(parameters.getRuntime(), MAIN_CLASS)
diff --git a/src/test/java/com/android/tools/r8/dagger/DaggerBasicSingletonUsingProvidesTest.java b/src/test/java/com/android/tools/r8/dagger/DaggerBasicSingletonUsingProvidesTest.java
index 4a3efd7..16117c6 100644
--- a/src/test/java/com/android/tools/r8/dagger/DaggerBasicSingletonUsingProvidesTest.java
+++ b/src/test/java/com/android/tools/r8/dagger/DaggerBasicSingletonUsingProvidesTest.java
@@ -51,15 +51,23 @@
ImmutableList.of("true", "true", "true", "I1Impl2", "I2Impl2", "I3Impl2");
private void inspect(CodeInspector inspector) {
+ ImmutableSet.Builder<String> expectedClasses =
+ ImmutableSet.<String>builder()
+ .add(
+ "basic.I1Impl2",
+ "basic.I2Impl2",
+ "basic.I3Impl2",
+ "basic.MainUsingProvides",
+ "dagger.internal.DoubleCheck",
+ "javax.inject.Provider");
+ if (parameters.isCfRuntime()) {
+ expectedClasses.add("basic.DaggerMainComponentUsingProvides");
+ }
+ if (target.equals("1.8") || parameters.isDexRuntime()) {
+ expectedClasses.add("basic.DaggerMainComponentUsingProvides$Builder");
+ }
assertEquals(
- ImmutableSet.of(
- "basic.I1Impl2",
- "basic.I2Impl2",
- "basic.I3Impl2",
- "basic.MainUsingProvides",
- "basic.DaggerMainComponentUsingProvides",
- "dagger.internal.DoubleCheck",
- "javax.inject.Provider"),
+ expectedClasses.build(),
inspector.allClasses().stream()
.map(FoundClassSubject::getOriginalName)
.filter(name -> !name.contains("Factory"))
@@ -100,6 +108,7 @@
target.equals("1.8") || parameters.isDexRuntime(),
i ->
i.assertIsCompleteMergeGroup(
+ "basic.DaggerMainComponentUsingProvides$Builder",
"basic.ModuleUsingProvides_I1Factory",
"basic.ModuleUsingProvides_I2Factory",
"basic.ModuleUsingProvides_I3Factory"))
@@ -107,15 +116,19 @@
target.equals("1.8") || parameters.isDexRuntime(),
i ->
i.assertIsCompleteMergeGroup(
- "basic.ModuleUsingProvides_I1Factory$InstanceHolder",
- "basic.ModuleUsingProvides_I2Factory$InstanceHolder",
- "basic.ModuleUsingProvides_I3Factory$InstanceHolder"))
+ "a.ModuleUsingProvides_I1Factory$InstanceHolder",
+ "a.ModuleUsingProvides_I2Factory$InstanceHolder",
+ "a.ModuleUsingProvides_I3Factory$InstanceHolder"))
.applyIf(
target.equals("1.8"),
i ->
i.assertIsCompleteMergeGroup(
"basic.ModuleUsingProvides",
- "basic.DaggerMainComponentUsingProvides$1"))
+ "basic.DaggerMainComponentUsingProvides$1",
+ "dagger.internal.Preconditions"),
+ i ->
+ i.assertIsCompleteMergeGroup(
+ "basic.ModuleUsingProvides", "dagger.internal.Preconditions"))
.assertNoOtherClassesMerged();
})
.addVerticallyMergedClassesInspector(
diff --git a/src/test/java/com/android/tools/r8/desugar/DesugarInstanceLambdaWithReadsTest.java b/src/test/java/com/android/tools/r8/desugar/DesugarInstanceLambdaWithReadsTest.java
index 820789c..3d882a5 100644
--- a/src/test/java/com/android/tools/r8/desugar/DesugarInstanceLambdaWithReadsTest.java
+++ b/src/test/java/com/android/tools/r8/desugar/DesugarInstanceLambdaWithReadsTest.java
@@ -66,8 +66,7 @@
inspector
.clazz(Main.class)
.allMethods(m -> m.getOriginalName().startsWith(R8_LAMBDA_ACCESSOR_METHOD_PREFIX));
- assertEquals(
- BooleanUtils.intValue(parameters.isDexRuntime() && isR8), lambdaAccessorMethods.size());
+ assertEquals(0, lambdaAccessorMethods.size());
// When generating DEX, R8 will inline the javac-generated lambda$ method into the synthesized
// $r8$lambda$ accessor method.
diff --git a/src/test/java/com/android/tools/r8/desugar/constantdynamic/JacocoConstantDynamicGetDeclaredMethods.java b/src/test/java/com/android/tools/r8/desugar/constantdynamic/JacocoConstantDynamicGetDeclaredMethods.java
index b6669cd..78d4db5 100644
--- a/src/test/java/com/android/tools/r8/desugar/constantdynamic/JacocoConstantDynamicGetDeclaredMethods.java
+++ b/src/test/java/com/android/tools/r8/desugar/constantdynamic/JacocoConstantDynamicGetDeclaredMethods.java
@@ -3,7 +3,7 @@
// BSD-style license that can be found in the LICENSE file.
package com.android.tools.r8.desugar.constantdynamic;
-import static com.android.tools.r8.utils.codeinspector.Matchers.isAbsent;
+import static com.android.tools.r8.utils.codeinspector.Matchers.isPresent;
import static org.hamcrest.MatcherAssert.assertThat;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
@@ -20,6 +20,7 @@
import com.android.tools.r8.jacoco.JacocoClasses;
import com.android.tools.r8.utils.AndroidApiLevel;
import com.android.tools.r8.utils.StringUtils;
+import com.android.tools.r8.utils.codeinspector.MethodSubject;
import java.io.IOException;
import java.lang.invoke.MethodHandles;
import java.lang.reflect.Method;
@@ -56,6 +57,8 @@
"java.lang.invoke.MethodHandles$Lookup",
"java.lang.String",
"java.lang.Class");
+ private static final String EXPECTED_OUTPUT_WITHOUT_PARAMETERS =
+ StringUtils.lines(jacocoBootstrapMethodName, "0");
private static final String EXPECTED_OUTPUT_WITHOUT_METHOD_HANDLES =
StringUtils.lines(
jacocoBootstrapMethodName,
@@ -130,6 +133,10 @@
.addProgramFiles(ToolHelper.JACOCO_AGENT)
.setMinApi(parameters)
.addKeepMainRules(TestRunner.class)
+ .addKeepRules(
+ "-keepclassmembers,allowoptimization,allowshrinking class " + MAIN_CLASS + " {",
+ " boolean[] " + jacocoBootstrapMethodName + "(...);",
+ "}")
.applyIf(
parameters.getApiLevel().isLessThan(AndroidApiLevel.O),
b -> b.addDontWarn(MethodHandles.Lookup.class))
@@ -138,13 +145,14 @@
.runWithJaCoCo(agentOutput, parameters.getRuntime(), MAIN_CLASS)
.inspect(
inspector -> {
- assertThat(
+ MethodSubject jacocoBootstrapMethodSubject =
inspector
.clazz(TestRunner.class)
- .uniqueMethodWithOriginalName(jacocoBootstrapMethodName),
- isAbsent());
+ .uniqueMethodWithOriginalName(jacocoBootstrapMethodName);
+ assertThat(jacocoBootstrapMethodSubject, isPresent());
+ assertEquals(0, jacocoBootstrapMethodSubject.getParameters().size());
})
- .assertSuccessWithOutputLines("No " + jacocoBootstrapMethodName + " method");
+ .assertSuccessWithOutput(EXPECTED_OUTPUT_WITHOUT_PARAMETERS);
checkJacocoReport(agentOutput);
}
diff --git a/src/test/java/com/android/tools/r8/desugar/records/EmptyRecordTest.java b/src/test/java/com/android/tools/r8/desugar/records/EmptyRecordTest.java
index d345744..e60c81f 100644
--- a/src/test/java/com/android/tools/r8/desugar/records/EmptyRecordTest.java
+++ b/src/test/java/com/android/tools/r8/desugar/records/EmptyRecordTest.java
@@ -5,6 +5,7 @@
package com.android.tools.r8.desugar.records;
import static org.junit.Assume.assumeFalse;
+import static org.junit.Assume.assumeTrue;
import com.android.tools.r8.TestBase;
import com.android.tools.r8.TestParameters;
@@ -69,6 +70,8 @@
@Test
public void testR8() throws Exception {
+ // TODO(b/288360309): Correctly deal with non-identity lenses in R8 record rewriting.
+ assumeTrue(parameters.isDexRuntime());
parameters.assumeR8TestParameters();
testForR8(parameters.getBackend())
.addProgramClassFileData(PROGRAM_DATA)
diff --git a/src/test/java/com/android/tools/r8/desugar/records/RecordShrinkFieldTest.java b/src/test/java/com/android/tools/r8/desugar/records/RecordShrinkFieldTest.java
index 0137c4f..0c007f2 100644
--- a/src/test/java/com/android/tools/r8/desugar/records/RecordShrinkFieldTest.java
+++ b/src/test/java/com/android/tools/r8/desugar/records/RecordShrinkFieldTest.java
@@ -69,7 +69,7 @@
.addKeepMainRule(MAIN_TYPE)
.minification(minifying)
.compile()
- .inspect(this::assertSingleField)
+ .inspect(inspector -> inspect(inspector, false))
.run(parameters.getRuntime(), MAIN_TYPE)
.assertSuccessWithOutput(
minifying ? EXPECTED_RESULT_R8 : EXPECTED_RESULT_R8_NO_MINIFICATION);
@@ -92,17 +92,21 @@
.addKeepMainRule(MAIN_TYPE)
.minification(minifying)
.compile()
- .inspect(this::assertSingleField)
+ .inspect(inspector -> inspect(inspector, true))
.run(parameters.getRuntime(), MAIN_TYPE)
.assertSuccessWithOutput(
minifying ? EXPECTED_RESULT_R8 : EXPECTED_RESULT_R8_NO_MINIFICATION);
}
- private void assertSingleField(CodeInspector inspector) {
+ private void inspect(CodeInspector inspector, boolean isCfThenDex) {
ClassSubject recordClass =
inspector.clazz(minifying ? "records.a" : "records.RecordShrinkField$Person");
- assertEquals(1, recordClass.allInstanceFields().size());
- assertEquals(
- "java.lang.String", recordClass.allInstanceFields().get(0).getField().type().toString());
+ if (isCfThenDex || !minifying) {
+ assertEquals(1, recordClass.allInstanceFields().size());
+ assertEquals(
+ "java.lang.String", recordClass.allInstanceFields().get(0).getField().type().toString());
+ } else {
+ assertEquals(0, recordClass.allInstanceFields().size());
+ }
}
}
diff --git a/src/test/java/com/android/tools/r8/desugar/records/RecordWithNonMaterializableConstClassTest.java b/src/test/java/com/android/tools/r8/desugar/records/RecordWithNonMaterializableConstClassTest.java
index 2f60f2a..0262140 100644
--- a/src/test/java/com/android/tools/r8/desugar/records/RecordWithNonMaterializableConstClassTest.java
+++ b/src/test/java/com/android/tools/r8/desugar/records/RecordWithNonMaterializableConstClassTest.java
@@ -4,6 +4,8 @@
package com.android.tools.r8.desugar.records;
+import static org.junit.Assume.assumeTrue;
+
import com.android.tools.r8.R8FullTestBuilder;
import com.android.tools.r8.TestBase;
import com.android.tools.r8.TestParameters;
@@ -90,6 +92,8 @@
.apply(this::configureR8)
.compile()
.writeToZip();
+ // TODO(b/288360309): Correctly deal with non-identity lenses in R8 record rewriting.
+ assumeTrue(parameters.isDexRuntime());
testForR8(parameters.getBackend())
.addProgramFiles(desugared)
.apply(this::configureR8)
diff --git a/src/test/java/com/android/tools/r8/desugar/sealed/SealedClassesEnumJdk17CompiledTest.java b/src/test/java/com/android/tools/r8/desugar/sealed/SealedClassesEnumJdk17CompiledTest.java
index 16009e6..07d4ef7 100644
--- a/src/test/java/com/android/tools/r8/desugar/sealed/SealedClassesEnumJdk17CompiledTest.java
+++ b/src/test/java/com/android/tools/r8/desugar/sealed/SealedClassesEnumJdk17CompiledTest.java
@@ -4,20 +4,22 @@
package com.android.tools.r8.desugar.sealed;
-import static com.android.tools.r8.DiagnosticsMatcher.diagnosticMessage;
-import static org.hamcrest.CoreMatchers.containsString;
-import static org.junit.Assert.assertThrows;
+import static junit.framework.Assert.assertEquals;
+import static org.hamcrest.MatcherAssert.assertThat;
import static org.junit.Assume.assumeTrue;
-import com.android.tools.r8.CompilationFailedException;
import com.android.tools.r8.DesugarTestConfiguration;
-import com.android.tools.r8.R8FullTestBuilder;
import com.android.tools.r8.TestBase;
import com.android.tools.r8.TestParameters;
-import com.android.tools.r8.TestParametersCollection;
import com.android.tools.r8.TestRuntime.CfVm;
+import com.android.tools.r8.TestShrinkerBuilder;
import com.android.tools.r8.examples.jdk17.EnumSealed;
+import com.android.tools.r8.utils.BooleanUtils;
import com.android.tools.r8.utils.StringUtils;
+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.util.List;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.Parameterized;
@@ -30,16 +32,22 @@
@Parameter(0)
public TestParameters parameters;
+ @Parameter(1)
+ public boolean keepPermittedSubclassesAttribute;
+
static final String EXPECTED = StringUtils.lines("A", "a B");
- @Parameters(name = "{0}")
- public static TestParametersCollection data() {
- return getTestParameters().withAllRuntimes().withAllApiLevelsAlsoForCf().build();
+ @Parameters(name = "{0}, keepPermittedSubclasses = {1}")
+ public static List<Object[]> data() {
+ return buildParameters(
+ getTestParameters().withAllRuntimes().withAllApiLevelsAlsoForCf().build(),
+ BooleanUtils.values());
}
@Test
public void testJvm() throws Exception {
parameters.assumeJvmTestParameters();
+ assumeTrue(keepPermittedSubclassesAttribute);
assumeTrue(parameters.asCfRuntime().isNewerThanOrEqual(CfVm.JDK17));
testForJvm(parameters)
.addRunClasspathFiles(EnumSealed.jar())
@@ -49,6 +57,7 @@
@Test
public void testDesugaring() throws Exception {
+ assumeTrue(keepPermittedSubclassesAttribute);
testForDesugaring(parameters)
.addProgramFiles(EnumSealed.jar())
.run(parameters.getRuntime(), EnumSealed.Main.typeName())
@@ -60,28 +69,33 @@
r -> r.assertFailureWithErrorThatThrows(UnsupportedClassVersionError.class));
}
+ private void inspect(CodeInspector inspector) {
+ ClassSubject clazz = inspector.clazz("enum_sealed.Enum");
+ assertThat(clazz, Matchers.isPresentAndRenamed());
+ if (!parameters.isCfRuntime()) {
+ return;
+ }
+ assertEquals(
+ keepPermittedSubclassesAttribute ? 1 : 0,
+ clazz.getFinalPermittedSubclassAttributes().size());
+ }
+
@Test
public void testR8() throws Exception {
parameters.assumeR8TestParameters();
- R8FullTestBuilder builder =
- testForR8(parameters.getBackend())
- .addProgramFiles(EnumSealed.jar())
- .setMinApi(parameters)
- .addKeepMainRule(EnumSealed.Main.typeName());
- if (parameters.isCfRuntime()) {
- assertThrows(
- CompilationFailedException.class,
- () ->
- builder.compileWithExpectedDiagnostics(
- diagnostics ->
- diagnostics.assertErrorThatMatches(
- diagnosticMessage(
- containsString(
- "Sealed classes are not supported as program classes")))));
- } else {
- builder
- .run(parameters.getRuntime(), EnumSealed.Main.typeName())
- .assertSuccessWithOutput(EXPECTED);
- }
+ testForR8(parameters.getBackend())
+ .addProgramFiles(EnumSealed.jar())
+ .setMinApi(parameters)
+ .applyIf(
+ keepPermittedSubclassesAttribute,
+ TestShrinkerBuilder::addKeepAttributePermittedSubclasses)
+ .addKeepMainRule(EnumSealed.Main.typeName())
+ .compile()
+ .inspect(this::inspect)
+ .run(parameters.getRuntime(), EnumSealed.Main.typeName())
+ .applyIf(
+ parameters.isDexRuntime() || parameters.asCfRuntime().isNewerThanOrEqual(CfVm.JDK17),
+ r -> r.assertSuccessWithOutput(EXPECTED),
+ r -> r.assertFailureWithErrorThatThrows(UnsupportedClassVersionError.class));
}
}
diff --git a/src/test/java/com/android/tools/r8/desugar/sealed/SealedClassesIllegalSubclassTest.java b/src/test/java/com/android/tools/r8/desugar/sealed/SealedClassesIllegalSubclassTest.java
index 330da7e..03d9160 100644
--- a/src/test/java/com/android/tools/r8/desugar/sealed/SealedClassesIllegalSubclassTest.java
+++ b/src/test/java/com/android/tools/r8/desugar/sealed/SealedClassesIllegalSubclassTest.java
@@ -4,20 +4,25 @@
package com.android.tools.r8.desugar.sealed;
-import static com.android.tools.r8.DiagnosticsMatcher.diagnosticMessage;
+import static junit.framework.Assert.assertEquals;
import static org.hamcrest.CoreMatchers.containsString;
-import static org.junit.Assert.assertThrows;
+import static org.hamcrest.MatcherAssert.assertThat;
+import static org.junit.Assume.assumeFalse;
import static org.junit.Assume.assumeTrue;
-import com.android.tools.r8.CompilationFailedException;
import com.android.tools.r8.DesugarTestConfiguration;
-import com.android.tools.r8.R8FullTestBuilder;
import com.android.tools.r8.TestBase;
import com.android.tools.r8.TestBuilder;
import com.android.tools.r8.TestParameters;
-import com.android.tools.r8.TestParametersCollection;
import com.android.tools.r8.TestRuntime.CfVm;
+import com.android.tools.r8.TestShrinkerBuilder;
+import com.android.tools.r8.utils.BooleanUtils;
import com.android.tools.r8.utils.StringUtils;
+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.util.List;
+import org.hamcrest.Matcher;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.Parameterized;
@@ -30,11 +35,18 @@
@Parameter(0)
public TestParameters parameters;
- static final String EXPECTED = StringUtils.lines("Success!");
+ @Parameter(1)
+ public boolean keepPermittedSubclassesAttribute;
- @Parameters(name = "{0}")
- public static TestParametersCollection data() {
- return getTestParameters().withAllRuntimes().withAllApiLevelsAlsoForCf().build();
+ static final Matcher<String> EXPECTED = containsString("cannot inherit from sealed class");
+ static final String EXPECTED_WITHOUT_PERMITTED_SUBCLASSES_ATTRIBUTE =
+ StringUtils.lines("Success!");
+
+ @Parameters(name = "{0}, keepPermittedSubclasses = {1}")
+ public static List<Object[]> data() {
+ return buildParameters(
+ getTestParameters().withAllRuntimes().withAllApiLevelsAlsoForCf().build(),
+ BooleanUtils.values());
}
private void addTestClasses(TestBuilder<?, ?> builder) throws Exception {
@@ -46,52 +58,67 @@
@Test
public void testJvm() throws Exception {
parameters.assumeJvmTestParameters();
+ assumeTrue(keepPermittedSubclassesAttribute);
assumeTrue(parameters.asCfRuntime().isNewerThanOrEqual(CfVm.JDK17));
testForJvm(parameters)
.apply(this::addTestClasses)
.run(parameters.getRuntime(), TestClass.class)
- .assertFailureWithErrorThatMatches(containsString("cannot inherit from sealed class"));
+ .assertFailureWithErrorThatMatches(EXPECTED);
}
@Test
public void testDesugaring() throws Exception {
+ assumeTrue(keepPermittedSubclassesAttribute);
testForDesugaring(parameters)
.apply(this::addTestClasses)
.run(parameters.getRuntime(), TestClass.class)
.applyIf(
DesugarTestConfiguration::isNotJavac,
- r -> r.assertSuccessWithOutput(EXPECTED),
+ r -> r.assertSuccessWithOutput(EXPECTED_WITHOUT_PERMITTED_SUBCLASSES_ATTRIBUTE),
c -> parameters.getRuntime().asCf().isNewerThanOrEqual(CfVm.JDK17),
- r ->
- r.assertFailureWithErrorThatMatches(
- containsString("cannot inherit from sealed class")),
+ r -> r.assertFailureWithErrorThatMatches(EXPECTED),
r -> r.assertFailureWithErrorThatThrows(UnsupportedClassVersionError.class));
}
+ private void inspect(CodeInspector inspector) {
+ ClassSubject clazz = inspector.clazz(C.class);
+ assertThat(clazz, Matchers.isPresentAndRenamed());
+ if (!parameters.isCfRuntime()) {
+ return;
+ }
+ assertEquals(
+ keepPermittedSubclassesAttribute ? 2 : 0,
+ clazz.getFinalPermittedSubclassAttributes().size());
+ }
+
@Test
public void testR8() throws Exception {
parameters.assumeR8TestParameters();
- R8FullTestBuilder builder =
- testForR8(parameters.getBackend())
- .apply(this::addTestClasses)
- .setMinApi(parameters)
- .addKeepMainRule(TestClass.class);
- if (parameters.isCfRuntime()) {
- // TODO(b/227160052): Support sealed classes for R8 class file output.
- assertThrows(
- CompilationFailedException.class,
- () ->
- builder.compileWithExpectedDiagnostics(
- diagnostics ->
- diagnostics.assertErrorThatMatches(
- diagnosticMessage(
- containsString(
- "Sealed classes are not supported as program classes")))));
- } else {
- builder
- .run(parameters.getRuntime(), TestClass.class)
- .assertSuccessWithOutputLines("Success!");
- }
+ assumeFalse(parameters.isDexRuntime() && keepPermittedSubclassesAttribute);
+ testForR8(parameters.getBackend())
+ .apply(this::addTestClasses)
+ .setMinApi(parameters)
+ .applyIf(
+ keepPermittedSubclassesAttribute,
+ TestShrinkerBuilder::addKeepAttributePermittedSubclasses)
+ // Keep the sealed class to ensure the PermittedSubclasses attribute stays live.
+ .addKeepPermittedSubclasses(C.class)
+ // Keep subclasses as the PermittedSubclasses attribute is not rewritten.
+ .addKeepRules("-keep class * extends " + C.class.getTypeName())
+ .addKeepMainRule(TestClass.class)
+ .compile()
+ .inspect(this::inspect)
+ .run(parameters.getRuntime(), TestClass.class)
+ .applyIf(
+ parameters.isDexRuntime()
+ || (!keepPermittedSubclassesAttribute
+ && parameters.asCfRuntime().isNewerThanOrEqual(CfVm.JDK17)),
+ r -> r.assertSuccessWithOutput(EXPECTED_WITHOUT_PERMITTED_SUBCLASSES_ATTRIBUTE),
+ parameters.isCfRuntime()
+ && parameters.asCfRuntime().isNewerThanOrEqual(CfVm.JDK17)
+ && keepPermittedSubclassesAttribute,
+ r -> r.assertFailureWithErrorThatMatches(EXPECTED),
+ r -> r.assertFailureWithErrorThatThrows(UnsupportedClassVersionError.class));
}
public byte[] getTransformedClasses() throws Exception {
diff --git a/src/test/java/com/android/tools/r8/desugar/sealed/SealedClassesJdk17CompiledTest.java b/src/test/java/com/android/tools/r8/desugar/sealed/SealedClassesJdk17CompiledTest.java
index 2a6eee8..2b7d981 100644
--- a/src/test/java/com/android/tools/r8/desugar/sealed/SealedClassesJdk17CompiledTest.java
+++ b/src/test/java/com/android/tools/r8/desugar/sealed/SealedClassesJdk17CompiledTest.java
@@ -4,20 +4,22 @@
package com.android.tools.r8.desugar.sealed;
-import static com.android.tools.r8.DiagnosticsMatcher.diagnosticMessage;
-import static org.hamcrest.CoreMatchers.containsString;
-import static org.junit.Assert.assertThrows;
+import static junit.framework.Assert.assertEquals;
+import static org.hamcrest.MatcherAssert.assertThat;
import static org.junit.Assume.assumeTrue;
-import com.android.tools.r8.CompilationFailedException;
import com.android.tools.r8.DesugarTestConfiguration;
-import com.android.tools.r8.R8FullTestBuilder;
import com.android.tools.r8.TestBase;
import com.android.tools.r8.TestParameters;
-import com.android.tools.r8.TestParametersCollection;
import com.android.tools.r8.TestRuntime.CfVm;
+import com.android.tools.r8.TestShrinkerBuilder;
import com.android.tools.r8.examples.jdk17.Sealed;
+import com.android.tools.r8.utils.BooleanUtils;
import com.android.tools.r8.utils.StringUtils;
+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.util.List;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.Parameterized;
@@ -30,16 +32,22 @@
@Parameter(0)
public TestParameters parameters;
+ @Parameter(1)
+ public boolean keepPermittedSubclassesAttribute;
+
static final String EXPECTED = StringUtils.lines("R8 compiler", "D8 compiler");
- @Parameters(name = "{0}")
- public static TestParametersCollection data() {
- return getTestParameters().withAllRuntimes().withAllApiLevelsAlsoForCf().build();
+ @Parameters(name = "{0}, keepPermittedSubclasses = {1}")
+ public static List<Object[]> data() {
+ return buildParameters(
+ getTestParameters().withAllRuntimes().withAllApiLevelsAlsoForCf().build(),
+ BooleanUtils.values());
}
@Test
public void testJvm() throws Exception {
parameters.assumeJvmTestParameters();
+ assumeTrue(keepPermittedSubclassesAttribute);
assumeTrue(parameters.asCfRuntime().isNewerThanOrEqual(CfVm.JDK17));
testForJvm(parameters)
.addRunClasspathFiles(Sealed.jar())
@@ -49,6 +57,7 @@
@Test
public void testDesugaring() throws Exception {
+ assumeTrue(keepPermittedSubclassesAttribute);
testForDesugaring(parameters)
.addProgramFiles(Sealed.jar())
.run(parameters.getRuntime(), Sealed.Main.typeName())
@@ -60,28 +69,35 @@
r -> r.assertFailureWithErrorThatThrows(UnsupportedClassVersionError.class));
}
+ private void inspect(CodeInspector inspector) {
+ ClassSubject clazz = inspector.clazz("sealed.Compiler");
+ assertThat(clazz, Matchers.isPresentAndRenamed());
+ if (!parameters.isCfRuntime()) {
+ return;
+ }
+ assertEquals(
+ keepPermittedSubclassesAttribute ? 2 : 0,
+ clazz.getFinalPermittedSubclassAttributes().size());
+ }
+
@Test
public void testR8() throws Exception {
parameters.assumeR8TestParameters();
- R8FullTestBuilder builder =
- testForR8(parameters.getBackend())
- .addProgramFiles(Sealed.jar())
- .setMinApi(parameters)
- .addKeepMainRule(Sealed.Main.typeName());
- if (parameters.isCfRuntime()) {
- assertThrows(
- CompilationFailedException.class,
- () ->
- builder.compileWithExpectedDiagnostics(
- diagnostics ->
- diagnostics.assertErrorThatMatches(
- diagnosticMessage(
- containsString(
- "Sealed classes are not supported as program classes")))));
- } else {
- builder
- .run(parameters.getRuntime(), Sealed.Main.typeName())
- .assertSuccessWithOutput(EXPECTED);
- }
+ testForR8(parameters.getBackend())
+ .addProgramFiles(Sealed.jar())
+ .setMinApi(parameters)
+ .applyIf(
+ keepPermittedSubclassesAttribute,
+ TestShrinkerBuilder::addKeepAttributePermittedSubclasses)
+ // Keep the sealed class to ensure the PermittedSubclasses attribute stays live.
+ .addKeepPermittedSubclasses(Sealed.Compiler.typeName())
+ .addKeepMainRule(Sealed.Main.typeName())
+ .compile()
+ .inspect(this::inspect)
+ .run(parameters.getRuntime(), Sealed.Main.typeName())
+ .applyIf(
+ parameters.isDexRuntime() || parameters.asCfRuntime().isNewerThanOrEqual(CfVm.JDK17),
+ r -> r.assertSuccessWithOutput(EXPECTED),
+ r -> r.assertFailureWithErrorThatThrows(UnsupportedClassVersionError.class));
}
}
diff --git a/src/test/java/com/android/tools/r8/desugar/sealed/SealedClassesTest.java b/src/test/java/com/android/tools/r8/desugar/sealed/SealedClassesTest.java
index 420c077..3aa1a38 100644
--- a/src/test/java/com/android/tools/r8/desugar/sealed/SealedClassesTest.java
+++ b/src/test/java/com/android/tools/r8/desugar/sealed/SealedClassesTest.java
@@ -4,20 +4,22 @@
package com.android.tools.r8.desugar.sealed;
-import static com.android.tools.r8.DiagnosticsMatcher.diagnosticMessage;
-import static org.hamcrest.CoreMatchers.containsString;
-import static org.junit.Assert.assertThrows;
+import static junit.framework.Assert.assertEquals;
+import static org.hamcrest.MatcherAssert.assertThat;
import static org.junit.Assume.assumeTrue;
-import com.android.tools.r8.CompilationFailedException;
import com.android.tools.r8.DesugarTestConfiguration;
-import com.android.tools.r8.R8FullTestBuilder;
import com.android.tools.r8.TestBase;
import com.android.tools.r8.TestBuilder;
import com.android.tools.r8.TestParameters;
-import com.android.tools.r8.TestParametersCollection;
import com.android.tools.r8.TestRuntime.CfVm;
+import com.android.tools.r8.TestShrinkerBuilder;
+import com.android.tools.r8.utils.BooleanUtils;
import com.android.tools.r8.utils.StringUtils;
+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.util.List;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.Parameterized;
@@ -30,11 +32,16 @@
@Parameter(0)
public TestParameters parameters;
+ @Parameter(1)
+ public boolean keepPermittedSubclassesAttribute;
+
static final String EXPECTED = StringUtils.lines("Success!");
- @Parameters(name = "{0}")
- public static TestParametersCollection data() {
- return getTestParameters().withAllRuntimes().withAllApiLevelsAlsoForCf().build();
+ @Parameters(name = "{0}, keepPermittedSubclasses = {1}")
+ public static List<Object[]> data() {
+ return buildParameters(
+ getTestParameters().withAllRuntimes().withAllApiLevelsAlsoForCf().build(),
+ BooleanUtils.values());
}
private void addTestClasses(TestBuilder<?, ?> builder) throws Exception {
@@ -46,6 +53,7 @@
@Test
public void testJvm() throws Exception {
parameters.assumeJvmTestParameters();
+ assumeTrue(keepPermittedSubclassesAttribute);
assumeTrue(parameters.asCfRuntime().isNewerThanOrEqual(CfVm.JDK17));
testForJvm(parameters)
.apply(this::addTestClasses)
@@ -55,6 +63,7 @@
@Test
public void testDesugaring() throws Exception {
+ assumeTrue(keepPermittedSubclassesAttribute);
testForDesugaring(parameters)
.apply(this::addTestClasses)
.run(parameters.getRuntime(), TestClass.class)
@@ -66,28 +75,36 @@
r -> r.assertFailureWithErrorThatThrows(UnsupportedClassVersionError.class));
}
+ private void inspect(CodeInspector inspector) {
+ ClassSubject clazz = inspector.clazz(C.class);
+ assertThat(clazz, Matchers.isPresentAndRenamed());
+ if (!parameters.isCfRuntime()) {
+ return;
+ }
+ assertEquals(
+ keepPermittedSubclassesAttribute ? 2 : 0,
+ clazz.getFinalPermittedSubclassAttributes().size());
+ }
+
@Test
public void testR8() throws Exception {
parameters.assumeR8TestParameters();
- R8FullTestBuilder builder =
- testForR8(parameters.getBackend())
- .apply(this::addTestClasses)
- .setMinApi(parameters)
- .addKeepMainRule(TestClass.class);
- if (parameters.isCfRuntime()) {
- // TODO(b/227160052): Support sealed classes for R8 class file output.
- assertThrows(
- CompilationFailedException.class,
- () ->
- builder.compileWithExpectedDiagnostics(
- diagnostics ->
- diagnostics.assertErrorThatMatches(
- diagnosticMessage(
- containsString(
- "Sealed classes are not supported as program classes")))));
- } else {
- builder.run(parameters.getRuntime(), TestClass.class).assertSuccessWithOutput(EXPECTED);
- }
+ testForR8(parameters.getBackend())
+ .apply(this::addTestClasses)
+ .setMinApi(parameters)
+ .applyIf(
+ keepPermittedSubclassesAttribute,
+ TestShrinkerBuilder::addKeepAttributePermittedSubclasses)
+ // Keep the sealed class to ensure the PermittedSubclasses attribute stays live.
+ .addKeepPermittedSubclasses(C.class)
+ .addKeepMainRule(TestClass.class)
+ .compile()
+ .inspect(this::inspect)
+ .run(parameters.getRuntime(), TestClass.class)
+ .applyIf(
+ !parameters.isCfRuntime() || parameters.asCfRuntime().isNewerThanOrEqual(CfVm.JDK17),
+ r -> r.assertSuccessWithOutput(EXPECTED),
+ r -> r.assertFailureWithErrorThatThrows(UnsupportedClassVersionError.class));
}
public byte[] getTransformedClasses() throws Exception {
diff --git a/src/test/java/com/android/tools/r8/enumunboxing/EnumUnboxNullArgumentTest.java b/src/test/java/com/android/tools/r8/enumunboxing/EnumUnboxNullArgumentTest.java
index c55ecf6..1f0492d 100644
--- a/src/test/java/com/android/tools/r8/enumunboxing/EnumUnboxNullArgumentTest.java
+++ b/src/test/java/com/android/tools/r8/enumunboxing/EnumUnboxNullArgumentTest.java
@@ -4,10 +4,6 @@
package com.android.tools.r8.enumunboxing;
-import static org.hamcrest.CoreMatchers.containsString;
-import static org.junit.Assert.assertThrows;
-
-import com.android.tools.r8.CompilationFailedException;
import com.android.tools.r8.TestBase;
import com.android.tools.r8.TestParameters;
import com.android.tools.r8.TestParametersCollection;
@@ -29,24 +25,14 @@
}
@Test
- public void testR8() {
- // TODO(b/287193321): We should not fail compilation.
- assertThrows(
- CompilationFailedException.class,
- () ->
- testForR8(parameters.getBackend())
- .addInnerClasses(getClass())
- .setMinApi(parameters)
- .addKeepMainRule(Main.class)
- // TODO(b/287193321): Using LIR avoids the issue, is it fixed or just hidden?
- .addOptionsModification(options -> options.testing.disableLir())
- .compileWithExpectedDiagnostics(
- diagnostics -> {
- if (parameters.isDexRuntime()) {
- diagnostics.assertErrorMessageThatMatches(
- containsString("Cannot constrain type"));
- }
- }));
+ public void testR8() throws Exception {
+ testForR8(parameters.getBackend())
+ .addInnerClasses(getClass())
+ .setMinApi(parameters)
+ .addKeepMainRule(Main.class)
+ .addOptionsModification(options -> options.testing.disableLir())
+ .run(parameters.getRuntime(), Main.class)
+ .assertFailureWithErrorThatThrows(NullPointerException.class);
}
public enum MyEnum {
diff --git a/src/test/java/com/android/tools/r8/examples/jumbostring/JumboStringTestRunner.java b/src/test/java/com/android/tools/r8/examples/jumbostring/JumboStringTestRunner.java
index dd474a2..db99557 100644
--- a/src/test/java/com/android/tools/r8/examples/jumbostring/JumboStringTestRunner.java
+++ b/src/test/java/com/android/tools/r8/examples/jumbostring/JumboStringTestRunner.java
@@ -53,7 +53,8 @@
@Test
public void testR8() throws Exception {
- runTestR8();
+ // Disable shrinking and obfuscation so that the fields and their names are retained.
+ runTestR8(b -> b.addDontShrink().addDontObfuscate());
}
@Test
diff --git a/src/test/java/com/android/tools/r8/graph/invokespecial/InvokeSpecialOnOtherInterfaceTest.java b/src/test/java/com/android/tools/r8/graph/invokespecial/InvokeSpecialOnOtherInterfaceTest.java
index c66a13d..870109f 100644
--- a/src/test/java/com/android/tools/r8/graph/invokespecial/InvokeSpecialOnOtherInterfaceTest.java
+++ b/src/test/java/com/android/tools/r8/graph/invokespecial/InvokeSpecialOnOtherInterfaceTest.java
@@ -8,11 +8,13 @@
import static org.junit.Assert.assertEquals;
import static org.objectweb.asm.Opcodes.INVOKESPECIAL;
+import com.android.tools.r8.NoHorizontalClassMerging;
import com.android.tools.r8.NoMethodStaticizing;
import com.android.tools.r8.TestBase;
import com.android.tools.r8.TestParameters;
import com.android.tools.r8.TestParametersCollection;
import com.android.tools.r8.ToolHelper.DexVm.Version;
+import com.android.tools.r8.utils.codeinspector.HorizontallyMergedClassesInspector;
import java.io.IOException;
import org.junit.Test;
import org.junit.runner.RunWith;
@@ -57,6 +59,9 @@
.addProgramClasses(I.class)
.addProgramClassFileData(getClassWithTransformedInvoked())
.addKeepMainRule(Main.class)
+ .addHorizontallyMergedClassesInspector(
+ HorizontallyMergedClassesInspector::assertNoClassesMerged)
+ .enableNoHorizontalClassMergingAnnotations()
.enableNoMethodStaticizingAnnotations()
.setMinApi(parameters)
.run(parameters.getRuntime(), Main.class)
@@ -92,6 +97,7 @@
}
}
+ @NoHorizontalClassMerging
public static class A {
public void bar(I i) {
diff --git a/src/test/java/com/android/tools/r8/internal/proto/ChromeProtoRewritingTest.java b/src/test/java/com/android/tools/r8/internal/proto/ChromeProtoRewritingTest.java
index a2adf72..f9822e9 100644
--- a/src/test/java/com/android/tools/r8/internal/proto/ChromeProtoRewritingTest.java
+++ b/src/test/java/com/android/tools/r8/internal/proto/ChromeProtoRewritingTest.java
@@ -51,7 +51,6 @@
.addDontWarn("android.content.pm.IPackageManager")
.addOptionsModification(
options -> options.getOpenClosedInterfacesOptions().suppressAllOpenInterfaces())
- .allowCheckDiscardedErrors()
.allowUnusedDontWarnPatterns()
.allowUnusedProguardConfigurationRules()
.enableProtoShrinking(false)
diff --git a/src/test/java/com/android/tools/r8/ir/analysis/fieldaccess/FieldBitAccessInfoTest.java b/src/test/java/com/android/tools/r8/ir/analysis/fieldaccess/FieldBitAccessInfoTest.java
index 2cdeffd..e373513 100644
--- a/src/test/java/com/android/tools/r8/ir/analysis/fieldaccess/FieldBitAccessInfoTest.java
+++ b/src/test/java/com/android/tools/r8/ir/analysis/fieldaccess/FieldBitAccessInfoTest.java
@@ -27,6 +27,7 @@
import com.android.tools.r8.graph.ProgramMethod;
import com.android.tools.r8.graph.bytecodemetadata.BytecodeMetadataProvider;
import com.android.tools.r8.ir.code.IRCode;
+import com.android.tools.r8.ir.conversion.MethodConversionOptions;
import com.android.tools.r8.ir.conversion.MethodProcessorEventConsumer;
import com.android.tools.r8.ir.conversion.MethodProcessorWithWave;
import com.android.tools.r8.ir.optimize.info.OptimizationFeedbackIgnore;
@@ -94,7 +95,7 @@
clazz.forEachProgramMethod(
method -> {
- IRCode code = method.buildIR(appView);
+ IRCode code = method.buildIR(appView, MethodConversionOptions.nonConverting());
fieldAccessAnalysis.recordFieldAccesses(
code, BytecodeMetadataProvider.builder(), feedback, new PrimaryMethodProcessorMock());
});
diff --git a/src/test/java/com/android/tools/r8/ir/analysis/sideeffect/SingletonClassInitializerWithInstancePutCanBePostponedTest.java b/src/test/java/com/android/tools/r8/ir/analysis/sideeffect/SingletonClassInitializerWithInstancePutCanBePostponedTest.java
index ce9bdd7..7527b96 100644
--- a/src/test/java/com/android/tools/r8/ir/analysis/sideeffect/SingletonClassInitializerWithInstancePutCanBePostponedTest.java
+++ b/src/test/java/com/android/tools/r8/ir/analysis/sideeffect/SingletonClassInitializerWithInstancePutCanBePostponedTest.java
@@ -12,6 +12,7 @@
import com.android.tools.r8.NeverClassInline;
import com.android.tools.r8.NeverInline;
import com.android.tools.r8.NeverPropagateValue;
+import com.android.tools.r8.NoAccessModification;
import com.android.tools.r8.TestBase;
import com.android.tools.r8.TestParameters;
import com.android.tools.r8.TestParametersCollection;
@@ -44,6 +45,7 @@
.enableInliningAnnotations()
.enableMemberValuePropagationAnnotations()
.enableNeverClassInliningAnnotations()
+ .enableNoAccessModificationAnnotationsForMembers()
.setMinApi(parameters)
.compile()
.inspect(this::inspect)
@@ -72,7 +74,7 @@
@NeverClassInline
static class A {
- private static A INSTANCE;
+ @NoAccessModification private static A INSTANCE;
static {
A a = new A();
diff --git a/src/test/java/com/android/tools/r8/ir/analysis/sideeffect/SingletonClassInitializerWithInstancePutCannotBePostponedTest.java b/src/test/java/com/android/tools/r8/ir/analysis/sideeffect/SingletonClassInitializerWithInstancePutCannotBePostponedTest.java
index f9cf925..b2644a7 100644
--- a/src/test/java/com/android/tools/r8/ir/analysis/sideeffect/SingletonClassInitializerWithInstancePutCannotBePostponedTest.java
+++ b/src/test/java/com/android/tools/r8/ir/analysis/sideeffect/SingletonClassInitializerWithInstancePutCannotBePostponedTest.java
@@ -12,6 +12,7 @@
import com.android.tools.r8.NeverClassInline;
import com.android.tools.r8.NeverInline;
import com.android.tools.r8.NeverPropagateValue;
+import com.android.tools.r8.NoAccessModification;
import com.android.tools.r8.TestBase;
import com.android.tools.r8.TestParameters;
import com.android.tools.r8.TestParametersCollection;
@@ -44,6 +45,7 @@
.enableInliningAnnotations()
.enableMemberValuePropagationAnnotations()
.enableNeverClassInliningAnnotations()
+ .enableNoAccessModificationAnnotationsForMembers()
.setMinApi(parameters)
.compile()
.inspect(this::inspect)
@@ -77,7 +79,7 @@
@NeverClassInline
static class A {
- private static A INSTANCE;
+ @NoAccessModification private static A INSTANCE;
static {
A a = new A();
diff --git a/src/test/java/com/android/tools/r8/ir/analysis/type/TypeAnalysisTest.java b/src/test/java/com/android/tools/r8/ir/analysis/type/TypeAnalysisTest.java
index 40c87b6..e370d88 100644
--- a/src/test/java/com/android/tools/r8/ir/analysis/type/TypeAnalysisTest.java
+++ b/src/test/java/com/android/tools/r8/ir/analysis/type/TypeAnalysisTest.java
@@ -30,14 +30,11 @@
import com.android.tools.r8.origin.Origin;
import com.android.tools.r8.smali.SmaliTestBase;
import com.android.tools.r8.utils.AndroidApp;
-import com.android.tools.r8.utils.Smali;
import com.android.tools.r8.utils.codeinspector.CodeInspector;
import com.android.tools.r8.utils.codeinspector.MethodSubject;
import com.google.common.collect.ImmutableList;
import com.google.common.collect.ImmutableMap;
-import java.nio.charset.StandardCharsets;
import java.nio.file.Files;
-import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.ArrayList;
import java.util.Arrays;
@@ -64,32 +61,34 @@
public TypeAnalysisTest(String test, BiConsumer<AppView<?>, CodeInspector> inspection) {
dirName = test.substring(0, test.lastIndexOf('/'));
- smaliFileName = test.substring(test.lastIndexOf('/') + 1) + ".smali";
+ smaliFileName = test.substring(test.lastIndexOf('/') + 1) + ".dex";
this.inspection = inspection;
}
@Parameters(name = "{0}")
public static Collection<Object[]> data() {
- List<String> tests = Arrays.asList(
- "arithmetic/Arithmetic",
- "fibonacci/Fibonacci",
- "fill-array-data/FillArrayData",
- "filled-new-array/FilledNewArray",
- "infinite-loop/InfiniteLoop1",
- "try-catch/TryCatch",
- "type-confusion-regression/TestObject",
- "type-confusion-regression5/TestObject"
- );
+ List<String> tests =
+ Arrays.asList(
+ "arithmetic/arithmetic",
+ "fibonacci/fibonacci",
+ "fill-array-data/fill-array-data",
+ "filled-new-array/filled-new-array",
+ "infinite-loop/infinite-loop",
+ "try-catch/try-catch",
+ "type-confusion-regression/type-confusion-regression",
+ "type-confusion-regression5/type-confusion-regression5");
Map<String, BiConsumer<AppView<?>, CodeInspector>> inspections = new HashMap<>();
- inspections.put("arithmetic/Arithmetic", TypeAnalysisTest::arithmetic);
- inspections.put("fibonacci/Fibonacci", TypeAnalysisTest::fibonacci);
- inspections.put("fill-array-data/FillArrayData", TypeAnalysisTest::fillArrayData);
- inspections.put("filled-new-array/FilledNewArray", TypeAnalysisTest::filledNewArray);
- inspections.put("infinite-loop/InfiniteLoop1", TypeAnalysisTest::infiniteLoop);
- inspections.put("try-catch/TryCatch", TypeAnalysisTest::tryCatch);
- inspections.put("type-confusion-regression/TestObject", TypeAnalysisTest::typeConfusion);
- inspections.put("type-confusion-regression5/TestObject", TypeAnalysisTest::typeConfusion5);
+ inspections.put("arithmetic/arithmetic", TypeAnalysisTest::arithmetic);
+ inspections.put("fibonacci/fibonacci", TypeAnalysisTest::fibonacci);
+ inspections.put("fill-array-data/fill-array-data", TypeAnalysisTest::fillArrayData);
+ inspections.put("filled-new-array/filled-new-array", TypeAnalysisTest::filledNewArray);
+ inspections.put("infinite-loop/infinite-loop", TypeAnalysisTest::infiniteLoop);
+ inspections.put("try-catch/try-catch", TypeAnalysisTest::tryCatch);
+ inspections.put(
+ "type-confusion-regression/type-confusion-regression", TypeAnalysisTest::typeConfusion);
+ inspections.put(
+ "type-confusion-regression5/type-confusion-regression5", TypeAnalysisTest::typeConfusion5);
List<Object[]> testCases = new ArrayList<>();
for (String test : tests) {
@@ -101,11 +100,8 @@
@Test
public void typeAnalysisTest() throws Exception {
- Path smaliPath = Paths.get(ToolHelper.SMALI_DIR, dirName, smaliFileName);
- StringBuilder smaliStringBuilder = new StringBuilder();
- Files.lines(smaliPath, StandardCharsets.UTF_8)
- .forEach(s -> smaliStringBuilder.append(s).append(System.lineSeparator()));
- byte[] content = Smali.compile(smaliStringBuilder.toString());
+ byte[] content =
+ Files.readAllBytes(Paths.get(ToolHelper.SMALI_BUILD_DIR, dirName, smaliFileName));
AndroidApp app = AndroidApp.builder().addDexProgramData(content, Origin.unknown()).build();
AppView<AppInfo> appView = computeAppView(app);
inspection.accept(appView, new CodeInspector(appView.appInfo().app()));
diff --git a/src/test/java/com/android/tools/r8/ir/optimize/ConstantRemovalTest.java b/src/test/java/com/android/tools/r8/ir/optimize/ConstantRemovalTest.java
index 60cad4c..93ad7a7 100644
--- a/src/test/java/com/android/tools/r8/ir/optimize/ConstantRemovalTest.java
+++ b/src/test/java/com/android/tools/r8/ir/optimize/ConstantRemovalTest.java
@@ -5,6 +5,8 @@
import static org.junit.Assert.assertEquals;
+import com.android.tools.r8.TestParameters;
+import com.android.tools.r8.TestParametersCollection;
import com.android.tools.r8.graph.AppInfo;
import com.android.tools.r8.graph.AppView;
import com.android.tools.r8.graph.DexApplication;
@@ -22,7 +24,7 @@
import com.android.tools.r8.ir.code.Position.SyntheticPosition;
import com.android.tools.r8.ir.code.Return;
import com.android.tools.r8.ir.code.Value;
-import com.android.tools.r8.ir.conversion.MethodConversionOptions.MutableMethodConversionOptions;
+import com.android.tools.r8.ir.conversion.MethodConversionOptions;
import com.android.tools.r8.ir.regalloc.LinearScanRegisterAllocator;
import com.android.tools.r8.ir.regalloc.LiveIntervals;
import com.android.tools.r8.origin.Origin;
@@ -30,9 +32,22 @@
import com.android.tools.r8.utils.InternalOptions;
import java.util.LinkedList;
import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.junit.runners.Parameterized;
+import org.junit.runners.Parameterized.Parameters;
+@RunWith(Parameterized.class)
public class ConstantRemovalTest {
+ @Parameters(name = "{0}")
+ public static TestParametersCollection data() {
+ return TestParameters.builder().withNoneRuntime().build();
+ }
+
+ public ConstantRemovalTest(TestParameters parameters) {
+ parameters.assertNoneRuntime();
+ }
+
private static class MockLinearScanRegisterAllocator extends LinearScanRegisterAllocator {
MockLinearScanRegisterAllocator(AppView<?> appView, IRCode code) {
super(appView, code);
@@ -152,7 +167,7 @@
basicBlockNumberGenerator,
IRMetadata.unknown(),
Origin.unknown(),
- new MutableMethodConversionOptions(options));
+ MethodConversionOptions.nonConverting());
PeepholeOptimizer.optimize(appView, code, new MockLinearScanRegisterAllocator(appView, code));
// Check that all four constant number instructions remain.
diff --git a/src/test/java/com/android/tools/r8/ir/optimize/R8InliningTest.java b/src/test/java/com/android/tools/r8/ir/optimize/R8InliningTest.java
index 049bfdf..00e0441 100644
--- a/src/test/java/com/android/tools/r8/ir/optimize/R8InliningTest.java
+++ b/src/test/java/com/android/tools/r8/ir/optimize/R8InliningTest.java
@@ -317,29 +317,29 @@
// These constants describe the expected number of invoke instructions calling a possibly
// inlined method.
- final int ALWAYS_INLINABLE = 0;
- final int INLINABLE = allowAccessModification ? 0 : 1;
- final int NEVER_INLINABLE = 1;
+ int ALWAYS_INLINABLE = 0;
+ int INLINABLE_WHEN_DISABLED = allowAccessModification ? 1 : 0;
+ int NEVER_INLINABLE = 1;
ClassSubject clazz = inspector.clazz(nullabilityClass);
MethodSubject m;
m = clazz.method("int", "inlinable", ImmutableList.of("inlining.A"));
- assertCounters(INLINABLE, INLINABLE, countInvokes(inspector, m));
+ assertCounters(ALWAYS_INLINABLE, ALWAYS_INLINABLE, countInvokes(inspector, m));
m =
clazz.method(
allowAccessModification ? "void" : "int",
"notInlinable",
ImmutableList.of("inlining." + (allowAccessModification ? "B" : "A")));
- assertCounters(INLINABLE, NEVER_INLINABLE, countInvokes(inspector, m));
+ assertCounters(ALWAYS_INLINABLE, INLINABLE_WHEN_DISABLED, countInvokes(inspector, m));
m = clazz.method("int", "notInlinableDueToMissingNpe", ImmutableList.of("inlining.A"));
- assertCounters(INLINABLE, ALWAYS_INLINABLE, countInvokes(inspector, m));
+ assertCounters(ALWAYS_INLINABLE, ALWAYS_INLINABLE, countInvokes(inspector, m));
m = clazz.method("int", "notInlinableDueToSideEffect", ImmutableList.of("inlining.A"));
assertCounters(
- parameters.isCfRuntime() ? INLINABLE : NEVER_INLINABLE,
+ parameters.isCfRuntime() ? ALWAYS_INLINABLE : NEVER_INLINABLE,
NEVER_INLINABLE,
countInvokes(inspector, m));
diff --git a/src/test/java/com/android/tools/r8/ir/optimize/TrivialGotoEliminationTest.java b/src/test/java/com/android/tools/r8/ir/optimize/TrivialGotoEliminationTest.java
index 9e02653..18c5121 100644
--- a/src/test/java/com/android/tools/r8/ir/optimize/TrivialGotoEliminationTest.java
+++ b/src/test/java/com/android/tools/r8/ir/optimize/TrivialGotoEliminationTest.java
@@ -28,7 +28,7 @@
import com.android.tools.r8.ir.code.Return;
import com.android.tools.r8.ir.code.Throw;
import com.android.tools.r8.ir.code.Value;
-import com.android.tools.r8.ir.conversion.MethodConversionOptions.MutableMethodConversionOptions;
+import com.android.tools.r8.ir.conversion.MethodConversionOptions;
import com.android.tools.r8.ir.conversion.passes.TrivialGotosCollapser;
import com.android.tools.r8.origin.Origin;
import com.android.tools.r8.utils.AndroidApp;
@@ -108,7 +108,7 @@
basicBlockNumberGenerator,
IRMetadata.unknown(),
Origin.unknown(),
- new MutableMethodConversionOptions(options));
+ MethodConversionOptions.forD8(appView));
new TrivialGotosCollapser(appView).run(code, Timing.empty());
assertTrue(code.entryBlock().isTrivialGoto());
assertTrue(blocks.contains(block0));
@@ -197,7 +197,7 @@
basicBlockNumberGenerator,
IRMetadata.unknown(),
Origin.unknown(),
- new MutableMethodConversionOptions(options));
+ MethodConversionOptions.forD8(appView));
new TrivialGotosCollapser(appView).run(code, Timing.empty());
assertTrue(block0.getInstructions().get(1).isIf());
assertEquals(block1, block0.getInstructions().get(1).asIf().fallthroughBlock());
diff --git a/src/test/java/com/android/tools/r8/ir/optimize/checkcast/CheckCastChainRemoval2Test.java b/src/test/java/com/android/tools/r8/ir/optimize/checkcast/CheckCastChainRemoval2Test.java
new file mode 100644
index 0000000..b1f7de9
--- /dev/null
+++ b/src/test/java/com/android/tools/r8/ir/optimize/checkcast/CheckCastChainRemoval2Test.java
@@ -0,0 +1,65 @@
+// Copyright (c) 2023, 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.ir.optimize.checkcast;
+
+import com.android.tools.r8.NeverInline;
+import com.android.tools.r8.TestBase;
+import com.android.tools.r8.TestParameters;
+import com.android.tools.r8.TestParametersCollection;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.junit.runners.Parameterized;
+import org.junit.runners.Parameterized.Parameter;
+import org.junit.runners.Parameterized.Parameters;
+
+@RunWith(Parameterized.class)
+public class CheckCastChainRemoval2Test extends TestBase {
+
+ @Parameter(0)
+ public TestParameters parameters;
+
+ public CheckCastChainRemoval2Test() {}
+
+ @Parameters(name = "{0}")
+ public static TestParametersCollection data() {
+ return getTestParameters().withAllRuntimesAndApiLevels().build();
+ }
+
+ @Test
+ public void testCheckCast() throws Exception {
+ testForR8(parameters.getBackend())
+ .addProgramClasses(A.class, B.class, Main.class)
+ .addKeepAllClassesRule()
+ .addKeepMainRule(Main.class)
+ .addOptionsModification((opt) -> opt.testing.enableCheckCastAndInstanceOfRemoval = false)
+ .enableInliningAnnotations()
+ .setMinApi(this.parameters)
+ .run(this.parameters.getRuntime(), Main.class)
+ .assertSuccessWithOutputLines("false");
+ }
+
+ public static class Main {
+
+ public static void main(String[] args) {
+ System.out.println(check());
+ }
+
+ @NeverInline
+ private static boolean check() {
+ Object o = null;
+ A a = (A) o;
+ if (a instanceof B) {
+ B b = (B) a;
+ return true;
+ } else {
+ return false;
+ }
+ }
+ }
+
+ static class B extends A {}
+
+ static class A {}
+}
diff --git a/src/test/java/com/android/tools/r8/ir/optimize/classinliner/ClassInlineInstanceInitializerWithInaccessibleStaticGetTest.java b/src/test/java/com/android/tools/r8/ir/optimize/classinliner/ClassInlineInstanceInitializerWithInaccessibleStaticGetTest.java
index 47f8ffa..62e08ce 100644
--- a/src/test/java/com/android/tools/r8/ir/optimize/classinliner/ClassInlineInstanceInitializerWithInaccessibleStaticGetTest.java
+++ b/src/test/java/com/android/tools/r8/ir/optimize/classinliner/ClassInlineInstanceInitializerWithInaccessibleStaticGetTest.java
@@ -41,6 +41,7 @@
ClassInlineInstanceInitializerWithInaccessibleStaticGetTestClasses.class)
.addKeepMainRule(TestClass.class)
.enableInliningAnnotations()
+ .enableNoAccessModificationAnnotationsForMembers()
.enableNoHorizontalClassMergingAnnotations()
.setMinApi(parameters)
.compile()
diff --git a/src/test/java/com/android/tools/r8/ir/optimize/classinliner/testclasses/ClassInlineInstanceInitializerWithInaccessibleStaticGetTestClasses.java b/src/test/java/com/android/tools/r8/ir/optimize/classinliner/testclasses/ClassInlineInstanceInitializerWithInaccessibleStaticGetTestClasses.java
index 4943a47..b344030 100644
--- a/src/test/java/com/android/tools/r8/ir/optimize/classinliner/testclasses/ClassInlineInstanceInitializerWithInaccessibleStaticGetTestClasses.java
+++ b/src/test/java/com/android/tools/r8/ir/optimize/classinliner/testclasses/ClassInlineInstanceInitializerWithInaccessibleStaticGetTestClasses.java
@@ -4,6 +4,7 @@
package com.android.tools.r8.ir.optimize.classinliner.testclasses;
+import com.android.tools.r8.NoAccessModification;
import com.android.tools.r8.NoHorizontalClassMerging;
public class ClassInlineInstanceInitializerWithInaccessibleStaticGetTestClasses {
@@ -24,7 +25,7 @@
public static class Environment {
- /*package-private*/ static boolean VALUE;
+ @NoAccessModification /*package-private*/ static boolean VALUE;
public static void setValue(boolean value) {
VALUE = value;
diff --git a/src/test/java/com/android/tools/r8/ir/optimize/inliner/InlineFunctionalInterfaceMethodImplementedByLambdasTest.java b/src/test/java/com/android/tools/r8/ir/optimize/inliner/InlineFunctionalInterfaceMethodImplementedByLambdasTest.java
index 441f149..ccd59c6 100644
--- a/src/test/java/com/android/tools/r8/ir/optimize/inliner/InlineFunctionalInterfaceMethodImplementedByLambdasTest.java
+++ b/src/test/java/com/android/tools/r8/ir/optimize/inliner/InlineFunctionalInterfaceMethodImplementedByLambdasTest.java
@@ -5,7 +5,6 @@
package com.android.tools.r8.ir.optimize.inliner;
import static com.android.tools.r8.utils.codeinspector.Matchers.isPresent;
-import static com.android.tools.r8.utils.codeinspector.Matchers.notIf;
import static org.hamcrest.CoreMatchers.not;
import static org.hamcrest.MatcherAssert.assertThat;
@@ -39,6 +38,7 @@
.addKeepMainRule(TestClass.class)
.enableNeverClassInliningAnnotations()
.setMinApi(parameters)
+ .addOptionsModification(o -> o.testing.enableLir())
.compile()
.inspect(this::inspect)
.run(parameters.getRuntime(), TestClass.class)
@@ -52,9 +52,8 @@
// Used by the invoke-custom instruction.
assertThat(inspector.clazz(I.class), isPresent());
}
-
- // When compiling to DEX, A.m() will be single caller inlined in the second optimization pass.
- assertThat(inspector.clazz(A.class), notIf(isPresent(), parameters.isDexRuntime()));
+ // A.m() will be single caller inlined in the second optimization pass.
+ assertThat(inspector.clazz(A.class), not(isPresent()));
}
static class TestClass {
diff --git a/src/test/java/com/android/tools/r8/ir/optimize/inliner/InlineNonReboundFieldTest.java b/src/test/java/com/android/tools/r8/ir/optimize/inliner/InlineNonReboundFieldTest.java
index e4ad5b8..0179d87 100644
--- a/src/test/java/com/android/tools/r8/ir/optimize/inliner/InlineNonReboundFieldTest.java
+++ b/src/test/java/com/android/tools/r8/ir/optimize/inliner/InlineNonReboundFieldTest.java
@@ -10,26 +10,44 @@
import com.android.tools.r8.NeverClassInline;
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.inliner.testclasses.Greeting;
import com.android.tools.r8.utils.StringUtils;
import com.android.tools.r8.utils.codeinspector.ClassSubject;
import com.android.tools.r8.utils.codeinspector.CodeInspector;
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;
/** Regression test for b/128604123. */
+@RunWith(Parameterized.class)
public class InlineNonReboundFieldTest extends TestBase {
+ @Parameter(0)
+ public TestParameters parameters;
+
+ @Parameters(name = "{0}")
+ public static TestParametersCollection data() {
+ return getTestParameters().withAllRuntimesAndApiLevels().build();
+ }
+
@Test
public void test() throws Exception {
String expectedOutput = StringUtils.lines("Greeter: Hello world!");
CodeInspector inspector =
- testForR8(Backend.DEX)
+ testForR8(parameters.getBackend())
.addProgramClasses(
TestClass.class, Greeter.class, Greeting.class, Greeting.getGreetingBase())
.addKeepMainRule(TestClass.class)
.enableNeverClassInliningAnnotations()
+ .enableNoAccessModificationAnnotationsForClasses()
+ .enableNoAccessModificationAnnotationsForMembers()
.enableNoVerticalClassMergingAnnotations()
- .run(TestClass.class)
+ .setMinApi(parameters)
+ .run(parameters.getRuntime(), TestClass.class)
.assertSuccessWithOutput(expectedOutput)
.inspector();
diff --git a/src/test/java/com/android/tools/r8/ir/optimize/inliner/InliningIntoVisibilityBridgeTest.java b/src/test/java/com/android/tools/r8/ir/optimize/inliner/InliningIntoVisibilityBridgeTest.java
index 4498fe9..ade059d 100644
--- a/src/test/java/com/android/tools/r8/ir/optimize/inliner/InliningIntoVisibilityBridgeTest.java
+++ b/src/test/java/com/android/tools/r8/ir/optimize/inliner/InliningIntoVisibilityBridgeTest.java
@@ -56,6 +56,7 @@
.addKeepMainRule(TestClass.class)
.addInliningAnnotations()
.applyIf(neverInline, R8TestBuilder::enableInliningAnnotations)
+ .enableNoAccessModificationAnnotationsForClasses()
.enableNoVerticalClassMergingAnnotations()
.enableProguardTestOptions()
.setMinApi(parameters)
diff --git a/src/test/java/com/android/tools/r8/ir/optimize/inliner/SingleTargetAfterInliningTest.java b/src/test/java/com/android/tools/r8/ir/optimize/inliner/SingleTargetAfterInliningTest.java
index 706f8f0..95cf23e 100644
--- a/src/test/java/com/android/tools/r8/ir/optimize/inliner/SingleTargetAfterInliningTest.java
+++ b/src/test/java/com/android/tools/r8/ir/optimize/inliner/SingleTargetAfterInliningTest.java
@@ -4,6 +4,7 @@
package com.android.tools.r8.ir.optimize.inliner;
+import static com.android.tools.r8.utils.codeinspector.Matchers.isAbsent;
import static com.android.tools.r8.utils.codeinspector.Matchers.isPresent;
import static com.android.tools.r8.utils.codeinspector.Matchers.notIf;
import static org.hamcrest.CoreMatchers.not;
@@ -83,7 +84,9 @@
ClassSubject bClassSubject = inspector.clazz(B.class);
assertThat(bClassSubject, isPresent());
// TODO(b/286058449): We could inline this.
- assertThat(bClassSubject.uniqueMethodWithOriginalName("foo"), isPresent());
+ assertThat(
+ bClassSubject.uniqueMethodWithOriginalName("foo"),
+ (parameters.isCfRuntime() && maxInliningDepth == 1) ? isAbsent() : isPresent());
// B.bar() should always be inlined because it is marked as @AlwaysInline.
assertThat(
diff --git a/src/test/java/com/android/tools/r8/ir/optimize/inliner/testclasses/Greeting.java b/src/test/java/com/android/tools/r8/ir/optimize/inliner/testclasses/Greeting.java
index 717c09f..b4005aa 100644
--- a/src/test/java/com/android/tools/r8/ir/optimize/inliner/testclasses/Greeting.java
+++ b/src/test/java/com/android/tools/r8/ir/optimize/inliner/testclasses/Greeting.java
@@ -4,6 +4,7 @@
package com.android.tools.r8.ir.optimize.inliner.testclasses;
+import com.android.tools.r8.NoAccessModification;
import com.android.tools.r8.NoVerticalClassMerging;
@NoVerticalClassMerging
@@ -14,8 +15,9 @@
}
}
+@NoAccessModification
@NoVerticalClassMerging
class GreetingBase {
- protected String greeting;
+ @NoAccessModification protected String greeting;
}
diff --git a/src/test/java/com/android/tools/r8/ir/optimize/inliner/testclasses/InliningIntoVisibilityBridgeTestClasses.java b/src/test/java/com/android/tools/r8/ir/optimize/inliner/testclasses/InliningIntoVisibilityBridgeTestClasses.java
index e856133..6732d39 100644
--- a/src/test/java/com/android/tools/r8/ir/optimize/inliner/testclasses/InliningIntoVisibilityBridgeTestClasses.java
+++ b/src/test/java/com/android/tools/r8/ir/optimize/inliner/testclasses/InliningIntoVisibilityBridgeTestClasses.java
@@ -5,6 +5,7 @@
package com.android.tools.r8.ir.optimize.inliner.testclasses;
import com.android.tools.r8.NeverInline;
+import com.android.tools.r8.NoAccessModification;
import com.android.tools.r8.NoVerticalClassMerging;
public class InliningIntoVisibilityBridgeTestClasses {
@@ -13,6 +14,7 @@
return InliningIntoVisibilityBridgeTestClassA.class;
}
+ @NoAccessModification
@NoVerticalClassMerging
static class InliningIntoVisibilityBridgeTestClassA {
diff --git a/src/test/java/com/android/tools/r8/ir/optimize/instanceofremoval/illegalaccess/IllegalAccessDeadInstanceOfTest.java b/src/test/java/com/android/tools/r8/ir/optimize/instanceofremoval/illegalaccess/IllegalAccessDeadInstanceOfTest.java
new file mode 100644
index 0000000..68b19e4
--- /dev/null
+++ b/src/test/java/com/android/tools/r8/ir/optimize/instanceofremoval/illegalaccess/IllegalAccessDeadInstanceOfTest.java
@@ -0,0 +1,70 @@
+// Copyright (c) 2023, 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.ir.optimize.instanceofremoval.illegalaccess;
+
+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.instanceofremoval.illegalaccess.pkg.A;
+import java.io.IOException;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.junit.runners.Parameterized;
+import org.junit.runners.Parameterized.Parameter;
+import org.junit.runners.Parameterized.Parameters;
+
+@RunWith(Parameterized.class)
+public class IllegalAccessDeadInstanceOfTest extends TestBase {
+
+ @Parameter(0)
+ public TestParameters parameters;
+
+ public IllegalAccessDeadInstanceOfTest() {}
+
+ @Parameters(name = "{0}")
+ public static TestParametersCollection data() {
+ return getTestParameters().withAllRuntimesAndApiLevels().build();
+ }
+
+ @Test
+ public void testReference() throws Exception {
+ testForRuntime(parameters)
+ .addProgramClasses(Main.class)
+ .addProgramClassFileData(getTransformedA())
+ .run(this.parameters.getRuntime(), Main.class)
+ .assertSuccessWithOutputLines("false");
+ }
+
+ @Test
+ public void testR8() throws Exception {
+ testForR8(parameters.getBackend())
+ .addProgramClasses(Main.class)
+ .addProgramClassFileData(getTransformedA())
+ .addKeepMainRule(Main.class)
+ .setMinApi(this.parameters)
+ .run(this.parameters.getRuntime(), Main.class)
+ .assertSuccessWithOutputLines("false");
+ }
+
+ private static byte[] getTransformedA() throws IOException {
+ return transformer(A.class).setClassAccessFlags(0).transform();
+ }
+
+ public static class Main {
+
+ public static void main(String[] args) {
+ System.out.println(check());
+ }
+
+ private static boolean check() {
+ Object o = null;
+ // A is transformed to be a non-public class in a different package.
+ if (o instanceof A) {
+ return true;
+ }
+ return false;
+ }
+ }
+}
diff --git a/src/test/java/com/android/tools/r8/ir/optimize/instanceofremoval/illegalaccess/pkg/A.java b/src/test/java/com/android/tools/r8/ir/optimize/instanceofremoval/illegalaccess/pkg/A.java
new file mode 100644
index 0000000..989006a
--- /dev/null
+++ b/src/test/java/com/android/tools/r8/ir/optimize/instanceofremoval/illegalaccess/pkg/A.java
@@ -0,0 +1,7 @@
+// Copyright (c) 2023, 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.ir.optimize.instanceofremoval.illegalaccess.pkg;
+
+public /* will be private */ class A {}
diff --git a/src/test/java/com/android/tools/r8/ir/optimize/outliner/b149971007/B149971007.java b/src/test/java/com/android/tools/r8/ir/optimize/outliner/b149971007/B149971007.java
index 7b02aea..156a17d 100644
--- a/src/test/java/com/android/tools/r8/ir/optimize/outliner/b149971007/B149971007.java
+++ b/src/test/java/com/android/tools/r8/ir/optimize/outliner/b149971007/B149971007.java
@@ -203,7 +203,11 @@
public static class FeatureAPI {
private static String featureClassName() {
- return FeatureAPI.class.getPackage().getName() + ".B149971007$FeatureClass";
+ String packageName =
+ System.currentTimeMillis() > 0
+ ? "com.android.tools.r8.ir.optimize.outliner.b149971007"
+ : null;
+ return packageName + ".B149971007$FeatureClass";
}
public static boolean hasFeature() {
diff --git a/src/test/java/com/android/tools/r8/ir/optimize/uninstantiatedtypes/NestedInterfaceMethodTest.java b/src/test/java/com/android/tools/r8/ir/optimize/uninstantiatedtypes/NestedInterfaceMethodTest.java
index 085002e..9626829 100644
--- a/src/test/java/com/android/tools/r8/ir/optimize/uninstantiatedtypes/NestedInterfaceMethodTest.java
+++ b/src/test/java/com/android/tools/r8/ir/optimize/uninstantiatedtypes/NestedInterfaceMethodTest.java
@@ -60,8 +60,11 @@
.enableNoVerticalClassMergingAnnotations()
.addOptionsModification(
options -> {
+ options.testing.enableLir();
options.enableDevirtualization = false;
options.inlinerOptions().enableInliningOfInvokesWithNullableReceivers = false;
+ // The checks for I being present rely on not simple inlining.
+ options.inlinerOptions().simpleInliningInstructionLimit = 3;
})
.setMinApi(AndroidApiLevel.B)
.run(parameters.getRuntime(), TestClass.class)
diff --git a/src/test/java/com/android/tools/r8/ir/optimize/uninstantiatedtypes/PrivateInstanceMethodCollisionTest.java b/src/test/java/com/android/tools/r8/ir/optimize/uninstantiatedtypes/PrivateInstanceMethodCollisionTest.java
index badd467..eff87f7 100644
--- a/src/test/java/com/android/tools/r8/ir/optimize/uninstantiatedtypes/PrivateInstanceMethodCollisionTest.java
+++ b/src/test/java/com/android/tools/r8/ir/optimize/uninstantiatedtypes/PrivateInstanceMethodCollisionTest.java
@@ -10,6 +10,7 @@
import com.android.tools.r8.NeverClassInline;
import com.android.tools.r8.NeverInline;
+import com.android.tools.r8.NoAccessModification;
import com.android.tools.r8.NoHorizontalClassMerging;
import com.android.tools.r8.NoMethodStaticizing;
import com.android.tools.r8.TestBase;
@@ -68,6 +69,10 @@
.enableNoMethodStaticizingAnnotations()
.minification(minification)
.allowAccessModification(allowAccessModification)
+ .applyIf(
+ allowAccessModification,
+ testBuilder -> testBuilder.addNoAccessModificationAnnotation(),
+ testBuilder -> testBuilder.enableNoAccessModificationAnnotationsForMembers())
.setMinApi(parameters)
.compile()
.inspect(this::verifyUninstantiatedArgumentsRemovedAndNoCollisions)
@@ -115,6 +120,7 @@
@NeverClassInline
static class A {
@NeverInline
+ @NoAccessModification
@NoMethodStaticizing
private void foo(B instantiated) {
System.out.println("A#foo(" + instantiated + ")");
diff --git a/src/test/java/com/android/tools/r8/ir/optimize/unusedarguments/PrivateInstanceMethodCollisionTest.java b/src/test/java/com/android/tools/r8/ir/optimize/unusedarguments/PrivateInstanceMethodCollisionTest.java
index 30c55f2..ccfb422 100644
--- a/src/test/java/com/android/tools/r8/ir/optimize/unusedarguments/PrivateInstanceMethodCollisionTest.java
+++ b/src/test/java/com/android/tools/r8/ir/optimize/unusedarguments/PrivateInstanceMethodCollisionTest.java
@@ -11,6 +11,7 @@
import com.android.tools.r8.KeepConstantArguments;
import com.android.tools.r8.NeverClassInline;
import com.android.tools.r8.NeverInline;
+import com.android.tools.r8.NoAccessModification;
import com.android.tools.r8.NoMethodStaticizing;
import com.android.tools.r8.TestBase;
import com.android.tools.r8.TestParameters;
@@ -68,6 +69,10 @@
.enableNoMethodStaticizingAnnotations()
.minification(minification)
.allowAccessModification(allowAccessModification)
+ .applyIf(
+ allowAccessModification,
+ testBuilder -> testBuilder.addNoAccessModificationAnnotation(),
+ testBuilder -> testBuilder.enableNoAccessModificationAnnotationsForMembers())
.setMinApi(parameters)
.compile()
.inspect(this::verifyUnusedArgumentsRemovedAndNoCollisions)
@@ -113,8 +118,10 @@
@NeverClassInline
static class A {
+
@KeepConstantArguments
@NeverInline
+ @NoAccessModification
@NoMethodStaticizing
private void foo(String used) {
System.out.println("A#foo(" + used + ")");
@@ -122,6 +129,7 @@
@KeepConstantArguments
@NeverInline
+ @NoAccessModification
@NoMethodStaticizing
void foo(String used, Object unused) {
System.out.println("A#foo(" + used + ", Object)");
diff --git a/src/test/java/com/android/tools/r8/ir/optimize/unusedarguments/UnusedArgumentsObjectTest.java b/src/test/java/com/android/tools/r8/ir/optimize/unusedarguments/UnusedArgumentsObjectTest.java
index 718a3e0..433bb6c 100644
--- a/src/test/java/com/android/tools/r8/ir/optimize/unusedarguments/UnusedArgumentsObjectTest.java
+++ b/src/test/java/com/android/tools/r8/ir/optimize/unusedarguments/UnusedArgumentsObjectTest.java
@@ -8,6 +8,7 @@
import com.android.tools.r8.NeverClassInline;
import com.android.tools.r8.NeverInline;
+import com.android.tools.r8.NoAccessModification;
import com.android.tools.r8.NoMethodStaticizing;
import com.android.tools.r8.R8FullTestBuilder;
import com.android.tools.r8.TestParameters;
@@ -59,18 +60,21 @@
}
@NeverInline
+ @NoAccessModification
@NoMethodStaticizing
private Object privateMethod(Object a) {
return a;
}
@NeverInline
+ @NoAccessModification
@NoMethodStaticizing
private Object privateMethod(Object a, Object b) {
return a;
}
@NeverInline
+ @NoAccessModification
@NoMethodStaticizing
private Object privateMethod(Object a, Object b, Object c) {
return a;
@@ -116,6 +120,7 @@
builder
.enableNeverClassInliningAnnotations()
.enableInliningAnnotations()
+ .enableNoAccessModificationAnnotationsForMembers()
.enableNoMethodStaticizingAnnotations();
}
diff --git a/src/test/java/com/android/tools/r8/ir/regalloc/IdenticalAfterRegisterAllocationTest.java b/src/test/java/com/android/tools/r8/ir/regalloc/IdenticalAfterRegisterAllocationTest.java
index 983dfdb..d2bf214 100644
--- a/src/test/java/com/android/tools/r8/ir/regalloc/IdenticalAfterRegisterAllocationTest.java
+++ b/src/test/java/com/android/tools/r8/ir/regalloc/IdenticalAfterRegisterAllocationTest.java
@@ -20,7 +20,7 @@
import com.android.tools.r8.ir.code.NumericType;
import com.android.tools.r8.ir.code.Position;
import com.android.tools.r8.ir.code.Value;
-import com.android.tools.r8.ir.conversion.MethodConversionOptions.MutableMethodConversionOptions;
+import com.android.tools.r8.ir.conversion.MethodConversionOptions;
import com.android.tools.r8.utils.InternalOptions;
import java.util.List;
import org.junit.Test;
@@ -126,6 +126,34 @@
// not equivalent.
assertFalse(
add0.identicalAfterRegisterAllocation(
- add1, allocator, new MutableMethodConversionOptions(allocator.options())));
+ add1,
+ allocator,
+ new MethodConversionOptions() {
+
+ @Override
+ public boolean isGeneratingDex() {
+ return true;
+ }
+
+ @Override
+ public boolean isGeneratingLir() {
+ return false;
+ }
+
+ @Override
+ public boolean isGeneratingClassFiles() {
+ return false;
+ }
+
+ @Override
+ public boolean isPeepholeOptimizationsEnabled() {
+ return false;
+ }
+
+ @Override
+ public boolean isStringSwitchConversionEnabled() {
+ return false;
+ }
+ }));
}
}
diff --git a/src/test/java/com/android/tools/r8/keepanno/CheckOptimizedOutAnnotationTest.java b/src/test/java/com/android/tools/r8/keepanno/CheckOptimizedOutAnnotationTest.java
new file mode 100644
index 0000000..adc446c
--- /dev/null
+++ b/src/test/java/com/android/tools/r8/keepanno/CheckOptimizedOutAnnotationTest.java
@@ -0,0 +1,129 @@
+// Copyright (c) 2023, 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.keepanno;
+
+import static com.android.tools.r8.utils.codeinspector.Matchers.isAbsent;
+import static com.android.tools.r8.utils.codeinspector.Matchers.isPresent;
+import static org.hamcrest.MatcherAssert.assertThat;
+import static org.junit.Assert.assertEquals;
+
+import com.android.tools.r8.DiagnosticsLevel;
+import com.android.tools.r8.DiagnosticsMatcher;
+import com.android.tools.r8.TestBase;
+import com.android.tools.r8.TestParameters;
+import com.android.tools.r8.TestParametersCollection;
+import com.android.tools.r8.errors.CheckDiscardDiagnostic;
+import com.android.tools.r8.keepanno.annotations.CheckOptimizedOut;
+import com.android.tools.r8.utils.AndroidApiLevel;
+import com.android.tools.r8.utils.StringUtils;
+import com.android.tools.r8.utils.codeinspector.CodeInspector;
+import com.google.common.collect.ImmutableList;
+import java.util.List;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.junit.runners.Parameterized;
+
+@RunWith(Parameterized.class)
+public class CheckOptimizedOutAnnotationTest extends TestBase {
+
+ static final String EXPECTED = StringUtils.lines("A", "B.baz");
+
+ private final TestParameters parameters;
+
+ @Parameterized.Parameters(name = "{0}")
+ public static TestParametersCollection data() {
+ return getTestParameters().withDefaultRuntimes().withApiLevel(AndroidApiLevel.B).build();
+ }
+
+ public CheckOptimizedOutAnnotationTest(TestParameters parameters) {
+ this.parameters = parameters;
+ }
+
+ @Test
+ public void testReference() throws Exception {
+ testForRuntime(parameters)
+ .addProgramClasses(getInputClasses())
+ .run(parameters.getRuntime(), TestClass.class)
+ .assertSuccessWithOutput(EXPECTED);
+ }
+
+ @Test
+ public void testWithRuleExtraction() throws Exception {
+ testForR8(parameters.getBackend())
+ .enableExperimentalKeepAnnotations()
+ .addProgramClasses(getInputClasses())
+ .addKeepMainRule(TestClass.class)
+ .setMinApi(parameters)
+ .allowDiagnosticWarningMessages()
+ .setDiagnosticsLevelModifier(
+ (level, diagnostic) ->
+ level == DiagnosticsLevel.ERROR ? DiagnosticsLevel.WARNING : level)
+ .compileWithExpectedDiagnostics(
+ diagnostics -> {
+ diagnostics
+ .assertOnlyWarnings()
+ .assertWarningsMatch(
+ DiagnosticsMatcher.diagnosticType(CheckDiscardDiagnostic.class));
+ CheckDiscardDiagnostic discard =
+ (CheckDiscardDiagnostic) diagnostics.getWarnings().get(0);
+ // The discard error should report one error for A.toString.
+ assertEquals(discard.getDiagnosticMessage(), 1, discard.getNumberOfFailures());
+ })
+ .run(parameters.getRuntime(), TestClass.class)
+ .assertSuccessWithOutput(EXPECTED)
+ .inspect(this::checkOutput);
+ }
+
+ public List<Class<?>> getInputClasses() {
+ return ImmutableList.of(TestClass.class, A.class, B.class);
+ }
+
+ private void checkOutput(CodeInspector inspector) {
+ // A is escaping in the call println(this) and remains in the residual.
+ assertThat(inspector.clazz(A.class), isPresent());
+ assertThat(inspector.clazz(A.class).uniqueMethodWithOriginalName("toString"), isPresent());
+
+ // Both foo and bar are respectively inlined and dead.
+ assertThat(inspector.clazz(A.class).uniqueMethodWithOriginalName("foo"), isAbsent());
+ assertThat(inspector.clazz(A.class).uniqueMethodWithOriginalName("bar"), isAbsent());
+
+ // B is fully inlined and not in the residual program.
+ assertThat(inspector.clazz(B.class), isAbsent());
+ }
+
+ static class A {
+
+ @CheckOptimizedOut
+ public void foo() {
+ System.out.println(this);
+ }
+
+ @CheckOptimizedOut
+ public void bar() {
+ System.out.println("A.bar");
+ }
+
+ @CheckOptimizedOut
+ @Override
+ public String toString() {
+ return "A";
+ }
+ }
+
+ @CheckOptimizedOut
+ static class B {
+
+ public void baz() {
+ System.out.println("B.baz");
+ }
+ }
+
+ static class TestClass {
+
+ public static void main(String[] args) throws Exception {
+ new A().foo();
+ new B().baz();
+ }
+ }
+}
diff --git a/src/test/java/com/android/tools/r8/keepanno/CheckRemovedAnnotationTest.java b/src/test/java/com/android/tools/r8/keepanno/CheckRemovedAnnotationTest.java
new file mode 100644
index 0000000..0ed35c1
--- /dev/null
+++ b/src/test/java/com/android/tools/r8/keepanno/CheckRemovedAnnotationTest.java
@@ -0,0 +1,122 @@
+// Copyright (c) 2023, 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.keepanno;
+
+import static com.android.tools.r8.utils.codeinspector.Matchers.isAbsent;
+import static com.android.tools.r8.utils.codeinspector.Matchers.isPresent;
+import static org.hamcrest.MatcherAssert.assertThat;
+import static org.junit.Assert.assertEquals;
+
+import com.android.tools.r8.DiagnosticsLevel;
+import com.android.tools.r8.DiagnosticsMatcher;
+import com.android.tools.r8.TestBase;
+import com.android.tools.r8.TestParameters;
+import com.android.tools.r8.TestParametersCollection;
+import com.android.tools.r8.errors.CheckDiscardDiagnostic;
+import com.android.tools.r8.keepanno.annotations.CheckRemoved;
+import com.android.tools.r8.utils.AndroidApiLevel;
+import com.android.tools.r8.utils.StringUtils;
+import com.android.tools.r8.utils.codeinspector.CodeInspector;
+import com.google.common.collect.ImmutableList;
+import java.util.List;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.junit.runners.Parameterized;
+
+@RunWith(Parameterized.class)
+public class CheckRemovedAnnotationTest extends TestBase {
+
+ static final String EXPECTED = StringUtils.lines("A.foo", "B.baz");
+
+ private final TestParameters parameters;
+
+ @Parameterized.Parameters(name = "{0}")
+ public static TestParametersCollection data() {
+ return getTestParameters().withDefaultRuntimes().withApiLevel(AndroidApiLevel.B).build();
+ }
+
+ public CheckRemovedAnnotationTest(TestParameters parameters) {
+ this.parameters = parameters;
+ }
+
+ @Test
+ public void testReference() throws Exception {
+ testForRuntime(parameters)
+ .addProgramClasses(getInputClasses())
+ .run(parameters.getRuntime(), TestClass.class)
+ .assertSuccessWithOutput(EXPECTED);
+ }
+
+ @Test
+ public void testWithRuleExtraction() throws Exception {
+ testForR8(parameters.getBackend())
+ .enableExperimentalKeepAnnotations()
+ .addProgramClasses(getInputClasses())
+ .addKeepMainRule(TestClass.class)
+ .setMinApi(parameters)
+ .allowDiagnosticWarningMessages()
+ .setDiagnosticsLevelModifier(
+ (level, diagnostic) ->
+ level == DiagnosticsLevel.ERROR ? DiagnosticsLevel.WARNING : level)
+ .compileWithExpectedDiagnostics(
+ diagnostics -> {
+ diagnostics
+ .assertOnlyWarnings()
+ .assertWarningsMatch(
+ DiagnosticsMatcher.diagnosticType(CheckDiscardDiagnostic.class));
+ CheckDiscardDiagnostic discard =
+ (CheckDiscardDiagnostic) diagnostics.getWarnings().get(0);
+ // The discard error should report for both the method A.foo and the class B.
+ assertEquals(discard.getDiagnosticMessage(), 2, discard.getNumberOfFailures());
+ })
+ .run(parameters.getRuntime(), TestClass.class)
+ .assertSuccessWithOutput(EXPECTED)
+ .inspect(this::checkOutput);
+ }
+
+ public List<Class<?>> getInputClasses() {
+ return ImmutableList.of(TestClass.class, A.class, B.class);
+ }
+
+ private void checkOutput(CodeInspector inspector) {
+ // Because 'foo' is annotated with @CheckRemoved it is soft-pinned to ensure it is fully
+ // removed. However, 'foo' is live and thus its method (and class) will be retained in the
+ // output.
+ assertThat(inspector.clazz(A.class), isPresent());
+ assertThat(inspector.clazz(A.class).uniqueMethodWithOriginalName("foo"), isPresent());
+ // Bar is unused and must be removed regardless of the soft-pinning.
+ assertThat(inspector.clazz(A.class).uniqueMethodWithOriginalName("bar"), isAbsent());
+ // B is used and soft-pinned, so it should be present.
+ assertThat(inspector.clazz(B.class), isPresent());
+ }
+
+ static class A {
+
+ @CheckRemoved
+ public void foo() {
+ System.out.println("A.foo");
+ }
+
+ @CheckRemoved
+ public void bar() {
+ System.out.println("A.bar");
+ }
+ }
+
+ @CheckRemoved
+ static class B {
+
+ public void baz() {
+ System.out.println("B.baz");
+ }
+ }
+
+ static class TestClass {
+
+ public static void main(String[] args) throws Exception {
+ new A().foo();
+ new B().baz();
+ }
+ }
+}
diff --git a/src/test/java/com/android/tools/r8/keepanno/KeepAccessVisibilityFlagsTest.java b/src/test/java/com/android/tools/r8/keepanno/KeepAccessVisibilityFlagsTest.java
index ac6b939..4505562 100644
--- a/src/test/java/com/android/tools/r8/keepanno/KeepAccessVisibilityFlagsTest.java
+++ b/src/test/java/com/android/tools/r8/keepanno/KeepAccessVisibilityFlagsTest.java
@@ -77,6 +77,7 @@
.enableExperimentalKeepAnnotations()
.addProgramClasses(getInputClasses())
.addKeepMainRule(TestClass.class)
+ .allowAccessModification()
.setMinApi(parameters)
.run(parameters.getRuntime(), TestClass.class)
.assertSuccessWithOutput(EXPECTED)
@@ -235,6 +236,11 @@
int mod = method.getModifiers();
if (!Modifier.isPublic(mod) && !Modifier.isProtected(mod)) {
privateOrPackagePrivateMethods.add(method.getName());
+ } else {
+ // TODO(b/131130038): The package-private method should not be publicized.
+ if (method.getName().equals("packagePrivateMethod")) {
+ privateOrPackagePrivateMethods.add(method.getName());
+ }
}
}
printSorted(privateOrPackagePrivateMethods);
diff --git a/src/test/java/com/android/tools/r8/keepanno/KeepEdgeAnnotationsTest.java b/src/test/java/com/android/tools/r8/keepanno/KeepEdgeAnnotationsTest.java
index 1864fba..e8696b7 100644
--- a/src/test/java/com/android/tools/r8/keepanno/KeepEdgeAnnotationsTest.java
+++ b/src/test/java/com/android/tools/r8/keepanno/KeepEdgeAnnotationsTest.java
@@ -19,6 +19,7 @@
import com.android.tools.r8.keepanno.asm.KeepEdgeWriter.AnnotationVisitorInterface;
import com.android.tools.r8.keepanno.ast.AnnotationConstants;
import com.android.tools.r8.keepanno.ast.AnnotationConstants.Edge;
+import com.android.tools.r8.keepanno.ast.KeepDeclaration;
import com.android.tools.r8.keepanno.ast.KeepEdge;
import com.android.tools.r8.keepanno.processor.KeepEdgeProcessor;
import com.android.tools.r8.keepanno.testsource.KeepClassAndDefaultConstructorSource;
@@ -221,9 +222,9 @@
.transform();
// Read the edges from each version.
- Set<KeepEdge> originalEdges = KeepEdgeReader.readKeepEdges(original);
- Set<KeepEdge> strippedEdges = KeepEdgeReader.readKeepEdges(stripped);
- Set<KeepEdge> readdedEdges = KeepEdgeReader.readKeepEdges(readded);
+ Set<KeepDeclaration> originalEdges = KeepEdgeReader.readKeepEdges(original);
+ Set<KeepDeclaration> strippedEdges = KeepEdgeReader.readKeepEdges(stripped);
+ Set<KeepDeclaration> readdedEdges = KeepEdgeReader.readKeepEdges(readded);
// The edges are compared to the "expected" ast to ensure we don't hide failures in reading or
// writing.
@@ -252,7 +253,7 @@
assertThat(synthesizedEdgesClass.annotation(Edge.CLASS.getTypeName()), isPresent());
String entry = ZipUtils.zipEntryNameForClass(synthesizedEdgesClass.getFinalReference());
byte[] bytes = ZipUtils.readSingleEntry(data, entry);
- Set<KeepEdge> keepEdges = KeepEdgeReader.readKeepEdges(bytes);
+ Set<KeepDeclaration> keepEdges = KeepEdgeReader.readKeepEdges(bytes);
assertEquals(KeepSourceEdges.getExpectedEdges(source), keepEdges);
}
}
diff --git a/src/test/java/com/android/tools/r8/keepanno/KeepInvalidForApiTest.java b/src/test/java/com/android/tools/r8/keepanno/KeepInvalidForApiTest.java
index 14cb1d1..97fd716 100644
--- a/src/test/java/com/android/tools/r8/keepanno/KeepInvalidForApiTest.java
+++ b/src/test/java/com/android/tools/r8/keepanno/KeepInvalidForApiTest.java
@@ -15,7 +15,7 @@
import com.android.tools.r8.keepanno.annotations.KeepForApi;
import com.android.tools.r8.keepanno.annotations.MemberAccessFlags;
import com.android.tools.r8.keepanno.asm.KeepEdgeReader;
-import com.android.tools.r8.keepanno.ast.KeepEdge;
+import com.android.tools.r8.keepanno.ast.KeepDeclaration;
import com.android.tools.r8.keepanno.ast.KeepEdgeException;
import com.android.tools.r8.keepanno.keeprules.KeepRuleExtractor;
import java.io.IOException;
@@ -41,7 +41,8 @@
}
private static List<String> extractRuleForClass(Class<?> clazz) throws IOException {
- Set<KeepEdge> keepEdges = KeepEdgeReader.readKeepEdges(ToolHelper.getClassAsBytes(clazz));
+ Set<KeepDeclaration> keepEdges =
+ KeepEdgeReader.readKeepEdges(ToolHelper.getClassAsBytes(clazz));
List<String> rules = new ArrayList<>();
KeepRuleExtractor extractor = new KeepRuleExtractor(rules::add);
keepEdges.forEach(extractor::extract);
diff --git a/src/test/java/com/android/tools/r8/keepanno/KeepInvalidTargetTest.java b/src/test/java/com/android/tools/r8/keepanno/KeepInvalidTargetTest.java
index f40ca56..943f9b7 100644
--- a/src/test/java/com/android/tools/r8/keepanno/KeepInvalidTargetTest.java
+++ b/src/test/java/com/android/tools/r8/keepanno/KeepInvalidTargetTest.java
@@ -16,7 +16,7 @@
import com.android.tools.r8.keepanno.annotations.KeepTarget;
import com.android.tools.r8.keepanno.annotations.UsesReflection;
import com.android.tools.r8.keepanno.asm.KeepEdgeReader;
-import com.android.tools.r8.keepanno.ast.KeepEdge;
+import com.android.tools.r8.keepanno.ast.KeepDeclaration;
import com.android.tools.r8.keepanno.ast.KeepEdgeException;
import com.android.tools.r8.keepanno.keeprules.KeepRuleExtractor;
import java.io.IOException;
@@ -42,7 +42,8 @@
}
private static List<String> extractRuleForClass(Class<?> clazz) throws IOException {
- Set<KeepEdge> keepEdges = KeepEdgeReader.readKeepEdges(ToolHelper.getClassAsBytes(clazz));
+ Set<KeepDeclaration> keepEdges =
+ KeepEdgeReader.readKeepEdges(ToolHelper.getClassAsBytes(clazz));
List<String> rules = new ArrayList<>();
KeepRuleExtractor extractor = new KeepRuleExtractor(rules::add);
keepEdges.forEach(extractor::extract);
diff --git a/src/test/java/com/android/tools/r8/keepanno/KeepMembersAccessFlagsTest.java b/src/test/java/com/android/tools/r8/keepanno/KeepMembersAccessFlagsTest.java
index d221ad9..a8cc34b 100644
--- a/src/test/java/com/android/tools/r8/keepanno/KeepMembersAccessFlagsTest.java
+++ b/src/test/java/com/android/tools/r8/keepanno/KeepMembersAccessFlagsTest.java
@@ -91,13 +91,17 @@
memberAccess = {MemberAccessFlags.PUBLIC, MemberAccessFlags.NON_STATIC})
})
void foo() throws Exception {
- for (Field field : getClass().getDeclaredFields()) {
+ String[] fieldNames = new String[] {"fieldA"};
+ for (String fieldName : fieldNames) {
+ Field field = getClass().getDeclaredField(fieldName);
int modifiers = field.getModifiers();
if (Modifier.isPublic(modifiers) && !Modifier.isStatic(modifiers)) {
System.out.println(field.get(this));
}
}
- for (Method method : getClass().getDeclaredMethods()) {
+ String[] methodNames = new String[] {"bar"};
+ for (String methodName : methodNames) {
+ Method method = getClass().getDeclaredMethod(methodName);
int modifiers = method.getModifiers();
if (Modifier.isPublic(modifiers) && !Modifier.isStatic(modifiers)) {
System.out.println(method.getName());
diff --git a/src/test/java/com/android/tools/r8/keepanno/KeepMethodsEmptyAccessFlagsTest.java b/src/test/java/com/android/tools/r8/keepanno/KeepMethodsEmptyAccessFlagsTest.java
index b8c55aa..9d064d7 100644
--- a/src/test/java/com/android/tools/r8/keepanno/KeepMethodsEmptyAccessFlagsTest.java
+++ b/src/test/java/com/android/tools/r8/keepanno/KeepMethodsEmptyAccessFlagsTest.java
@@ -29,6 +29,7 @@
public class KeepMethodsEmptyAccessFlagsTest extends TestBase {
static final String EXPECTED = StringUtils.lines("hello", "world");
+ static final String EXPECTED_ACCESS_MODIFICATION = StringUtils.lines("hello", "old", "world");
private final TestParameters parameters;
@@ -57,7 +58,11 @@
.addKeepMainRule(TestClass.class)
.setMinApi(parameters)
.run(parameters.getRuntime(), TestClass.class)
- .assertSuccessWithOutput(EXPECTED)
+ // TODO(b/131130038): Should not publicize kept method old().
+ .assertSuccessWithOutput(
+ parameters.isAccessModificationEnabledByDefault() && parameters.isDexRuntime()
+ ? EXPECTED_ACCESS_MODIFICATION
+ : EXPECTED)
.inspect(this::checkOutput);
}
@@ -111,7 +116,7 @@
static class TestClass {
- public static void main(String[] args) throws Exception {
+ public static void main(String[] args) {
new A().foo();
}
}
diff --git a/src/test/java/com/android/tools/r8/kotlin/KotlinIntrinsicsInlineChainTest.java b/src/test/java/com/android/tools/r8/kotlin/KotlinIntrinsicsInlineChainTest.java
index fde9d75..9e7c52a 100644
--- a/src/test/java/com/android/tools/r8/kotlin/KotlinIntrinsicsInlineChainTest.java
+++ b/src/test/java/com/android/tools/r8/kotlin/KotlinIntrinsicsInlineChainTest.java
@@ -81,8 +81,7 @@
long checkParameterIsNotNull = countCall(main, "checkParameterIsNotNull");
long checkNotNullParameter = countCall(main, "checkNotNullParameter");
if (kotlinc.getCompilerVersion().isGreaterThan(KotlinCompilerVersion.KOTLINC_1_6_0)) {
- assertEquals(
- BooleanUtils.intValue(!allowAccessModification), checkNotNullParameter);
+ assertEquals(0, checkNotNullParameter);
assertEquals(0, checkParameterIsNotNull);
} else if (parameters.isDexRuntime()
&& parameters.getApiLevel().isGreaterThanOrEqualTo(AndroidApiLevel.I)) {
diff --git a/src/test/java/com/android/tools/r8/kotlin/R8KotlinAccessorTest.java b/src/test/java/com/android/tools/r8/kotlin/R8KotlinAccessorTest.java
index 483f18b..cff6a7c 100644
--- a/src/test/java/com/android/tools/r8/kotlin/R8KotlinAccessorTest.java
+++ b/src/test/java/com/android/tools/r8/kotlin/R8KotlinAccessorTest.java
@@ -4,11 +4,7 @@
package com.android.tools.r8.kotlin;
-import static com.android.tools.r8.KotlinCompilerTool.KotlinCompilerVersion.KOTLINC_1_5_0;
-import static com.android.tools.r8.KotlinCompilerTool.KotlinCompilerVersion.KOTLINC_1_6_0;
import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertTrue;
import com.android.tools.r8.KotlinTestParameters;
import com.android.tools.r8.TestParameters;
@@ -16,14 +12,9 @@
import com.android.tools.r8.ToolHelper.ProcessResult;
import com.android.tools.r8.jasmin.JasminBuilder;
import com.android.tools.r8.jasmin.JasminBuilder.ClassBuilder;
-import com.android.tools.r8.kotlin.TestKotlinClass.AccessorKind;
import com.android.tools.r8.kotlin.TestKotlinClass.Visibility;
-import com.android.tools.r8.naming.MemberNaming;
-import com.android.tools.r8.utils.AndroidApiLevel;
import com.android.tools.r8.utils.AndroidApp;
import com.android.tools.r8.utils.BooleanUtils;
-import com.android.tools.r8.utils.codeinspector.ClassSubject;
-import com.android.tools.r8.utils.codeinspector.FieldSubject;
import java.nio.file.Path;
import java.util.Collection;
import java.util.Collections;
@@ -88,29 +79,7 @@
String mainClass = addMainToClasspath("properties.CompanionPropertiesKt",
"companionProperties_usePrimitiveProp");
runTest(PROPERTIES_PACKAGE_NAME, mainClass)
- .inspect(
- inspector -> {
- if (allowAccessModification) {
- checkClassIsRemoved(inspector, testedClass.getOuterClassName());
- return;
- }
-
- ClassSubject outerClass =
- checkClassIsKept(inspector, testedClass.getOuterClassName());
- String propertyName = "primitiveProp";
- FieldSubject fieldSubject = checkFieldIsKept(outerClass, "int", propertyName);
- assertTrue(fieldSubject.getField().accessFlags.isStatic());
-
- MemberNaming.MethodSignature getterAccessor =
- testedClass.getGetterAccessorForProperty(
- propertyName, AccessorKind.FROM_COMPANION);
- MemberNaming.MethodSignature setterAccessor =
- testedClass.getSetterAccessorForProperty(
- propertyName, AccessorKind.FROM_COMPANION);
- assertTrue(fieldSubject.getField().accessFlags.isPrivate());
- checkMethodIsKept(outerClass, getterAccessor);
- checkMethodIsRemoved(outerClass, setterAccessor);
- });
+ .inspect(inspector -> checkClassIsRemoved(inspector, testedClass.getOuterClassName()));
}
@Test
@@ -119,31 +88,7 @@
String mainClass = addMainToClasspath("properties.CompanionPropertiesKt",
"companionProperties_usePrivateProp");
runTest(PROPERTIES_PACKAGE_NAME, mainClass)
- .inspect(
- inspector -> {
- if (allowAccessModification) {
- checkClassIsRemoved(inspector, testedClass.getOuterClassName());
- return;
- }
-
- ClassSubject outerClass =
- checkClassIsKept(inspector, testedClass.getOuterClassName());
- String propertyName = "privateProp";
- FieldSubject fieldSubject =
- checkFieldIsKept(outerClass, JAVA_LANG_STRING, propertyName);
- assertTrue(fieldSubject.getField().accessFlags.isStatic());
-
- MemberNaming.MethodSignature getterAccessor =
- testedClass.getGetterAccessorForProperty(
- propertyName, AccessorKind.FROM_COMPANION);
- MemberNaming.MethodSignature setterAccessor =
- testedClass.getSetterAccessorForProperty(
- propertyName, AccessorKind.FROM_COMPANION);
- assertTrue(fieldSubject.getField().accessFlags.isPrivate());
-
- checkMethodIsKept(outerClass, getterAccessor);
- checkMethodIsRemoved(outerClass, setterAccessor);
- });
+ .inspect(inspector -> checkClassIsRemoved(inspector, testedClass.getOuterClassName()));
}
@Test
@@ -152,31 +97,7 @@
String mainClass = addMainToClasspath("properties.CompanionPropertiesKt",
"companionProperties_useInternalProp");
runTest(PROPERTIES_PACKAGE_NAME, mainClass)
- .inspect(
- inspector -> {
- if (allowAccessModification) {
- checkClassIsRemoved(inspector, testedClass.getOuterClassName());
- return;
- }
-
- ClassSubject outerClass =
- checkClassIsKept(inspector, testedClass.getOuterClassName());
- String propertyName = "internalProp";
- FieldSubject fieldSubject =
- checkFieldIsKept(outerClass, JAVA_LANG_STRING, propertyName);
- assertTrue(fieldSubject.getField().accessFlags.isStatic());
-
- MemberNaming.MethodSignature getterAccessor =
- testedClass.getGetterAccessorForProperty(
- propertyName, AccessorKind.FROM_COMPANION);
- MemberNaming.MethodSignature setterAccessor =
- testedClass.getSetterAccessorForProperty(
- propertyName, AccessorKind.FROM_COMPANION);
-
- assertTrue(fieldSubject.getField().accessFlags.isPrivate());
- checkMethodIsKept(outerClass, getterAccessor);
- checkMethodIsRemoved(outerClass, setterAccessor);
- });
+ .inspect(inspector -> checkClassIsRemoved(inspector, testedClass.getOuterClassName()));
}
@Test
@@ -185,31 +106,7 @@
String mainClass = addMainToClasspath("properties.CompanionPropertiesKt",
"companionProperties_usePublicProp");
runTest(PROPERTIES_PACKAGE_NAME, mainClass)
- .inspect(
- inspector -> {
- if (allowAccessModification) {
- checkClassIsRemoved(inspector, testedClass.getOuterClassName());
- return;
- }
-
- ClassSubject outerClass =
- checkClassIsKept(inspector, testedClass.getOuterClassName());
- String propertyName = "publicProp";
- FieldSubject fieldSubject =
- checkFieldIsKept(outerClass, JAVA_LANG_STRING, propertyName);
- assertTrue(fieldSubject.getField().accessFlags.isStatic());
-
- MemberNaming.MethodSignature getterAccessor =
- testedClass.getGetterAccessorForProperty(
- propertyName, AccessorKind.FROM_COMPANION);
- MemberNaming.MethodSignature setterAccessor =
- testedClass.getSetterAccessorForProperty(
- propertyName, AccessorKind.FROM_COMPANION);
-
- assertTrue(fieldSubject.getField().accessFlags.isPrivate());
- checkMethodIsKept(outerClass, getterAccessor);
- checkMethodIsRemoved(outerClass, setterAccessor);
- });
+ .inspect(inspector -> checkClassIsRemoved(inspector, testedClass.getOuterClassName()));
}
@Test
@@ -218,32 +115,7 @@
String mainClass = addMainToClasspath("properties.CompanionLateInitPropertiesKt",
"companionLateInitProperties_usePrivateLateInitProp");
runTest(PROPERTIES_PACKAGE_NAME, mainClass)
- .inspect(
- inspector -> {
- if (allowAccessModification
- || (testParameters.isDexRuntime()
- && testParameters.getApiLevel().isGreaterThan(AndroidApiLevel.B))) {
- checkClassIsRemoved(inspector, testedClass.getOuterClassName());
- return;
- }
-
- ClassSubject outerClass =
- checkClassIsKept(inspector, testedClass.getOuterClassName());
- String propertyName = "privateLateInitProp";
- FieldSubject fieldSubject =
- checkFieldIsKept(outerClass, JAVA_LANG_STRING, propertyName);
- assertTrue(fieldSubject.getField().accessFlags.isStatic());
-
- MemberNaming.MethodSignature getterAccessor =
- testedClass.getGetterAccessorForProperty(
- propertyName, AccessorKind.FROM_COMPANION);
- MemberNaming.MethodSignature setterAccessor =
- testedClass.getSetterAccessorForProperty(
- propertyName, AccessorKind.FROM_COMPANION);
- assertTrue(fieldSubject.getField().accessFlags.isPrivate());
- checkMethodIsKept(outerClass, getterAccessor);
- checkMethodIsRemoved(outerClass, setterAccessor);
- });
+ .inspect(inspector -> checkClassIsRemoved(inspector, testedClass.getOuterClassName()));
}
@Test
@@ -314,28 +186,7 @@
String mainClass = addMainToClasspath(testedClass.className + "Kt",
"usePrivatePropertyAccessorFromInnerClass");
runTest("accessors", mainClass)
- .inspect(
- inspector -> {
- if (allowAccessModification) {
- checkClassIsRemoved(inspector, testedClass.getClassName());
- return;
- }
-
- ClassSubject classSubject = checkClassIsKept(inspector, testedClass.getClassName());
-
- String propertyName = "privateProp";
- FieldSubject fieldSubject =
- checkFieldIsKept(classSubject, JAVA_LANG_STRING, propertyName);
- assertFalse(fieldSubject.getField().accessFlags.isStatic());
-
- MemberNaming.MethodSignature getterAccessor =
- testedClass.getGetterAccessorForProperty(propertyName, AccessorKind.FROM_INNER);
- MemberNaming.MethodSignature setterAccessor =
- testedClass.getSetterAccessorForProperty(propertyName, AccessorKind.FROM_INNER);
- assertTrue(fieldSubject.getField().accessFlags.isPrivate());
- checkMethodIsKept(classSubject, getterAccessor);
- checkMethodIsRemoved(classSubject, setterAccessor);
- });
+ .inspect(inspector -> checkClassIsRemoved(inspector, testedClass.getClassName()));
}
@Test
@@ -362,40 +213,7 @@
String mainClass = addMainToClasspath(testedClass.className + "Kt",
"usePropertyAccessorFromLambda");
runTest("accessors", mainClass)
- .inspect(
- inspector -> {
- if (allowAccessModification) {
- checkClassIsRemoved(inspector, testedClass.getClassName());
- return;
- }
-
- ClassSubject classSubject = checkClassIsKept(inspector, testedClass.getClassName());
-
- // For kotlin 1.6 we completely remove the field and accessors. We are unable to
- // remove the entire class because we are not reprocessing TestMain.main.
- String propertyName = "property";
- if (kotlinParameters.isNewerThanOrEqualTo(KOTLINC_1_6_0)) {
- FieldSubject field = classSubject.field(JAVA_LANG_STRING, propertyName);
- assertFalse(field.isPresent());
- return;
- }
-
- FieldSubject fieldSubject =
- checkFieldIsKept(classSubject, JAVA_LANG_STRING, propertyName);
- assertFalse(fieldSubject.getField().accessFlags.isStatic());
- assertTrue(fieldSubject.getField().accessFlags.isPrivate());
-
- AccessorKind accessorKind =
- kotlinc.getCompilerVersion().isGreaterThanOrEqualTo(KOTLINC_1_5_0)
- ? AccessorKind.FROM_INNER
- : AccessorKind.FROM_LAMBDA;
- MemberNaming.MethodSignature getterAccessor =
- testedClass.getGetterAccessorForProperty(propertyName, accessorKind);
- MemberNaming.MethodSignature setterAccessor =
- testedClass.getSetterAccessorForProperty(propertyName, accessorKind);
- checkMethodIsKept(classSubject, getterAccessor);
- checkMethodIsKept(classSubject, setterAccessor);
- });
+ .inspect(inspector -> checkClassIsRemoved(inspector, testedClass.getClassName()));
}
@Test
diff --git a/src/test/java/com/android/tools/r8/kotlin/R8KotlinDataClassTest.java b/src/test/java/com/android/tools/r8/kotlin/R8KotlinDataClassTest.java
index 3584975..0ff1942 100644
--- a/src/test/java/com/android/tools/r8/kotlin/R8KotlinDataClassTest.java
+++ b/src/test/java/com/android/tools/r8/kotlin/R8KotlinDataClassTest.java
@@ -4,8 +4,6 @@
package com.android.tools.r8.kotlin;
-import static com.android.tools.r8.KotlinCompilerTool.KotlinCompilerVersion.KOTLINC_1_5_0;
-import static com.android.tools.r8.KotlinCompilerTool.KotlinCompilerVersion.KOTLINC_1_6_0;
import com.android.tools.r8.KotlinTestParameters;
import com.android.tools.r8.TestParameters;
@@ -122,7 +120,6 @@
@Test
public void testDataclassCopyDefaultIsRemovedIfNotUsed() throws Exception {
- boolean useLir = true;
String mainClassName = "dataclass.MainCopyKt";
MethodSignature testMethodSignature =
new MethodSignature("testDataClassCopyWithDefault", "void", Collections.emptyList());
@@ -132,29 +129,8 @@
testBuilder ->
testBuilder
.addKeepRules(keepClassMethod(mainClassName, testMethodSignature))
- .addOptionsModification(
- o -> {
- if (useLir) {
- o.testing.enableLir();
- } else {
- o.testing.disableLir();
- }
- })
+ .addOptionsModification(o -> o.testing.enableLir())
.addOptionsModification(disableClassInliner))
- .inspect(
- inspector -> {
- // TODO(b/210828502): Investigate why Person is not removed with kotlin 1.7 and 1.8.
- // It looks like this is related to size estimates as using LIR changes the result.
- if (allowAccessModification
- && (kotlinc.isOneOf(KOTLINC_1_5_0, KOTLINC_1_6_0)
- || testParameters.isDexRuntime()
- || useLir)) {
- checkClassIsRemoved(inspector, TEST_DATA_CLASS.getClassName());
- } else {
- ClassSubject dataClass =
- checkClassIsKept(inspector, TEST_DATA_CLASS.getClassName());
- checkMethodIsRemoved(dataClass, COPY_DEFAULT_METHOD);
- }
- });
+ .inspect(inspector -> checkClassIsRemoved(inspector, TEST_DATA_CLASS.getClassName()));
}
}
diff --git a/src/test/java/com/android/tools/r8/kotlin/R8KotlinPropertiesTest.java b/src/test/java/com/android/tools/r8/kotlin/R8KotlinPropertiesTest.java
index 527e568..ba11cfa 100644
--- a/src/test/java/com/android/tools/r8/kotlin/R8KotlinPropertiesTest.java
+++ b/src/test/java/com/android/tools/r8/kotlin/R8KotlinPropertiesTest.java
@@ -131,7 +131,7 @@
testBuilder -> testBuilder.addOptionsModification(disableAggressiveClassOptimizations))
.inspect(
inspector -> {
- if (allowAccessModification) {
+ if (testParameters.isAccessModificationEnabled(allowAccessModification)) {
checkClassIsRemoved(inspector, MUTABLE_PROPERTY_CLASS.getClassName());
return;
}
@@ -161,7 +161,7 @@
testBuilder -> testBuilder.addOptionsModification(disableAggressiveClassOptimizations))
.inspect(
inspector -> {
- if (allowAccessModification) {
+ if (testParameters.isAccessModificationEnabled(allowAccessModification)) {
checkClassIsRemoved(inspector, MUTABLE_PROPERTY_CLASS.getClassName());
return;
}
@@ -189,7 +189,7 @@
testBuilder -> testBuilder.addOptionsModification(disableAggressiveClassOptimizations))
.inspect(
inspector -> {
- if (allowAccessModification) {
+ if (testParameters.isAccessModificationEnabled(allowAccessModification)) {
checkClassIsRemoved(inspector, MUTABLE_PROPERTY_CLASS.getClassName());
return;
}
@@ -217,7 +217,7 @@
testBuilder -> testBuilder.addOptionsModification(disableAggressiveClassOptimizations))
.inspect(
inspector -> {
- if (allowAccessModification) {
+ if (testParameters.isAccessModificationEnabled(allowAccessModification)) {
checkClassIsRemoved(inspector, MUTABLE_PROPERTY_CLASS.getClassName());
return;
}
@@ -245,7 +245,7 @@
testBuilder -> testBuilder.addOptionsModification(disableAggressiveClassOptimizations))
.inspect(
inspector -> {
- if (allowAccessModification) {
+ if (testParameters.isAccessModificationEnabled(allowAccessModification)) {
checkClassIsRemoved(inspector, MUTABLE_PROPERTY_CLASS.getClassName());
return;
}
@@ -285,7 +285,7 @@
testBuilder -> testBuilder.addOptionsModification(disableAggressiveClassOptimizations))
.inspect(
inspector -> {
- if (allowAccessModification) {
+ if (testParameters.isAccessModificationEnabled(allowAccessModification)) {
checkClassIsRemoved(inspector, LATE_INIT_PROPERTY_CLASS.getClassName());
return;
}
@@ -364,7 +364,7 @@
testBuilder -> testBuilder.addOptionsModification(disableAggressiveClassOptimizations))
.inspect(
inspector -> {
- if (allowAccessModification) {
+ if (testParameters.isAccessModificationEnabled(allowAccessModification)) {
checkClassIsRemoved(inspector, USER_DEFINED_PROPERTY_CLASS.getClassName());
return;
}
@@ -397,7 +397,7 @@
inspector -> {
checkClassIsRemoved(inspector, COMPANION_PROPERTY_CLASS.getClassName());
- if (allowAccessModification) {
+ if (testParameters.isAccessModificationEnabled(allowAccessModification)) {
checkClassIsRemoved(inspector, "properties.CompanionProperties");
return;
}
@@ -423,7 +423,7 @@
inspector -> {
checkClassIsRemoved(inspector, COMPANION_PROPERTY_CLASS.getClassName());
- if (allowAccessModification) {
+ if (testParameters.isAccessModificationEnabled(allowAccessModification)) {
checkClassIsRemoved(inspector, "properties.CompanionProperties");
return;
}
@@ -454,7 +454,7 @@
testBuilder -> testBuilder.addOptionsModification(disableAggressiveClassOptimizations))
.inspect(
inspector -> {
- if (allowAccessModification) {
+ if (testParameters.isAccessModificationEnabled(allowAccessModification)) {
checkClassIsRemoved(inspector, "properties.CompanionProperties");
return;
}
@@ -482,7 +482,7 @@
inspector -> {
checkClassIsRemoved(inspector, COMPANION_PROPERTY_CLASS.getClassName());
- if (allowAccessModification) {
+ if (testParameters.isAccessModificationEnabled(allowAccessModification)) {
checkClassIsRemoved(inspector, "properties.CompanionProperties");
return;
}
@@ -510,7 +510,7 @@
inspector -> {
checkClassIsRemoved(inspector, testedClass.getClassName());
- if (allowAccessModification
+ if (testParameters.isAccessModificationEnabled(allowAccessModification)
|| (testParameters.isDexRuntime()
&& testParameters.getApiLevel().isGreaterThan(AndroidApiLevel.B))) {
checkClassIsRemoved(inspector, testedClass.getOuterClassName());
@@ -572,7 +572,7 @@
testBuilder -> testBuilder.addOptionsModification(disableAggressiveClassOptimizations))
.inspect(
inspector -> {
- if (allowAccessModification) {
+ if (testParameters.isAccessModificationEnabled(allowAccessModification)) {
checkClassIsRemoved(inspector, testedClass.getClassName());
return;
}
@@ -601,7 +601,7 @@
testBuilder -> testBuilder.addOptionsModification(disableAggressiveClassOptimizations))
.inspect(
inspector -> {
- if (allowAccessModification) {
+ if (testParameters.isAccessModificationEnabled(allowAccessModification)) {
checkClassIsRemoved(inspector, testedClass.getClassName());
return;
}
@@ -634,7 +634,7 @@
testBuilder -> testBuilder.addOptionsModification(disableAggressiveClassOptimizations))
.inspect(
inspector -> {
- if (allowAccessModification) {
+ if (testParameters.isAccessModificationEnabled(allowAccessModification)) {
checkClassIsRemoved(inspector, testedClass.getClassName());
return;
}
@@ -666,7 +666,7 @@
testBuilder -> testBuilder.addOptionsModification(disableAggressiveClassOptimizations))
.inspect(
inspector -> {
- if (allowAccessModification) {
+ if (testParameters.isAccessModificationEnabled(allowAccessModification)) {
checkClassIsRemoved(inspector, testedClass.getClassName());
return;
}
@@ -698,7 +698,7 @@
testBuilder -> testBuilder.addOptionsModification(disableAggressiveClassOptimizations))
.inspect(
inspector -> {
- if (allowAccessModification) {
+ if (testParameters.isAccessModificationEnabled(allowAccessModification)) {
checkClassIsRemoved(inspector, testedClass.getClassName());
return;
}
@@ -755,7 +755,7 @@
testBuilder -> testBuilder.addOptionsModification(disableAggressiveClassOptimizations))
.inspect(
inspector -> {
- if (allowAccessModification) {
+ if (testParameters.isAccessModificationEnabled(allowAccessModification)) {
checkClassIsRemoved(inspector, testedClass.getClassName());
return;
}
@@ -785,7 +785,7 @@
testBuilder -> testBuilder.addOptionsModification(disableAggressiveClassOptimizations))
.inspect(
inspector -> {
- if (allowAccessModification) {
+ if (testParameters.isAccessModificationEnabled(allowAccessModification)) {
checkClassIsRemoved(inspector, testedClass.getClassName());
return;
}
@@ -817,7 +817,7 @@
testBuilder -> testBuilder.addOptionsModification(disableAggressiveClassOptimizations))
.inspect(
inspector -> {
- if (allowAccessModification) {
+ if (testParameters.isAccessModificationEnabled(allowAccessModification)) {
checkClassIsRemoved(inspector, testedClass.getClassName());
return;
}
@@ -850,7 +850,7 @@
testBuilder -> testBuilder.addOptionsModification(disableAggressiveClassOptimizations))
.inspect(
inspector -> {
- if (allowAccessModification) {
+ if (testParameters.isAccessModificationEnabled(allowAccessModification)) {
checkClassIsRemoved(inspector, testedClass.getClassName());
return;
}
@@ -882,7 +882,7 @@
testBuilder -> testBuilder.addOptionsModification(disableAggressiveClassOptimizations))
.inspect(
inspector -> {
- if (allowAccessModification) {
+ if (testParameters.isAccessModificationEnabled(allowAccessModification)) {
checkClassIsRemoved(inspector, testedClass.getClassName());
return;
}
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 695849f..2007fa0 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
@@ -107,7 +107,7 @@
getTestName(), "MainKt$test2$$inlined$process$3"),
lambdasInInput.getKStyleLambdaReferenceFromTypeName(
getTestName(), "MainKt$test2$$inlined$process$4"));
- if (allowAccessModification) {
+ if (parameters.isAccessModificationEnabled(allowAccessModification)) {
kStyleLambdaMergeGroup.add(
lambdasInInput.getKStyleLambdaReferenceFromTypeName(
getTestName(), "MainKt$test2$lambda$1"));
diff --git a/src/test/java/com/android/tools/r8/kotlin/lambda/KotlinLambdaMergingTrivialKotlinStyleTest.java b/src/test/java/com/android/tools/r8/kotlin/lambda/KotlinLambdaMergingTrivialKotlinStyleTest.java
index 2dc729e..580b42c 100644
--- a/src/test/java/com/android/tools/r8/kotlin/lambda/KotlinLambdaMergingTrivialKotlinStyleTest.java
+++ b/src/test/java/com/android/tools/r8/kotlin/lambda/KotlinLambdaMergingTrivialKotlinStyleTest.java
@@ -93,7 +93,7 @@
assertEquals(0, lambdasInInput.getNumberOfJStyleLambdas());
assertEquals(28, lambdasInInput.getNumberOfKStyleLambdas());
- if (!allowAccessModification) {
+ if (!parameters.isAccessModificationEnabled(allowAccessModification)) {
// Only a subset of all K-style Kotlin lambdas are merged without -allowaccessmodification.
Set<ClassReference> unmergedLambdas =
ImmutableSet.of(
diff --git a/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataStripTest.java b/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataStripTest.java
index c5b5ff4..90df133 100644
--- a/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataStripTest.java
+++ b/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataStripTest.java
@@ -71,9 +71,5 @@
// Main class is kept, hence the presence of Metadata.
AnnotationSubject annotationSubject = clazz.annotation(METADATA_TYPE);
assertThat(annotationSubject, isPresent());
- ClassSubject impl1 = inspector.clazz(implementer1ClassName);
- assertThat(impl1, isPresentAndRenamed());
- // All other classes can be renamed, hence the absence of Metadata;
- assertThat(impl1.annotation(METADATA_TYPE), not(isPresent()));
}
}
diff --git a/src/test/java/com/android/tools/r8/mappingcompose/ComposeOutlineCallSiteInlinedTest.java b/src/test/java/com/android/tools/r8/mappingcompose/ComposeOutlineCallSiteInlinedTest.java
new file mode 100644
index 0000000..2e55faf
--- /dev/null
+++ b/src/test/java/com/android/tools/r8/mappingcompose/ComposeOutlineCallSiteInlinedTest.java
@@ -0,0 +1,112 @@
+// Copyright (c) 2023, 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.mappingcompose;
+
+import static com.android.tools.r8.mappingcompose.ComposeTestHelpers.doubleToSingleQuote;
+import static org.junit.Assert.assertEquals;
+
+import com.android.tools.r8.TestBase;
+import com.android.tools.r8.TestParameters;
+import com.android.tools.r8.TestParametersCollection;
+import com.android.tools.r8.naming.ClassNameMapper;
+import com.android.tools.r8.naming.MappingComposer;
+import com.android.tools.r8.utils.StringUtils;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.junit.runners.Parameterized;
+import org.junit.runners.Parameterized.Parameters;
+
+/** This is a regression test for b/288117378. */
+@RunWith(Parameterized.class)
+public class ComposeOutlineCallSiteInlinedTest extends TestBase {
+
+ @Parameters(name = "{0}")
+ public static TestParametersCollection data() {
+ return getTestParameters().withNoneRuntime().build();
+ }
+
+ public ComposeOutlineCallSiteInlinedTest(TestParameters parameters) {
+ parameters.assertNoneRuntime();
+ }
+
+ private static final String mappingFoo =
+ StringUtils.unixLines(
+ "# {'id':'com.android.tools.r8.mapping','version':'2.2'}",
+ "com.android.tools.r8.D8Command -> com.android.tools.r8.D8Command:",
+ "# {'id':'sourceFile','fileName':'D8Command.java'}",
+ " 1:1:java.util.List getParseFlagsInformation():592:592 -> getParseFlagsInformation",
+ " 1:1:foo.MapConsumer lambda$bar$0(foo.StringConsumer):0:0 -> lambda$bar$0",
+ " # {'id':'com.android.tools.r8.residualsignature',"
+ + "'signature':'(Lfoo/StringConsumer;)Lfoo/internal/MapConsumer;'}",
+ " # {'id':'com.android.tools.r8.outlineCallsite',"
+ + "'positions':{'23':724,'24':725,'25':726},"
+ + "'outline':'Lfoo/SomeClass;outline(JJJ)V'}",
+ " 724:724:foo.MapConsumer lambda$bar$0(foo.StringConsumer):720:720 -> lambda$bar$0",
+ " 725:725:foo.PGMapConsumer foo.PGMapConsumer.builder():52:52 -> lambda$bar$0",
+ " 725:725:foo.MapConsumer lambda$bar$0(foo.StringConsumer):720 -> lambda$bar$0",
+ " 726:726:void foo.PGMapConsumer.<init>():55:55 -> lambda$bar$0",
+ " 726:726:foo.PGMapConsumer foo.PGMapConsumer.builder():52 -> lambda$bar$0",
+ " 726:726:foo.MapConsumer lambda$bar$0(foo.StringConsumer):720 -> lambda$bar$0");
+ private static final String mappingBar =
+ StringUtils.unixLines(
+ "# {'id':'com.android.tools.r8.mapping','version':'2.2'}",
+ "com.android.tools.r8.D8Command -> com.android.tools.r8.D8Command:",
+ "# {'id':'sourceFile','fileName':'SourceFile'}",
+ " 1:724:foo.internal.MapConsumer lambda$bar$0(foo.StringConsumer):0:723"
+ + " -> lambda$bar$0$com-android-tools-r8-D8Command",
+ " 1:724:foo.internal.MapConsumer"
+ + " lambda$bar$0$com-android-tools-r8-D8Command(foo.StringConsumer):0"
+ + " -> lambda$bar$0$com-android-tools-r8-D8Command",
+ " # {'id':'com.android.tools.r8.synthesized'}");
+ private static final String mappingResult =
+ StringUtils.unixLines(
+ "# {'id':'com.android.tools.r8.mapping','version':'2.2'}",
+ "com.android.tools.r8.D8Command -> com.android.tools.r8.D8Command:",
+ "# {'id':'sourceFile','fileName':'D8Command.java'}",
+ // TODO(b/288117378): This 1:1 range corresponds to position 0 in the residual of R8. This
+ // should probably not have the `getParseFlagsInformation` inline frame.
+ " 1:1:java.util.List getParseFlagsInformation():592:592 -> getParseFlagsInformation",
+ " 1:1:foo.internal.MapConsumer lambda$bar$0(foo.StringConsumer):0:0 ->"
+ + " lambda$bar$0$com-android-tools-r8-D8Command",
+ " 1:1:foo.internal.MapConsumer"
+ + " lambda$bar$0$com-android-tools-r8-D8Command(foo.StringConsumer):0:0 ->"
+ + " lambda$bar$0$com-android-tools-r8-D8Command",
+ " # {'id':'com.android.tools.r8.synthesized'}",
+ " 2:2:foo.MapConsumer lambda$bar$0(foo.StringConsumer):0:0 ->"
+ + " lambda$bar$0$com-android-tools-r8-D8Command",
+ " # {'id':'com.android.tools.r8.residualsignature',"
+ + "'signature':'(Lfoo/StringConsumer;)Lfoo/internal/MapConsumer;'}",
+ " # {'id':'com.android.tools.r8.outlineCallsite',"
+ + "'positions':{'23':725,'24':726,'25':727},"
+ + "'outline':'Lfoo/SomeClass;outline(JJJ)V'}",
+ " 2:2:foo.internal.MapConsumer"
+ + " lambda$bar$0$com-android-tools-r8-D8Command(foo.StringConsumer):0:0 ->"
+ + " lambda$bar$0$com-android-tools-r8-D8Command",
+ " 3:724:foo.internal.MapConsumer lambda$bar$0(foo.StringConsumer) ->"
+ + " lambda$bar$0$com-android-tools-r8-D8Command",
+ " 3:724:foo.internal.MapConsumer"
+ + " lambda$bar$0$com-android-tools-r8-D8Command(foo.StringConsumer):0:0 ->"
+ + " lambda$bar$0$com-android-tools-r8-D8Command",
+ " 725:725:foo.internal.MapConsumer"
+ + " lambda$bar$0$com-android-tools-r8-D8Command(foo.StringConsumer):720:720 ->"
+ + " lambda$bar$0$com-android-tools-r8-D8Command",
+ " 726:726:foo.PGMapConsumer foo.PGMapConsumer.builder():52:52 -> lambda$bar$0",
+ " 726:726:foo.internal.MapConsumer"
+ + " lambda$bar$0$com-android-tools-r8-D8Command(foo.StringConsumer):720 ->"
+ + " lambda$bar$0$com-android-tools-r8-D8Command",
+ " 727:727:void foo.PGMapConsumer.<init>():55:55 -> lambda$bar$0",
+ " 727:727:foo.PGMapConsumer foo.PGMapConsumer.builder():52 -> lambda$bar$0",
+ " 727:727:foo.internal.MapConsumer"
+ + " lambda$bar$0$com-android-tools-r8-D8Command(foo.StringConsumer):720 ->"
+ + " lambda$bar$0$com-android-tools-r8-D8Command");
+
+ @Test
+ public void testCompose() throws Exception {
+ ClassNameMapper mappingForFoo = ClassNameMapper.mapperFromString(mappingFoo);
+ ClassNameMapper mappingForBar = ClassNameMapper.mapperFromString(mappingBar);
+ String composed = MappingComposer.compose(mappingForFoo, mappingForBar);
+ assertEquals(mappingResult, doubleToSingleQuote(composed));
+ }
+}
diff --git a/src/test/java/com/android/tools/r8/memberrebinding/IllegalFieldRebindingTest.java b/src/test/java/com/android/tools/r8/memberrebinding/IllegalFieldRebindingTest.java
index 1dbbec9..841cc0f 100644
--- a/src/test/java/com/android/tools/r8/memberrebinding/IllegalFieldRebindingTest.java
+++ b/src/test/java/com/android/tools/r8/memberrebinding/IllegalFieldRebindingTest.java
@@ -54,6 +54,7 @@
.addInnerClasses(IllegalFieldRebindingTest.class)
.addInnerClasses(IllegalFieldRebindingTestClasses.class)
.addKeepMainRule(TestClass.class)
+ .enableNoAccessModificationAnnotationsForClasses()
.enableNoVerticalClassMergingAnnotations()
.setMinApi(parameters)
.run(parameters.getRuntime(), TestClass.class)
@@ -87,6 +88,7 @@
.addInnerClasses(IllegalFieldRebindingTest.class)
.addInnerClasses(IllegalFieldRebindingTestClasses.class)
.addKeepMainRule(OtherTestClass.class)
+ .enableNoAccessModificationAnnotationsForClasses()
.enableNoVerticalClassMergingAnnotations()
.setMinApi(parameters)
.run(parameters.getRuntime(), OtherTestClass.class)
diff --git a/src/test/java/com/android/tools/r8/memberrebinding/MemberRebindingBridgeRemovalTest.java b/src/test/java/com/android/tools/r8/memberrebinding/MemberRebindingBridgeRemovalTest.java
index d8e0f19..54600ce 100644
--- a/src/test/java/com/android/tools/r8/memberrebinding/MemberRebindingBridgeRemovalTest.java
+++ b/src/test/java/com/android/tools/r8/memberrebinding/MemberRebindingBridgeRemovalTest.java
@@ -43,6 +43,7 @@
MemberRebindingBridgeRemovalTest.class, MemberRebindingBridgeRemovalTestClasses.class)
.addKeepMainRule(TestClass.class)
.enableInliningAnnotations()
+ .enableNoAccessModificationAnnotationsForClasses()
.enableNoVerticalClassMergingAnnotations()
.setMinApi(parameters)
.compile()
diff --git a/src/test/java/com/android/tools/r8/memberrebinding/MemberRebindingRemoveStaticBridgeTest.java b/src/test/java/com/android/tools/r8/memberrebinding/MemberRebindingRemoveStaticBridgeTest.java
index 1ef45c0..bbd1e88 100644
--- a/src/test/java/com/android/tools/r8/memberrebinding/MemberRebindingRemoveStaticBridgeTest.java
+++ b/src/test/java/com/android/tools/r8/memberrebinding/MemberRebindingRemoveStaticBridgeTest.java
@@ -9,6 +9,7 @@
import static org.junit.Assert.assertTrue;
import com.android.tools.r8.NeverInline;
+import com.android.tools.r8.NoAccessModification;
import com.android.tools.r8.NoVerticalClassMerging;
import com.android.tools.r8.TestBase;
import com.android.tools.r8.TestParameters;
@@ -46,6 +47,7 @@
.setMinApi(parameters)
.addKeepMainRule(newMainTypeName)
.enableInliningAnnotations()
+ .enableNoAccessModificationAnnotationsForClasses()
.enableNoVerticalClassMergingAnnotations()
.addHorizontallyMergedClassesInspector(
HorizontallyMergedClassesInspector::assertNoClassesMerged)
@@ -59,6 +61,7 @@
});
}
+ @NoAccessModification
@NoVerticalClassMerging
static class A {
diff --git a/src/test/java/com/android/tools/r8/memberrebinding/MemberRebindingRemoveVirtualBridgeTest.java b/src/test/java/com/android/tools/r8/memberrebinding/MemberRebindingRemoveVirtualBridgeTest.java
index 0ca6131..4013b58 100644
--- a/src/test/java/com/android/tools/r8/memberrebinding/MemberRebindingRemoveVirtualBridgeTest.java
+++ b/src/test/java/com/android/tools/r8/memberrebinding/MemberRebindingRemoveVirtualBridgeTest.java
@@ -11,6 +11,7 @@
import com.android.tools.r8.NeverClassInline;
import com.android.tools.r8.NeverInline;
+import com.android.tools.r8.NoAccessModification;
import com.android.tools.r8.NoInliningOfDefaultInitializer;
import com.android.tools.r8.NoVerticalClassMerging;
import com.android.tools.r8.TestBase;
@@ -49,6 +50,7 @@
.setMinApi(parameters)
.addKeepMainRule(newMainTypeName)
.enableInliningAnnotations()
+ .enableNoAccessModificationAnnotationsForClasses()
.enableNoInliningOfDefaultInitializerAnnotations()
.enableNoVerticalClassMergingAnnotations()
.enableNeverClassInliningAnnotations()
@@ -69,6 +71,7 @@
});
}
+ @NoAccessModification
@NoVerticalClassMerging
static class A {
diff --git a/src/test/java/com/android/tools/r8/memberrebinding/MemberRebindingTest.java b/src/test/java/com/android/tools/r8/memberrebinding/MemberRebindingTest.java
index 0bf9bc8..72be6ed 100644
--- a/src/test/java/com/android/tools/r8/memberrebinding/MemberRebindingTest.java
+++ b/src/test/java/com/android/tools/r8/memberrebinding/MemberRebindingTest.java
@@ -8,7 +8,6 @@
import com.android.tools.r8.R8Command;
import com.android.tools.r8.TestBase;
-import com.android.tools.r8.TestBase.Backend;
import com.android.tools.r8.ToolHelper;
import com.android.tools.r8.errors.Unreachable;
import com.android.tools.r8.naming.MemberNaming.MethodSignature;
@@ -48,6 +47,7 @@
private final String name;
private final Backend backend;
+ private final String keepRuleFile;
private final Path programFile;
private final Consumer<CodeInspector> inspection;
private final int minApiLevel;
@@ -58,6 +58,7 @@
public MemberRebindingTest(TestConfiguration configuration) {
this.name = configuration.name;
this.backend = configuration.backend;
+ this.keepRuleFile = configuration.keepRuleFile;
this.programFile = configuration.getJarPath();
this.inspection = configuration.processedInspection;
this.minApiLevel = configuration.getMinApiLevel();
@@ -78,6 +79,10 @@
if (backend == Backend.DEX) {
builder.setMinApiLevel(minApiLevel);
}
+ if (keepRuleFile != null) {
+ builder.addProguardConfigurationFiles(Paths.get(ToolHelper.EXAMPLES_DIR, name, keepRuleFile));
+ ToolHelper.allowTestProguardOptions(builder);
+ }
ToolHelper.getAppBuilder(builder).addProgramFiles(programFile);
ToolHelper.runR8(
builder.build(),
@@ -178,16 +183,19 @@
final String name;
final Backend backend;
+ final String keepRuleFile;
final AndroidVersion version;
final Consumer<CodeInspector> processedInspection;
private TestConfiguration(
String name,
Backend backend,
+ String keepRuleFile,
AndroidVersion version,
Consumer<CodeInspector> processedInspection) {
this.name = name;
this.backend = backend;
+ this.keepRuleFile = keepRuleFile;
this.version = version;
this.processedInspection = processedInspection;
}
@@ -196,9 +204,10 @@
ImmutableList.Builder<TestConfiguration> builder,
String name,
Backend backend,
+ String keepRuleFile,
AndroidVersion version,
Consumer<CodeInspector> processedInspection) {
- builder.add(new TestConfiguration(name, backend, version, processedInspection));
+ builder.add(new TestConfiguration(name, backend, keepRuleFile, version, processedInspection));
}
public Path getDexPath() {
@@ -244,24 +253,28 @@
builder,
"memberrebinding",
backend,
+ null,
TestConfiguration.AndroidVersion.PRE_N,
MemberRebindingTest::inspectMain);
TestConfiguration.add(
builder,
"memberrebinding2",
backend,
+ "keep-rules.txt",
TestConfiguration.AndroidVersion.PRE_N,
MemberRebindingTest::inspectMain2);
TestConfiguration.add(
builder,
"memberrebinding3",
backend,
+ null,
TestConfiguration.AndroidVersion.PRE_N,
MemberRebindingTest::inspect3);
TestConfiguration.add(
builder,
"memberrebinding4",
backend,
+ null,
TestConfiguration.AndroidVersion.N,
MemberRebindingTest::inspect4);
}
diff --git a/src/test/java/com/android/tools/r8/memberrebinding/testclasses/IllegalFieldRebindingTestClasses.java b/src/test/java/com/android/tools/r8/memberrebinding/testclasses/IllegalFieldRebindingTestClasses.java
index aaba050..930325d 100644
--- a/src/test/java/com/android/tools/r8/memberrebinding/testclasses/IllegalFieldRebindingTestClasses.java
+++ b/src/test/java/com/android/tools/r8/memberrebinding/testclasses/IllegalFieldRebindingTestClasses.java
@@ -4,10 +4,12 @@
package com.android.tools.r8.memberrebinding.testclasses;
+import com.android.tools.r8.NoAccessModification;
import com.android.tools.r8.NoVerticalClassMerging;
public class IllegalFieldRebindingTestClasses {
+ @NoAccessModification
@NoVerticalClassMerging
static class A {
public static int f;
diff --git a/src/test/java/com/android/tools/r8/memberrebinding/testclasses/MemberRebindingBridgeRemovalTestClasses.java b/src/test/java/com/android/tools/r8/memberrebinding/testclasses/MemberRebindingBridgeRemovalTestClasses.java
index 12ebac3..8324300 100644
--- a/src/test/java/com/android/tools/r8/memberrebinding/testclasses/MemberRebindingBridgeRemovalTestClasses.java
+++ b/src/test/java/com/android/tools/r8/memberrebinding/testclasses/MemberRebindingBridgeRemovalTestClasses.java
@@ -5,10 +5,12 @@
package com.android.tools.r8.memberrebinding.testclasses;
import com.android.tools.r8.NeverInline;
+import com.android.tools.r8.NoAccessModification;
import com.android.tools.r8.NoVerticalClassMerging;
public class MemberRebindingBridgeRemovalTestClasses {
+ @NoAccessModification
@NoVerticalClassMerging
static class A {
diff --git a/src/test/java/com/android/tools/r8/naming/applymapping/ApplyMappingLambdaRepackageTest.java b/src/test/java/com/android/tools/r8/naming/applymapping/ApplyMappingLambdaRepackageTest.java
index 58a6eff..d8a870f 100644
--- a/src/test/java/com/android/tools/r8/naming/applymapping/ApplyMappingLambdaRepackageTest.java
+++ b/src/test/java/com/android/tools/r8/naming/applymapping/ApplyMappingLambdaRepackageTest.java
@@ -8,6 +8,7 @@
import com.android.tools.r8.NeverClassInline;
import com.android.tools.r8.NeverInline;
+import com.android.tools.r8.NoAccessModification;
import com.android.tools.r8.R8TestRunResult;
import com.android.tools.r8.TestBase;
import com.android.tools.r8.TestParameters;
@@ -38,6 +39,7 @@
.addKeepRules("-repackageclasses foo")
.enableInliningAnnotations()
.enableNeverClassInliningAnnotations()
+ .enableNoAccessModificationAnnotationsForMembers()
.run(parameters.getRuntime(), Main.class)
.assertSuccessWithOutputLines("Hello World");
R8TestRunResult secondRunResult =
@@ -47,6 +49,7 @@
.addKeepMainRule(Main.class)
.enableInliningAnnotations()
.enableNeverClassInliningAnnotations()
+ .enableNoAccessModificationAnnotationsForMembers()
.addApplyMapping(firstRunResult.proguardMap())
.compile()
.run(parameters.getRuntime(), Main.class);
@@ -58,6 +61,7 @@
public static class PackagePrivate {
@NeverInline
+ @NoAccessModification
void print() {
System.out.println("Hello World");
}
diff --git a/src/test/java/com/android/tools/r8/naming/applymapping/sourcelibrary/MemberResolutionAsmTest.java b/src/test/java/com/android/tools/r8/naming/applymapping/sourcelibrary/MemberResolutionAsmTest.java
index d38f2c4..d4afe52 100644
--- a/src/test/java/com/android/tools/r8/naming/applymapping/sourcelibrary/MemberResolutionAsmTest.java
+++ b/src/test/java/com/android/tools/r8/naming/applymapping/sourcelibrary/MemberResolutionAsmTest.java
@@ -75,7 +75,7 @@
private final String noMappingMain = "NoMappingMain";
private final String noMappingExpected = StringUtils.lines("HasMapping#foo", "NoMapping#foo");
- private List<byte[]> noMappingInputs() throws Exception {
+ private List<byte[]> noMappingInputs() {
return ImmutableList.of(HasMappingDump.dump(), NoMappingDump.dump(), NoMappingMainDump.dump());
}
@@ -103,7 +103,9 @@
.addProgramClassFileData(noMappingInputs())
.setMinApi(parameters)
.addKeepMainRule(noMappingMain)
+ .addKeepRules("-noaccessmodification class NoMapping { private void foo(); }")
.addApplyMapping(pgMap)
+ .enableNoAccessModificationAnnotationsForMembers()
.addOptionsModification(
options -> {
options.inlinerOptions().enableInlining = false;
@@ -113,19 +115,24 @@
.assertSuccessWithOutput(noMappingExpected)
.inspector();
- ClassSubject base = codeInspector.clazz("HasMapping");
- assertThat(base, isPresentAndRenamed());
- assertEquals("X", base.getFinalName());
- MethodSubject x = base.method("void", "foo", ImmutableList.of());
- assertThat(x, isPresentAndRenamed());
- assertEquals("a", x.getFinalName());
+ ClassSubject hasMappingClassSubject = codeInspector.clazz("HasMapping");
+ assertThat(hasMappingClassSubject, isPresentAndRenamed());
+ assertEquals("X", hasMappingClassSubject.getFinalName());
+
+ MethodSubject virtualFooMethodSubject =
+ hasMappingClassSubject.uniqueMethodWithOriginalName("foo");
+ assertThat(virtualFooMethodSubject, isPresentAndRenamed());
+ assertEquals("a", virtualFooMethodSubject.getFinalName());
// To ensure still getting illegal-access error we need to rename consistently.
- ClassSubject sub = codeInspector.clazz("NoMapping");
- assertThat(sub, isPresentAndRenamed());
- assertEquals("Y", sub.getFinalName());
- MethodSubject y = sub.method("void", "a", ImmutableList.of());
- assertThat(y, isPresent());
+ ClassSubject noMappingClassSubject = codeInspector.clazz("NoMapping");
+ assertThat(noMappingClassSubject, isPresentAndRenamed());
+ assertEquals("Y", noMappingClassSubject.getFinalName());
+
+ MethodSubject privateFooMethodSubject =
+ noMappingClassSubject.uniqueMethodWithOriginalName("foo");
+ assertThat(privateFooMethodSubject, isPresent());
+ assertEquals("a", privateFooMethodSubject.getFinalName());
}
// class A { // : X
diff --git a/src/test/java/com/android/tools/r8/naming/applymapping/sourcelibrary/MemberResolutionTest.java b/src/test/java/com/android/tools/r8/naming/applymapping/sourcelibrary/MemberResolutionTest.java
index e71747b..e7ef37a 100644
--- a/src/test/java/com/android/tools/r8/naming/applymapping/sourcelibrary/MemberResolutionTest.java
+++ b/src/test/java/com/android/tools/r8/naming/applymapping/sourcelibrary/MemberResolutionTest.java
@@ -10,6 +10,7 @@
import static org.junit.Assert.assertEquals;
import com.android.tools.r8.NeverPropagateValue;
+import com.android.tools.r8.NoAccessModification;
import com.android.tools.r8.NoVerticalClassMerging;
import com.android.tools.r8.TestBase;
import com.android.tools.r8.TestParameters;
@@ -34,6 +35,7 @@
@NeverPropagateValue private String tag = "PrivateInitialTag_AbstractChecker";
// check() -> x
+ @NoAccessModification
private void check() {
System.out.println("AbstractChecker#check:" + tag);
}
@@ -56,6 +58,7 @@
// This should not be conflict with AbstractChecker#check due to the access control.
// check() -> y
+ @NoAccessModification
private void check() {
System.out.println("ConcreteChecker#check:" + tag);
}
@@ -124,6 +127,7 @@
.addKeepMainRule(MemberResolutionTestMain.class)
.addKeepRules("-applymapping " + mapPath)
.enableMemberValuePropagationAnnotations()
+ .enableNoAccessModificationAnnotationsForMembers()
.enableNoVerticalClassMergingAnnotations()
.addOptionsModification(options -> options.inlinerOptions().enableInlining = false)
.setMinApi(parameters)
diff --git a/src/test/java/com/android/tools/r8/naming/b72391662/B72391662.java b/src/test/java/com/android/tools/r8/naming/b72391662/B72391662.java
index ab72433..8db8492 100644
--- a/src/test/java/com/android/tools/r8/naming/b72391662/B72391662.java
+++ b/src/test/java/com/android/tools/r8/naming/b72391662/B72391662.java
@@ -6,6 +6,7 @@
import static com.android.tools.r8.utils.codeinspector.Matchers.isPackagePrivate;
import static com.android.tools.r8.utils.codeinspector.Matchers.isPresent;
+import static com.android.tools.r8.utils.codeinspector.Matchers.isPublic;
import static org.hamcrest.CoreMatchers.not;
import static org.hamcrest.MatcherAssert.assertThat;
import static org.junit.Assert.assertEquals;
@@ -112,7 +113,7 @@
@Test
public void test_keepAll() throws Exception {
Assume.assumeFalse(shrinker.generatesDex() && vmVersionIgnored());
- Class mainClass = TestMain.class;
+ Class<?> mainClass = TestMain.class;
String keep = !minify ? "-keep" : "-keep,allowobfuscation";
List<String> config = ImmutableList.of(
"-printmapping",
@@ -144,7 +145,11 @@
// Test the totally unused method.
MethodSubject staticMethod = testClass.uniqueMethodWithOriginalName("unused");
assertThat(staticMethod, isPresent());
- assertThat(staticMethod, isPackagePrivate());
+ assertThat(
+ staticMethod,
+ isForceAccessModifyingPackagePrivateAndProtectedMethods()
+ ? isPublic()
+ : isPackagePrivate());
assertEquals(minify, staticMethod.isRenamed());
// Test an indirectly referred method.
@@ -152,10 +157,23 @@
assertThat(staticMethod, isPresent());
assertEquals(minify, staticMethod.isRenamed());
boolean publicizeCondition =
- shrinker.isProguard() && minify && repackagePrefix != null && allowAccessModification;
+ isForceAccessModifyingPackagePrivateAndProtectedMethods()
+ || (shrinker.isProguard()
+ && minify
+ && repackagePrefix != null
+ && allowAccessModification);
assertEquals(publicizeCondition, staticMethod.getMethod().isPublic());
}
+ @Override
+ public boolean isForceAccessModifyingPackagePrivateAndProtectedMethods() {
+ if (!super.isForceAccessModifyingPackagePrivateAndProtectedMethods()) {
+ return false;
+ }
+ return (shrinker.isCompatR8() && allowAccessModification)
+ || (shrinker.isFullModeR8() && (shrinker.isR8Dex() || allowAccessModification || minify));
+ }
+
@Test
public void test_keepNonPublic() throws Exception {
Assume.assumeFalse(shrinker.generatesDex() && vmVersionIgnored());
@@ -191,7 +209,11 @@
// Test the totally unused method.
MethodSubject staticMethod = testClass.uniqueMethodWithOriginalName("unused");
assertThat(staticMethod, isPresent());
- assertThat(staticMethod, isPackagePrivate());
+ assertThat(
+ staticMethod,
+ isForceAccessModifyingPackagePrivateAndProtectedMethods()
+ ? isPublic()
+ : isPackagePrivate());
assertEquals(minify, staticMethod.isRenamed());
// Test an indirectly referred method.
@@ -199,7 +221,11 @@
assertThat(staticMethod, isPresent());
assertEquals(minify, staticMethod.isRenamed());
boolean publicizeCondition =
- shrinker.isProguard() && minify && repackagePrefix != null && allowAccessModification;
+ isForceAccessModifyingPackagePrivateAndProtectedMethods()
+ || (shrinker.isProguard()
+ && minify
+ && repackagePrefix != null
+ && allowAccessModification);
assertEquals(publicizeCondition, staticMethod.getMethod().isPublic());
}
@@ -258,8 +284,14 @@
staticMethod = testClass.uniqueMethodWithOriginalName("staticMethod");
assertThat(staticMethod, isPresent());
assertEquals(minify, staticMethod.isRenamed());
- boolean publicizeCondition = shrinker.isR8() ? allowAccessModification
- : minify && repackagePrefix != null && allowAccessModification;
+ boolean publicizeCondition =
+ (shrinker.isCompatR8() && allowAccessModification)
+ || (shrinker.isFullModeR8()
+ && (shrinker.isR8Dex() || allowAccessModification || minify))
+ || (shrinker.isProguard()
+ && minify
+ && repackagePrefix != null
+ && allowAccessModification);
assertEquals(publicizeCondition, staticMethod.getMethod().accessFlags.isPublic());
}
}
diff --git a/src/test/java/com/android/tools/r8/naming/retraceproguard/InliningRetraceTest.java b/src/test/java/com/android/tools/r8/naming/retraceproguard/InliningRetraceTest.java
index 016d4ac..7f536a5 100644
--- a/src/test/java/com/android/tools/r8/naming/retraceproguard/InliningRetraceTest.java
+++ b/src/test/java/com/android/tools/r8/naming/retraceproguard/InliningRetraceTest.java
@@ -56,6 +56,7 @@
@Test
public void testSourceFileAndLineNumberTable() throws Exception {
+ assumeTrue("b/288405478", mode.isRelease());
runTest(
ImmutableList.of("-keepattributes SourceFile,LineNumberTable"),
(StackTrace actualStackTrace, StackTrace retracedStackTrace) -> {
@@ -67,6 +68,7 @@
@Test
public void testLineNumberTableOnly() throws Exception {
+ assumeTrue("b/288405478", mode.isRelease());
assumeTrue(compat);
assumeTrue(parameters.isDexRuntime());
runTest(
@@ -79,6 +81,7 @@
@Test
public void testNoLineNumberTable() throws Exception {
+ assumeTrue("b/288405478", mode.isRelease());
assumeTrue(compat);
assumeTrue(parameters.isDexRuntime());
runTest(
diff --git a/src/test/java/com/android/tools/r8/profile/art/completeness/SyntheticLambdaClassProfileRewritingTest.java b/src/test/java/com/android/tools/r8/profile/art/completeness/SyntheticLambdaClassProfileRewritingTest.java
index ef6b3a3..53fb532 100644
--- a/src/test/java/com/android/tools/r8/profile/art/completeness/SyntheticLambdaClassProfileRewritingTest.java
+++ b/src/test/java/com/android/tools/r8/profile/art/completeness/SyntheticLambdaClassProfileRewritingTest.java
@@ -239,7 +239,7 @@
inspector,
parameters.canHaveNonReboundConstructorInvoke(),
parameters.isCfRuntime(),
- false);
+ parameters.isAccessModificationEnabledByDefault());
}
static class Main {
diff --git a/src/test/java/com/android/tools/r8/regress/b76025099/B76025099.java b/src/test/java/com/android/tools/r8/regress/b76025099/B76025099.java
index 5ef06ad..e0b1d4f 100644
--- a/src/test/java/com/android/tools/r8/regress/b76025099/B76025099.java
+++ b/src/test/java/com/android/tools/r8/regress/b76025099/B76025099.java
@@ -85,6 +85,8 @@
testForR8(parameters.getBackend())
.addProgramFiles(ToolHelper.getClassFilesForTestPackage(Main.class.getPackage()))
.addKeepMainRule(Main.class)
+ .enableNoAccessModificationAnnotationsForClasses()
+ .enableNoAccessModificationAnnotationsForMembers()
.enableNoVerticalClassMergingAnnotations()
.addDontObfuscate()
.setMinApi(parameters)
diff --git a/src/test/java/com/android/tools/r8/regress/b76025099/testclasses/helper/AbstractBase.java b/src/test/java/com/android/tools/r8/regress/b76025099/testclasses/helper/AbstractBase.java
index 9d5694c..bf454a9 100644
--- a/src/test/java/com/android/tools/r8/regress/b76025099/testclasses/helper/AbstractBase.java
+++ b/src/test/java/com/android/tools/r8/regress/b76025099/testclasses/helper/AbstractBase.java
@@ -3,12 +3,15 @@
// BSD-style license that can be found in the LICENSE file.
package com.android.tools.r8.regress.b76025099.testclasses.helper;
+import com.android.tools.r8.NoAccessModification;
import com.android.tools.r8.NoVerticalClassMerging;
import com.android.tools.r8.regress.b76025099.testclasses.Logger;
+@NoAccessModification
@NoVerticalClassMerging
abstract class AbstractBase implements Logger {
- protected String name;
+
+ @NoAccessModification protected String name;
@Override
public String getName() {
diff --git a/src/test/java/com/android/tools/r8/repackage/RepackageAllowRepackagingTest.java b/src/test/java/com/android/tools/r8/repackage/RepackageAllowRepackagingTest.java
index f1965fe..b1c34e2 100644
--- a/src/test/java/com/android/tools/r8/repackage/RepackageAllowRepackagingTest.java
+++ b/src/test/java/com/android/tools/r8/repackage/RepackageAllowRepackagingTest.java
@@ -6,6 +6,7 @@
import static org.hamcrest.MatcherAssert.assertThat;
+import com.android.tools.r8.NoAccessModification;
import com.android.tools.r8.TestParameters;
import org.junit.Test;
import org.junit.runner.RunWith;
@@ -30,6 +31,7 @@
"-keep,allowrepackage class " + typeName(ShouldStayInPackage.class) + " { *; }")
.addKeepRules(
"-keep,allowrepackage class " + typeName(ShouldBeRepackaged.class) + " { *; }")
+ .enableNoAccessModificationAnnotationsForMembers()
.compile()
.inspect(
inspector -> {
@@ -42,6 +44,7 @@
public static class ShouldStayInPackage {
+ @NoAccessModification
static void foo() {
System.out.println("ShouldStayInPackage::foo");
}
diff --git a/src/test/java/com/android/tools/r8/repackage/RepackageTest.java b/src/test/java/com/android/tools/r8/repackage/RepackageTest.java
index 5651252..a33ab6f 100644
--- a/src/test/java/com/android/tools/r8/repackage/RepackageTest.java
+++ b/src/test/java/com/android/tools/r8/repackage/RepackageTest.java
@@ -110,10 +110,13 @@
" <methods>;",
"}")
.allowAccessModification(allowAccessModification)
+ .applyIf(
+ allowAccessModification,
+ testBuilder -> testBuilder.addNoAccessModificationAnnotation(),
+ testBuilder -> testBuilder.enableNoAccessModificationAnnotationsForMembers())
.apply(this::configureRepackaging)
.enableInliningAnnotations()
.enableNoHorizontalClassMergingAnnotations()
- .enableNoHorizontalClassMergingAnnotations()
.setMinApi(parameters)
.compile()
.inspect(this::inspect)
diff --git a/src/test/java/com/android/tools/r8/repackage/RepackageWithInitClassTest.java b/src/test/java/com/android/tools/r8/repackage/RepackageWithInitClassTest.java
index 55e260d..d6cce99 100644
--- a/src/test/java/com/android/tools/r8/repackage/RepackageWithInitClassTest.java
+++ b/src/test/java/com/android/tools/r8/repackage/RepackageWithInitClassTest.java
@@ -11,6 +11,7 @@
import static org.hamcrest.MatcherAssert.assertThat;
import com.android.tools.r8.NeverPropagateValue;
+import com.android.tools.r8.NoAccessModification;
import com.android.tools.r8.TestParameters;
import com.android.tools.r8.utils.BooleanUtils;
import com.android.tools.r8.utils.codeinspector.ClassSubject;
@@ -52,6 +53,7 @@
.addMemberValuePropagationAnnotations()
.apply(this::configureRepackaging)
.enableMemberValuePropagationAnnotations(enableMemberValuePropagationAnnotations)
+ .enableNoAccessModificationAnnotationsForMembers()
.addOptionsModification(options -> options.enableRedundantFieldLoadElimination = false)
.setMinApi(parameters)
.compile()
@@ -98,7 +100,7 @@
public static class StaticMemberValuePropagation {
- @NeverPropagateValue static String HELLO = "Hello";
+ @NeverPropagateValue @NoAccessModification static String HELLO = "Hello";
public static String WORLD = " world!";
diff --git a/src/test/java/com/android/tools/r8/repackage/RepackageWithOverridesOfPackagePrivateMethodsTest.java b/src/test/java/com/android/tools/r8/repackage/RepackageWithOverridesOfPackagePrivateMethodsTest.java
index 56436b4..2f7657a 100644
--- a/src/test/java/com/android/tools/r8/repackage/RepackageWithOverridesOfPackagePrivateMethodsTest.java
+++ b/src/test/java/com/android/tools/r8/repackage/RepackageWithOverridesOfPackagePrivateMethodsTest.java
@@ -8,6 +8,7 @@
import com.android.tools.r8.NeverClassInline;
import com.android.tools.r8.NeverInline;
+import com.android.tools.r8.NoAccessModification;
import com.android.tools.r8.NoParameterTypeStrengthening;
import com.android.tools.r8.NoVerticalClassMerging;
import com.android.tools.r8.TestParameters;
@@ -32,6 +33,7 @@
.apply(this::configureRepackaging)
.enableInliningAnnotations()
.enableNeverClassInliningAnnotations()
+ .enableNoAccessModificationAnnotationsForMembers()
.enableNoParameterTypeStrengtheningAnnotations()
.enableNoVerticalClassMergingAnnotations()
.setMinApi(parameters)
@@ -69,6 +71,7 @@
@NoVerticalClassMerging
public abstract static class HelloGreeterBase {
+ @NoAccessModification
abstract void greet();
}
@@ -85,6 +88,7 @@
@NoVerticalClassMerging
public abstract static class WorldGreeterBase {
+ @NoAccessModification
abstract void greet();
}
diff --git a/src/test/java/com/android/tools/r8/repackage/RepackageWithStringIdentifier.java b/src/test/java/com/android/tools/r8/repackage/RepackageWithStringIdentifier.java
index 3f8e0bb..a4bc84c 100644
--- a/src/test/java/com/android/tools/r8/repackage/RepackageWithStringIdentifier.java
+++ b/src/test/java/com/android/tools/r8/repackage/RepackageWithStringIdentifier.java
@@ -8,6 +8,7 @@
import com.android.tools.r8.NeverClassInline;
import com.android.tools.r8.NeverInline;
+import com.android.tools.r8.NoAccessModification;
import com.android.tools.r8.TestParameters;
import org.junit.Test;
import org.junit.runner.RunWith;
@@ -47,6 +48,8 @@
.addKeepMainRule(Main.class)
.enableInliningAnnotations()
.enableNeverClassInliningAnnotations()
+ .enableNoAccessModificationAnnotationsForClasses()
+ .enableNoAccessModificationAnnotationsForMembers()
.setMinApi(parameters)
.compile()
.inspect(inspector -> assertThat(A.class, isRepackaged(inspector)))
@@ -55,8 +58,12 @@
}
@NeverClassInline
+ @NoAccessModification
static class A {
+ @NoAccessModification
+ A() {}
+
@NeverInline
public void foo() {
System.out.println("Hello World!");
diff --git a/src/test/java/com/android/tools/r8/repackage/testclasses/repackagetest/AccessPackagePrivateMethodOnKeptClassIndirect.java b/src/test/java/com/android/tools/r8/repackage/testclasses/repackagetest/AccessPackagePrivateMethodOnKeptClassIndirect.java
index 355420d..ffb3588 100644
--- a/src/test/java/com/android/tools/r8/repackage/testclasses/repackagetest/AccessPackagePrivateMethodOnKeptClassIndirect.java
+++ b/src/test/java/com/android/tools/r8/repackage/testclasses/repackagetest/AccessPackagePrivateMethodOnKeptClassIndirect.java
@@ -5,6 +5,7 @@
package com.android.tools.r8.repackage.testclasses.repackagetest;
import com.android.tools.r8.NeverInline;
+import com.android.tools.r8.NoAccessModification;
import com.android.tools.r8.NoHorizontalClassMerging;
@NoHorizontalClassMerging
@@ -19,6 +20,7 @@
public static class Helper {
@NeverInline
+ @NoAccessModification
static void test() {
KeptClass.packagePrivateMethod();
}
diff --git a/src/test/java/com/android/tools/r8/repackage/testclasses/repackagetest/KeptClass.java b/src/test/java/com/android/tools/r8/repackage/testclasses/repackagetest/KeptClass.java
index 5f2632f..8ab03ba 100644
--- a/src/test/java/com/android/tools/r8/repackage/testclasses/repackagetest/KeptClass.java
+++ b/src/test/java/com/android/tools/r8/repackage/testclasses/repackagetest/KeptClass.java
@@ -5,10 +5,12 @@
package com.android.tools.r8.repackage.testclasses.repackagetest;
import com.android.tools.r8.NeverInline;
+import com.android.tools.r8.NoAccessModification;
public class KeptClass {
@NeverInline
+ @NoAccessModification
static void packagePrivateMethod() {
System.out.println("KeptClass.packagePrivateMethod()");
}
diff --git a/src/test/java/com/android/tools/r8/repackage/testclasses/repackagetest/KeptClassAllowRenaming.java b/src/test/java/com/android/tools/r8/repackage/testclasses/repackagetest/KeptClassAllowRenaming.java
index f6ca601..8ad73d9 100644
--- a/src/test/java/com/android/tools/r8/repackage/testclasses/repackagetest/KeptClassAllowRenaming.java
+++ b/src/test/java/com/android/tools/r8/repackage/testclasses/repackagetest/KeptClassAllowRenaming.java
@@ -5,10 +5,12 @@
package com.android.tools.r8.repackage.testclasses.repackagetest;
import com.android.tools.r8.NeverInline;
+import com.android.tools.r8.NoAccessModification;
public class KeptClassAllowRenaming {
@NeverInline
+ @NoAccessModification
static void packagePrivateMethod() {
System.out.println("KeptClassAllowRenaming.packagePrivateMethod()");
}
diff --git a/src/test/java/com/android/tools/r8/repackage/testclasses/repackagetest/ReachableClassWithKeptMethod.java b/src/test/java/com/android/tools/r8/repackage/testclasses/repackagetest/ReachableClassWithKeptMethod.java
index e408270..47ab945 100644
--- a/src/test/java/com/android/tools/r8/repackage/testclasses/repackagetest/ReachableClassWithKeptMethod.java
+++ b/src/test/java/com/android/tools/r8/repackage/testclasses/repackagetest/ReachableClassWithKeptMethod.java
@@ -5,10 +5,12 @@
package com.android.tools.r8.repackage.testclasses.repackagetest;
import com.android.tools.r8.NeverInline;
+import com.android.tools.r8.NoAccessModification;
public class ReachableClassWithKeptMethod {
@NeverInline
+ @NoAccessModification
static void packagePrivateMethod() {
System.out.println("ReachableClassWithKeptMethod.packagePrivateMethod()");
}
diff --git a/src/test/java/com/android/tools/r8/repackage/testclasses/repackagetest/ReachableClassWithKeptMethodAllowRenaming.java b/src/test/java/com/android/tools/r8/repackage/testclasses/repackagetest/ReachableClassWithKeptMethodAllowRenaming.java
index 7555b9b..568e526 100644
--- a/src/test/java/com/android/tools/r8/repackage/testclasses/repackagetest/ReachableClassWithKeptMethodAllowRenaming.java
+++ b/src/test/java/com/android/tools/r8/repackage/testclasses/repackagetest/ReachableClassWithKeptMethodAllowRenaming.java
@@ -5,10 +5,12 @@
package com.android.tools.r8.repackage.testclasses.repackagetest;
import com.android.tools.r8.NeverInline;
+import com.android.tools.r8.NoAccessModification;
public class ReachableClassWithKeptMethodAllowRenaming {
@NeverInline
+ @NoAccessModification
static void packagePrivateMethod() {
System.out.println("ReachableClassWithKeptMethodAllowRenaming.packagePrivateMethod()");
}
diff --git a/src/test/java/com/android/tools/r8/resolution/b77944861/B77944861.java b/src/test/java/com/android/tools/r8/resolution/b77944861/B77944861.java
index 4e1ae5c..631aa50 100644
--- a/src/test/java/com/android/tools/r8/resolution/b77944861/B77944861.java
+++ b/src/test/java/com/android/tools/r8/resolution/b77944861/B77944861.java
@@ -65,6 +65,7 @@
.addKeepMainRule(MAIN)
.addDontObfuscate()
.addDontShrink()
+ .enableNoAccessModificationAnnotationsForClasses()
.setMinApi(parameters)
.compile()
.inspect(
diff --git a/src/test/java/com/android/tools/r8/resolution/b77944861/inner/TopLevelPolicy.java b/src/test/java/com/android/tools/r8/resolution/b77944861/inner/TopLevelPolicy.java
index 0c22769..848f76f 100644
--- a/src/test/java/com/android/tools/r8/resolution/b77944861/inner/TopLevelPolicy.java
+++ b/src/test/java/com/android/tools/r8/resolution/b77944861/inner/TopLevelPolicy.java
@@ -3,6 +3,8 @@
// BSD-style license that can be found in the LICENSE file.
package com.android.tools.r8.resolution.b77944861.inner;
+import com.android.tools.r8.NoAccessModification;
+
public class TopLevelPolicy {
public static void set(MobileIconState state, String desc) {
@@ -11,6 +13,7 @@
state.description = desc;
}
+ @NoAccessModification
private static abstract class IconState {
public String description;
}
diff --git a/src/test/java/com/android/tools/r8/retrace/RetraceStackTraceFunctionalCompositionTest.java b/src/test/java/com/android/tools/r8/retrace/RetraceStackTraceFunctionalCompositionTest.java
index 861e990..7193719 100644
--- a/src/test/java/com/android/tools/r8/retrace/RetraceStackTraceFunctionalCompositionTest.java
+++ b/src/test/java/com/android/tools/r8/retrace/RetraceStackTraceFunctionalCompositionTest.java
@@ -36,6 +36,7 @@
import java.util.Map;
import java.util.Map.Entry;
import java.util.function.Supplier;
+import org.junit.Ignore;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.Parameterized;
@@ -43,6 +44,7 @@
import org.junit.runners.Parameterized.Parameters;
import org.objectweb.asm.MethodVisitor;
+@Ignore("b/288117378")
@RunWith(Parameterized.class)
public class RetraceStackTraceFunctionalCompositionTest extends TestBase {
diff --git a/src/test/java/com/android/tools/r8/retrace/RetraceTests.java b/src/test/java/com/android/tools/r8/retrace/RetraceTests.java
index 3644aa8..3c5aa5b 100644
--- a/src/test/java/com/android/tools/r8/retrace/RetraceTests.java
+++ b/src/test/java/com/android/tools/r8/retrace/RetraceTests.java
@@ -26,6 +26,7 @@
import com.android.tools.r8.retrace.stacktraces.AmbiguousInlineFramesStackTrace;
import com.android.tools.r8.retrace.stacktraces.AmbiguousMethodVerboseStackTrace;
import com.android.tools.r8.retrace.stacktraces.AmbiguousMissingLineStackTrace;
+import com.android.tools.r8.retrace.stacktraces.AmbiguousMultipleInlineStackTrace;
import com.android.tools.r8.retrace.stacktraces.AmbiguousStackTrace;
import com.android.tools.r8.retrace.stacktraces.AmbiguousWithMultipleLineMappingsStackTrace;
import com.android.tools.r8.retrace.stacktraces.AmbiguousWithSignatureStackTrace;
@@ -232,6 +233,11 @@
}
@Test
+ public void testAmbiguousMultipleInlineStackTrace() throws Exception {
+ runRetraceTest(new AmbiguousMultipleInlineStackTrace());
+ }
+
+ @Test
public void testAmbiguousMultipleMappingsTest() throws Exception {
runRetraceTest(new AmbiguousWithMultipleLineMappingsStackTrace());
}
diff --git a/src/test/java/com/android/tools/r8/retrace/stacktraces/AmbiguousMultipleInlineStackTrace.java b/src/test/java/com/android/tools/r8/retrace/stacktraces/AmbiguousMultipleInlineStackTrace.java
new file mode 100644
index 0000000..abf5ba6
--- /dev/null
+++ b/src/test/java/com/android/tools/r8/retrace/stacktraces/AmbiguousMultipleInlineStackTrace.java
@@ -0,0 +1,55 @@
+// Copyright (c) 2023, 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.retrace.stacktraces;
+
+import com.android.tools.r8.utils.StringUtils;
+import java.util.Arrays;
+import java.util.List;
+
+public class AmbiguousMultipleInlineStackTrace implements StackTraceForTest {
+
+ @Override
+ public List<String> obfuscatedStackTrace() {
+ return Arrays.asList(
+ "java.lang.IndexOutOfBoundsException",
+ "\tat com.android.tools.r8.Internal.zza(SourceFile:10)");
+ }
+
+ @Override
+ public String mapping() {
+ return StringUtils.lines(
+ "com.android.tools.r8.Internal -> com.android.tools.r8.Internal:",
+ " 10:10:void some.inlinee1(int):10:10 -> zza",
+ " 10:10:void foo(int):10 -> zza",
+ " 11:12:void foo(int):11:12 -> zza",
+ " 10:10:void some.inlinee2(int, int):20:20 -> zza",
+ " 10:10:void foo(int, int):42 -> zza");
+ }
+
+ @Override
+ public List<String> retracedStackTrace() {
+ return Arrays.asList(
+ "java.lang.IndexOutOfBoundsException",
+ "\tat some.inlinee1(some.java:10)",
+ "\t<OR> at some.inlinee2(some.java:20)",
+ "\tat com.android.tools.r8.Internal.foo(Internal.java:10)",
+ "\t<OR> at com.android.tools.r8.Internal.foo(Internal.java:42)");
+ }
+
+ @Override
+ public List<String> retraceVerboseStackTrace() {
+ return Arrays.asList(
+ "java.lang.IndexOutOfBoundsException",
+ "\tat some.void inlinee1(int)(some.java:10)",
+ "\t<OR> at some.void inlinee2(int,int)(some.java:20)",
+ "\tat com.android.tools.r8.Internal.void foo(int)(Internal.java:10)",
+ "\t<OR> at com.android.tools.r8.Internal.void foo(int,int)(Internal.java:42)");
+ }
+
+ @Override
+ public int expectedWarnings() {
+ return 0;
+ }
+}
diff --git a/src/test/java/com/android/tools/r8/rewrite/enums/EnumOptimizationTest.java b/src/test/java/com/android/tools/r8/rewrite/enums/EnumOptimizationTest.java
index 35991a7..97045ca 100644
--- a/src/test/java/com/android/tools/r8/rewrite/enums/EnumOptimizationTest.java
+++ b/src/test/java/com/android/tools/r8/rewrite/enums/EnumOptimizationTest.java
@@ -159,6 +159,12 @@
.enableMemberValuePropagationAnnotations()
.enableSideEffectAnnotations()
.addOptionsModification(this::configure)
+ .addOptionsModification(
+ o -> {
+ o.testing.enableLir();
+ // Not inlining toString depends on simple inlining limit.
+ o.inlinerOptions().simpleInliningInstructionLimit = 3;
+ })
.setMinApi(parameters)
.compile()
.inspect(this::inspectToStrings)
diff --git a/src/test/java/com/android/tools/r8/shaking/KeepAnnotatedMemberTest.java b/src/test/java/com/android/tools/r8/shaking/KeepAnnotatedMemberTest.java
index a47a068..faba9a5 100644
--- a/src/test/java/com/android/tools/r8/shaking/KeepAnnotatedMemberTest.java
+++ b/src/test/java/com/android/tools/r8/shaking/KeepAnnotatedMemberTest.java
@@ -233,7 +233,7 @@
.apply(this::suppressZipFileAssignmentsToJavaLangAutoCloseable)
.compile()
.graphInspector();
- assertRetainedClassesEqual(referenceInspector, ifThenKeepClassMembersInspector, true);
+ assertRetainedClassesEqual(referenceInspector, ifThenKeepClassMembersInspector, true, true);
GraphInspector ifThenKeepClassesWithMembersInspector =
testForR8(Backend.CF)
@@ -252,7 +252,8 @@
.apply(this::suppressZipFileAssignmentsToJavaLangAutoCloseable)
.compile()
.graphInspector();
- assertRetainedClassesEqual(referenceInspector, ifThenKeepClassesWithMembersInspector, true);
+ assertRetainedClassesEqual(
+ referenceInspector, ifThenKeepClassesWithMembersInspector, true, true);
GraphInspector ifHasMemberThenKeepClassInspector =
testForR8(Backend.CF)
@@ -273,7 +274,7 @@
.apply(this::suppressZipFileAssignmentsToJavaLangAutoCloseable)
.compile()
.graphInspector();
- assertRetainedClassesEqual(referenceInspector, ifHasMemberThenKeepClassInspector, true);
+ assertRetainedClassesEqual(referenceInspector, ifHasMemberThenKeepClassInspector, true, true);
}
private void configureHorizontalClassMerging(R8FullTestBuilder testBuilder) {
@@ -300,6 +301,15 @@
GraphInspector referenceResult,
GraphInspector conditionalResult,
boolean expectConditionalIsLarger) {
+ assertRetainedClassesEqual(
+ referenceResult, conditionalResult, expectConditionalIsLarger, false);
+ }
+
+ private void assertRetainedClassesEqual(
+ GraphInspector referenceResult,
+ GraphInspector conditionalResult,
+ boolean expectConditionalIsLarger,
+ boolean expectNotConditionalIsLarger) {
Set<String> referenceClasses =
new TreeSet<>(
referenceResult.codeInspector().allClasses().stream()
@@ -321,10 +331,15 @@
}
Set<String> notInConditional =
new TreeSet<>(Sets.difference(referenceClasses, conditionalClasses));
- assertEquals(
- "Classes in -keepclassmembers rule that are not in -if rule",
- Collections.emptySet(),
- notInConditional);
+ if (expectNotConditionalIsLarger) {
+ assertFalse(
+ "Expected classes in -keepclassmembers rule to retain more", notInConditional.isEmpty());
+ } else {
+ assertEquals(
+ "Classes in -keepclassmembers rule that are not in -if rule",
+ Collections.emptySet(),
+ notInConditional);
+ }
}
private void suppressZipFileAssignmentsToJavaLangAutoCloseable(R8TestBuilder<?> testBuilder) {
diff --git a/src/test/java/com/android/tools/r8/shaking/LibraryMethodOverrideInLambdaMarkingTest.java b/src/test/java/com/android/tools/r8/shaking/LibraryMethodOverrideInLambdaMarkingTest.java
index 1ae00db..c91b930 100644
--- a/src/test/java/com/android/tools/r8/shaking/LibraryMethodOverrideInLambdaMarkingTest.java
+++ b/src/test/java/com/android/tools/r8/shaking/LibraryMethodOverrideInLambdaMarkingTest.java
@@ -4,6 +4,7 @@
package com.android.tools.r8.shaking;
+import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertTrue;
import com.android.tools.r8.NoVerticalClassMerging;
@@ -16,8 +17,6 @@
import com.android.tools.r8.graph.DexType;
import com.android.tools.r8.shaking.Enqueuer.Mode;
import java.util.Iterator;
-import java.util.Spliterator;
-import java.util.function.Consumer;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.Parameterized;
@@ -41,6 +40,8 @@
testForR8(parameters.getBackend())
.addInnerClasses(LibraryMethodOverrideInLambdaMarkingTest.class)
.addKeepMainRule(TestClass.class)
+ // Keep J since redundant bridge removal will otherwise remove it.
+ .addKeepClassAndMembersRules(J.class)
.addOptionsModification(
options -> options.testing.enqueuerInspector = this::verifyLibraryOverrideInformation)
.enableNoVerticalClassMergingAnnotations()
@@ -61,7 +62,8 @@
AppInfoWithLiveness appInfo, DexType type) {
DexProgramClass clazz = appInfo.definitionFor(type).asProgramClass();
DexEncodedMethod method =
- clazz.lookupVirtualMethod(m -> m.getReference().name.toString().equals("iterator"));
+ clazz.lookupVirtualMethod(m -> m.getName().toString().equals("iterator"));
+ assertNotNull(method);
// TODO(b/149976493): Mark library overrides from lambda instances.
if (parameters.isCfRuntime()) {
assertTrue(method.isLibraryMethodOverride().isFalse());
@@ -98,15 +100,5 @@
@Override
Iterator<Object> iterator();
-
- @Override
- default void forEach(Consumer<? super Object> action) {
- // Intentionally empty.
- }
-
- @Override
- default Spliterator<Object> spliterator() {
- return null;
- }
}
}
diff --git a/src/test/java/com/android/tools/r8/shaking/assumenosideeffects/AssumenosideeffectsPropagationTest.java b/src/test/java/com/android/tools/r8/shaking/assumenosideeffects/AssumenosideeffectsPropagationTest.java
index 845e598..9d39bbc 100644
--- a/src/test/java/com/android/tools/r8/shaking/assumenosideeffects/AssumenosideeffectsPropagationTest.java
+++ b/src/test/java/com/android/tools/r8/shaking/assumenosideeffects/AssumenosideeffectsPropagationTest.java
@@ -79,6 +79,7 @@
: StringUtils.lines(
// Itf#info has side effects due to the missing Base2.
"[Sub1, info]: message00",
+ "[Sub1, info]: message1",
"[Base2, info]: message08",
// Base2#info also has side effects.
"[Base2, info]: message4",
@@ -89,6 +90,7 @@
"[AnotherSub2, debug]: message08", "[AnotherSub2, debug]: message5", "The end")
: StringUtils.lines(
"[Base1, debug]: message00",
+ "[Base1, debug]: message2",
"[AnotherSub2, debug]: message08",
"[AnotherSub2, debug]: message5",
"The end");
diff --git a/src/test/java/com/android/tools/r8/shaking/constructor/ForwardingConstructorShakingOnDexWithClassMergingTest.java b/src/test/java/com/android/tools/r8/shaking/constructor/ForwardingConstructorShakingOnDexWithClassMergingTest.java
index fddfa66..786b46e 100644
--- a/src/test/java/com/android/tools/r8/shaking/constructor/ForwardingConstructorShakingOnDexWithClassMergingTest.java
+++ b/src/test/java/com/android/tools/r8/shaking/constructor/ForwardingConstructorShakingOnDexWithClassMergingTest.java
@@ -8,6 +8,7 @@
import static org.hamcrest.MatcherAssert.assertThat;
import static org.junit.Assert.assertEquals;
+import com.android.tools.r8.NeverClassInline;
import com.android.tools.r8.NeverInline;
import com.android.tools.r8.NoVerticalClassMerging;
import com.android.tools.r8.TestBase;
@@ -49,6 +50,7 @@
.addHorizontallyMergedClassesInspector(
inspector -> inspector.assertMergedInto(A.class, B.class).assertNoOtherClassesMerged())
.enableInliningAnnotations()
+ .enableNeverClassInliningAnnotations()
.enableNoVerticalClassMergingAnnotations()
.setMinApi(parameters)
.compile()
@@ -111,6 +113,7 @@
}
}
+ @NeverClassInline
public static class ASub extends A {
// After horizontal class merging and unused argument removal, this is rewritten to target
diff --git a/src/test/java/com/android/tools/r8/shaking/forceproguardcompatibility/ProguardCompatibilityTestBase.java b/src/test/java/com/android/tools/r8/shaking/forceproguardcompatibility/ProguardCompatibilityTestBase.java
index d8afbb3..820cc29 100644
--- a/src/test/java/com/android/tools/r8/shaking/forceproguardcompatibility/ProguardCompatibilityTestBase.java
+++ b/src/test/java/com/android/tools/r8/shaking/forceproguardcompatibility/ProguardCompatibilityTestBase.java
@@ -50,6 +50,14 @@
|| this == R8_CF;
}
+ public boolean isCompatR8() {
+ return this == R8_COMPAT || this == R8_COMPAT_CF;
+ }
+
+ public boolean isR8Dex() {
+ return this == R8_COMPAT || this == R8;
+ }
+
public boolean isProguard() {
return this == PROGUARD5 || this == PROGUARD6 || this == PROGUARD6_THEN_D8;
}
diff --git a/src/test/java/com/android/tools/r8/shaking/ifrule/IfOnAccessModifierTest.java b/src/test/java/com/android/tools/r8/shaking/ifrule/IfOnAccessModifierTest.java
index 3f426a5..7af5d20 100644
--- a/src/test/java/com/android/tools/r8/shaking/ifrule/IfOnAccessModifierTest.java
+++ b/src/test/java/com/android/tools/r8/shaking/ifrule/IfOnAccessModifierTest.java
@@ -5,9 +5,9 @@
import static com.android.tools.r8.utils.codeinspector.Matchers.isPackagePrivate;
import static com.android.tools.r8.utils.codeinspector.Matchers.isPresent;
+import static com.android.tools.r8.utils.codeinspector.Matchers.isPublic;
import static org.hamcrest.CoreMatchers.not;
import static org.hamcrest.MatcherAssert.assertThat;
-import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;
import static org.junit.Assume.assumeFalse;
@@ -93,7 +93,7 @@
assertThat(methodSubject, not(isPresent()));
methodSubject = classSubject.uniqueMethodWithOriginalName("nonPublicMethod");
assertThat(methodSubject, isPresent());
- assertFalse(methodSubject.getMethod().accessFlags.isPublic());
+ assertThat(methodSubject, shrinker.isR8() ? isPublic() : isPackagePrivate());
classSubject = inspector.clazz(ClassForSubsequent.class);
assertThat(classSubject, not(isPresent()));
});
@@ -176,7 +176,11 @@
assertThat(methodSubject, not(isPresent()));
methodSubject = classSubject.uniqueMethodWithOriginalName("nonPublicMethod");
assertThat(methodSubject, isPresent());
- assertThat(methodSubject, isPackagePrivate());
+ assertThat(
+ methodSubject,
+ shrinker.isR8() && isForceAccessModifyingPackagePrivateAndProtectedMethods()
+ ? isPublic()
+ : isPackagePrivate());
});
}
@@ -255,7 +259,11 @@
assertThat(methodSubject, not(isPresent()));
methodSubject = classSubject.uniqueMethodWithOriginalName("nonPublicMethod");
assertThat(methodSubject, isPresent());
- assertThat(methodSubject, isPackagePrivate());
+ assertThat(
+ methodSubject,
+ shrinker.isR8() && isForceAccessModifyingPackagePrivateAndProtectedMethods()
+ ? isPublic()
+ : isPackagePrivate());
});
}
}
diff --git a/src/test/java/com/android/tools/r8/shaking/ifrule/IfOnClassTest.java b/src/test/java/com/android/tools/r8/shaking/ifrule/IfOnClassTest.java
index 74d2cfb..39ec9a9 100644
--- a/src/test/java/com/android/tools/r8/shaking/ifrule/IfOnClassTest.java
+++ b/src/test/java/com/android/tools/r8/shaking/ifrule/IfOnClassTest.java
@@ -10,6 +10,7 @@
import static org.hamcrest.MatcherAssert.assertThat;
import static org.junit.Assert.assertEquals;
+import com.android.tools.r8.NoAccessModification;
import com.android.tools.r8.shaking.forceproguardcompatibility.ProguardCompatibilityTestBase;
import com.android.tools.r8.utils.InternalOptions;
import com.android.tools.r8.utils.codeinspector.ClassSubject;
@@ -33,7 +34,8 @@
EmptyMainClassForIfOnClassTests.class,
Precondition.class,
DependentUser.class,
- Dependent.class);
+ Dependent.class,
+ NoAccessModification.class);
private final Shrinker shrinker;
private final boolean keepPrecondition;
@@ -164,12 +166,15 @@
@Test
public void ifThenKeepClassesWithMembers() throws Exception {
- List<String> config = ImmutableList.of(
- "-if class **.Precondition",
- "-keepclasseswithmembers,allowobfuscation class **.*User {",
- " static void callFoo(...);",
- "}"
- );
+ List<String> config =
+ ImmutableList.of(
+ "-if class **.Precondition",
+ "-keepclasseswithmembers,allowobfuscation class **.*User {",
+ " static void callFoo(...);",
+ "}",
+ shrinker.isR8()
+ ? "-noaccessmodification class * { @com.android.tools.r8.NoAccessModification *; }"
+ : "");
CodeInspector codeInspector = inspectAfterShrinking(shrinker, CLASSES, config);
if (!keepPrecondition) {
@@ -293,15 +298,18 @@
@Test
public void ifThenKeepNames() throws Exception {
- List<String> config = ImmutableList.of(
- // To keep DependentUser#callFoo, which in turn kept Dependent#<init> as well.
- // We're testing renaming of Dependent itself and members.
- "-keepclasseswithmembers,allowobfuscation class **.*User {",
- " static void callFoo(...);",
- "}",
- "-if class **.Precondition",
- "-keepnames class **.Dependent"
- );
+ List<String> config =
+ ImmutableList.of(
+ // To keep DependentUser#callFoo, which in turn kept Dependent#<init> as well.
+ // We're testing renaming of Dependent itself and members.
+ "-keepclasseswithmembers,allowobfuscation class **.*User {",
+ " static void callFoo(...);",
+ "}",
+ "-if class **.Precondition",
+ "-keepnames class **.Dependent",
+ shrinker.isR8()
+ ? "-noaccessmodification class * { @com.android.tools.r8.NoAccessModification *; }"
+ : "");
CodeInspector codeInspector = inspectAfterShrinking(shrinker, CLASSES, config);
@@ -316,17 +324,20 @@
@Test
public void ifThenKeepClassesWithMemberNames() throws Exception {
- List<String> config = ImmutableList.of(
- // To keep DependentUser#callFoo, which in turn kept Dependent#<init> as well.
- // We're testing renaming of Dependent itself and members.
- "-keepclasseswithmembers,allowobfuscation class **.*User {",
- " static void callFoo(...);",
- "}",
- "-if class **.Precondition",
- "-keepclasseswithmembernames class **.Dependent {",
- " <methods>;",
- "}"
- );
+ List<String> config =
+ ImmutableList.of(
+ // To keep DependentUser#callFoo, which in turn kept Dependent#<init> as well.
+ // We're testing renaming of Dependent itself and members.
+ "-keepclasseswithmembers,allowobfuscation class **.*User {",
+ " static void callFoo(...);",
+ "}",
+ "-if class **.Precondition",
+ "-keepclasseswithmembernames class **.Dependent {",
+ " <methods>;",
+ "}",
+ shrinker.isR8()
+ ? "-noaccessmodification class * { @com.android.tools.r8.NoAccessModification *; }"
+ : "");
CodeInspector codeInspector = inspectAfterShrinking(shrinker, CLASSES, config);
@@ -342,17 +353,20 @@
@Test
public void ifThenKeepClassMemberNames() throws Exception {
- List<String> config = ImmutableList.of(
- // To keep DependentUser#callFoo, which in turn kept Dependent#<init> as well.
- // We're testing renaming of Dependent itself and members.
- "-keepclasseswithmembers,allowobfuscation class **.*User {",
- " static void callFoo(...);",
- "}",
- "-if class **.Precondition",
- "-keepclassmembernames class **.Dependent {",
- " <methods>;",
- "}"
- );
+ List<String> config =
+ ImmutableList.of(
+ // To keep DependentUser#callFoo, which in turn kept Dependent#<init> as well.
+ // We're testing renaming of Dependent itself and members.
+ "-keepclasseswithmembers,allowobfuscation class **.*User {",
+ " static void callFoo(...);",
+ "}",
+ "-if class **.Precondition",
+ "-keepclassmembernames class **.Dependent {",
+ " <methods>;",
+ "}",
+ shrinker.isR8()
+ ? "-noaccessmodification class * { @com.android.tools.r8.NoAccessModification *; }"
+ : "");
CodeInspector codeInspector = inspectAfterShrinking(shrinker, CLASSES, config);
diff --git a/src/test/java/com/android/tools/r8/shaking/ifrule/IfOnClassTestClasses.java b/src/test/java/com/android/tools/r8/shaking/ifrule/IfOnClassTestClasses.java
index 65b5c29..78575b1 100644
--- a/src/test/java/com/android/tools/r8/shaking/ifrule/IfOnClassTestClasses.java
+++ b/src/test/java/com/android/tools/r8/shaking/ifrule/IfOnClassTestClasses.java
@@ -3,6 +3,8 @@
// BSD-style license that can be found in the LICENSE file.
package com.android.tools.r8.shaking.ifrule;
+import com.android.tools.r8.NoAccessModification;
+
class EmptyMainClassForIfOnClassTests {
public static void main(String[] args) {
}
@@ -11,8 +13,10 @@
// Precondition -> DependentUser -> Dependent
// That is, this class and members will be kept only if Precondition and DependentUser are kept.
class Dependent {
- private int intField;
- private String strField;
+
+ @NoAccessModification private int intField;
+
+ @NoAccessModification private String strField;
Dependent(int i, String s) {
intField = i;
diff --git a/src/test/java/com/android/tools/r8/shaking/ifrule/verticalclassmerging/KeepIfPresentRuleWithVerticalClassMergingTest.java b/src/test/java/com/android/tools/r8/shaking/ifrule/verticalclassmerging/KeepIfPresentRuleWithVerticalClassMergingTest.java
index c330985..fbde552 100644
--- a/src/test/java/com/android/tools/r8/shaking/ifrule/verticalclassmerging/KeepIfPresentRuleWithVerticalClassMergingTest.java
+++ b/src/test/java/com/android/tools/r8/shaking/ifrule/verticalclassmerging/KeepIfPresentRuleWithVerticalClassMergingTest.java
@@ -10,6 +10,7 @@
import static org.junit.Assert.assertEquals;
import com.android.tools.r8.NeverInline;
+import com.android.tools.r8.NoAccessModification;
import com.android.tools.r8.TestBase;
import com.android.tools.r8.TestParameters;
import com.android.tools.r8.TestParametersCollection;
@@ -41,6 +42,7 @@
.addKeepRules(
"-if class * extends " + A.class.getTypeName(), "-keep class <1> { <init>(...); }")
.enableInliningAnnotations()
+ .enableNoAccessModificationAnnotationsForClasses()
.setMinApi(parameters)
.compile()
.inspect(
@@ -65,6 +67,8 @@
}
}
+ // TODO(b/287891322): Allow vertical class merging even when A is made public.
+ @NoAccessModification
static class A {}
static class B extends A {
diff --git a/src/test/java/com/android/tools/r8/shaking/ifrule/verticalclassmerging/MergedFieldTypeTest.java b/src/test/java/com/android/tools/r8/shaking/ifrule/verticalclassmerging/MergedFieldTypeTest.java
index df888c0..f28c2a5 100644
--- a/src/test/java/com/android/tools/r8/shaking/ifrule/verticalclassmerging/MergedFieldTypeTest.java
+++ b/src/test/java/com/android/tools/r8/shaking/ifrule/verticalclassmerging/MergedFieldTypeTest.java
@@ -11,6 +11,7 @@
import static org.junit.Assert.assertNotEquals;
import com.android.tools.r8.NeverClassInline;
+import com.android.tools.r8.NoAccessModification;
import com.android.tools.r8.NoRedundantFieldLoadElimination;
import com.android.tools.r8.R8FullTestBuilder;
import com.android.tools.r8.TestParameters;
@@ -50,6 +51,7 @@
public static class MergedFieldTypeWithCollisionTest extends MergedTypeBaseTest {
+ @NoAccessModification
static class SuperTestClass {
@NoRedundantFieldLoadElimination private A field = new B();
@@ -85,6 +87,7 @@
@Override
public void configure(R8FullTestBuilder builder) {
+ super.configure(builder);
builder
.enableNeverClassInliningAnnotations()
.enableNoRedundantFieldLoadEliminationAnnotations();
diff --git a/src/test/java/com/android/tools/r8/shaking/ifrule/verticalclassmerging/MergedParameterTypeTest.java b/src/test/java/com/android/tools/r8/shaking/ifrule/verticalclassmerging/MergedParameterTypeTest.java
index 32d30d9..01f8190 100644
--- a/src/test/java/com/android/tools/r8/shaking/ifrule/verticalclassmerging/MergedParameterTypeTest.java
+++ b/src/test/java/com/android/tools/r8/shaking/ifrule/verticalclassmerging/MergedParameterTypeTest.java
@@ -10,6 +10,7 @@
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotEquals;
+import com.android.tools.r8.NoAccessModification;
import com.android.tools.r8.NoHorizontalClassMerging;
import com.android.tools.r8.R8FullTestBuilder;
import com.android.tools.r8.TestParameters;
@@ -54,6 +55,7 @@
public static class MergedParameterTypeWithCollisionTest extends MergedTypeBaseTest {
+ @NoAccessModification
@NoHorizontalClassMerging
static class SuperTestClass {
diff --git a/src/test/java/com/android/tools/r8/shaking/ifrule/verticalclassmerging/MergedReturnTypeTest.java b/src/test/java/com/android/tools/r8/shaking/ifrule/verticalclassmerging/MergedReturnTypeTest.java
index 5a03792..9e98e16 100644
--- a/src/test/java/com/android/tools/r8/shaking/ifrule/verticalclassmerging/MergedReturnTypeTest.java
+++ b/src/test/java/com/android/tools/r8/shaking/ifrule/verticalclassmerging/MergedReturnTypeTest.java
@@ -11,6 +11,7 @@
import static org.junit.Assert.assertNotEquals;
import com.android.tools.r8.AssumeMayHaveSideEffects;
+import com.android.tools.r8.NoAccessModification;
import com.android.tools.r8.NoHorizontalClassMerging;
import com.android.tools.r8.R8FullTestBuilder;
import com.android.tools.r8.TestParameters;
@@ -62,6 +63,7 @@
public static class MergedReturnTypeWithCollisionTest extends MergedTypeBaseTest {
+ @NoAccessModification
@NoHorizontalClassMerging
static class SuperTestClass {
diff --git a/src/test/java/com/android/tools/r8/shaking/ifrule/verticalclassmerging/MergedTypeBaseTest.java b/src/test/java/com/android/tools/r8/shaking/ifrule/verticalclassmerging/MergedTypeBaseTest.java
index f6e1ea7..da7c397 100644
--- a/src/test/java/com/android/tools/r8/shaking/ifrule/verticalclassmerging/MergedTypeBaseTest.java
+++ b/src/test/java/com/android/tools/r8/shaking/ifrule/verticalclassmerging/MergedTypeBaseTest.java
@@ -9,6 +9,7 @@
import static org.hamcrest.core.IsNot.not;
import static org.junit.Assert.assertEquals;
+import com.android.tools.r8.NoAccessModification;
import com.android.tools.r8.R8FullTestBuilder;
import com.android.tools.r8.TestBase;
import com.android.tools.r8.TestParameters;
@@ -29,12 +30,18 @@
static class B extends A {}
+ // TODO(b/287891322): Allow vertical class merging even when C is made public.
+ @NoAccessModification
static class C {}
+ // TODO(b/287891322): Allow vertical class merging even when I is made public.
+ @NoAccessModification
interface I {}
interface J extends I {}
+ // TODO(b/287891322): Allow vertical class merging even when K is made public.
+ @NoAccessModification
interface K {}
static class Unused {}
@@ -68,8 +75,10 @@
}
public void configure(R8FullTestBuilder builder) {
- builder.addOptionsModification(
- options -> options.enableVerticalClassMerging = enableVerticalClassMerging);
+ builder
+ .addOptionsModification(
+ options -> options.enableVerticalClassMerging = enableVerticalClassMerging)
+ .enableNoAccessModificationAnnotationsForClasses();
}
public abstract Class<?> getTestClass();
diff --git a/src/test/java/com/android/tools/r8/shaking/innerclassattributes/MissingOuterClassTest.java b/src/test/java/com/android/tools/r8/shaking/innerclassattributes/MissingOuterClassTest.java
index c16510e..8124058 100644
--- a/src/test/java/com/android/tools/r8/shaking/innerclassattributes/MissingOuterClassTest.java
+++ b/src/test/java/com/android/tools/r8/shaking/innerclassattributes/MissingOuterClassTest.java
@@ -82,8 +82,9 @@
assertEquals(outerClassSubject.getDexProgramClass().getType(), innerClassAttribute.getOuter());
if (parameters.isCfRuntime() || hostClassSubject == innerClassSubject) {
assertEquals(
- DescriptorUtils.getInnerClassName(
- outerClassSubject.getFinalDescriptor(), innerClassSubject.getFinalDescriptor()),
+ DescriptorUtils.getInnerClassNameFromSimpleName(
+ outerClassSubject.getDexProgramClass().getSimpleName(),
+ innerClassSubject.getDexProgramClass().getSimpleName()),
innerClassAttribute.getInnerName().toSourceString());
} else {
assertEquals(DexItemFactory.unknownTypeName, innerClassAttribute.getInnerName());
diff --git a/src/test/java/com/android/tools/r8/shaking/librarymethodoverride/LibraryMethodOverrideDefaultMethodTest.java b/src/test/java/com/android/tools/r8/shaking/librarymethodoverride/LibraryMethodOverrideDefaultMethodTest.java
index 1b727a0..f20b1b5 100644
--- a/src/test/java/com/android/tools/r8/shaking/librarymethodoverride/LibraryMethodOverrideDefaultMethodTest.java
+++ b/src/test/java/com/android/tools/r8/shaking/librarymethodoverride/LibraryMethodOverrideDefaultMethodTest.java
@@ -4,6 +4,8 @@
package com.android.tools.r8.shaking.librarymethodoverride;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertNull;
import static org.junit.Assert.assertTrue;
import com.android.tools.r8.TestBase;
@@ -62,9 +64,13 @@
appInfo
.definitionFor(dexItemFactory.createType(descriptor(ProgramI.class)))
.asProgramClass();
- DexEncodedMethod method =
- clazz.lookupVirtualMethod(m -> m.getReference().name.toString().equals("foo"));
- assertTrue(method.isLibraryMethodOverride().isTrue());
+ DexEncodedMethod method = clazz.lookupVirtualMethod(m -> m.getName().toString().equals("foo"));
+ if (appInfo.options().canUseDefaultAndStaticInterfaceMethods() || mode.isInitialTreeShaking()) {
+ assertNotNull(method);
+ assertTrue(method.isLibraryMethodOverride().isTrue());
+ } else {
+ assertNull(method);
+ }
}
public interface LibraryI {
diff --git a/src/test/java/com/android/tools/r8/transformers/ClassFileTransformer.java b/src/test/java/com/android/tools/r8/transformers/ClassFileTransformer.java
index 2e3df74..5c8821d 100644
--- a/src/test/java/com/android/tools/r8/transformers/ClassFileTransformer.java
+++ b/src/test/java/com/android/tools/r8/transformers/ClassFileTransformer.java
@@ -187,6 +187,22 @@
return classReference;
}
+ public ClassFileTransformer setClassAccessFlags(int accessFlags) {
+ return addClassTransformer(
+ new ClassTransformer() {
+ @Override
+ public void visit(
+ int version,
+ int access,
+ String name,
+ String signature,
+ String superName,
+ String[] interfaces) {
+ super.visit(version, accessFlags, name, signature, superName, interfaces);
+ }
+ });
+ }
+
/** Unconditionally replace the implements clause of a class. */
public ClassFileTransformer setImplements(Class<?>... interfaces) {
return setImplementsClassDescriptors(
diff --git a/src/test/java/com/android/tools/r8/utils/codeinspector/FoundMethodSubject.java b/src/test/java/com/android/tools/r8/utils/codeinspector/FoundMethodSubject.java
index cc336b6..fd18f5a 100644
--- a/src/test/java/com/android/tools/r8/utils/codeinspector/FoundMethodSubject.java
+++ b/src/test/java/com/android/tools/r8/utils/codeinspector/FoundMethodSubject.java
@@ -30,6 +30,7 @@
import com.android.tools.r8.graph.MethodAccessFlags;
import com.android.tools.r8.graph.ProgramMethod;
import com.android.tools.r8.ir.code.IRCode;
+import com.android.tools.r8.ir.conversion.MethodConversionOptions;
import com.android.tools.r8.naming.MemberNaming;
import com.android.tools.r8.naming.MemberNaming.MethodSignature;
import com.android.tools.r8.naming.signature.GenericSignatureParser;
@@ -74,7 +75,12 @@
@Override
public IRCode buildIR(AppView<?> appView) {
assert codeInspector.application.options.programConsumer != null;
- return getProgramMethod().buildIR(appView);
+ return getProgramMethod()
+ .buildIR(
+ appView,
+ appView.enableWholeProgramOptimizations()
+ ? MethodConversionOptions.nonConverting()
+ : MethodConversionOptions.forD8(appView));
}
@Override
diff --git a/src/test/java/com/android/tools/r8/workaround/IncorrectTypeRefinementForThrowableTest.java b/src/test/java/com/android/tools/r8/workaround/IncorrectTypeRefinementForThrowableTest.java
new file mode 100644
index 0000000..bf3f43e
--- /dev/null
+++ b/src/test/java/com/android/tools/r8/workaround/IncorrectTypeRefinementForThrowableTest.java
@@ -0,0 +1,57 @@
+// Copyright (c) 2023, 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.workaround;
+
+
+import com.android.tools.r8.TestBase;
+import com.android.tools.r8.TestParameters;
+import com.android.tools.r8.TestParametersCollection;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.junit.runners.Parameterized;
+import org.junit.runners.Parameterized.Parameter;
+import org.junit.runners.Parameterized.Parameters;
+
+@RunWith(Parameterized.class)
+public class IncorrectTypeRefinementForThrowableTest extends TestBase {
+
+ @Parameter(0)
+ public TestParameters parameters;
+
+ @Parameters(name = "{0}")
+ public static TestParametersCollection data() {
+ return getTestParameters().withAllRuntimesAndApiLevels().build();
+ }
+
+ @Test
+ public void testD8() throws Exception {
+ parameters.assumeDexRuntime();
+ testForD8(parameters.getBackend())
+ .addInnerClasses(getClass())
+ .release()
+ .setMinApi(parameters)
+ .run(parameters.getRuntime(), Main.class)
+ .assertSuccessWithEmptyOutput();
+ }
+
+ @Test
+ public void testJvm() throws Exception {
+ parameters.assumeJvmTestParameters();
+ testForJvm(parameters)
+ .addInnerClasses(getClass())
+ .run(parameters.getRuntime(), Main.class)
+ .assertSuccessWithEmptyOutput();
+ }
+
+ static class Main {
+
+ public static void main(String[] args) {
+ RuntimeException o = null;
+ if (o instanceof Object) {
+ throw o;
+ }
+ }
+ }
+}
diff --git a/src/test/smali/arithmetic/Arithmetic.smali b/src/test/smali/arithmetic/Arithmetic.smali
deleted file mode 100644
index f76b9b3..0000000
--- a/src/test/smali/arithmetic/Arithmetic.smali
+++ /dev/null
@@ -1,254 +0,0 @@
-# Copyright (c) 2016, 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.
-
-.class public LTest;
-
-.super Ljava/lang/Object;
-
-.method static addMinusOne(I)I
- .locals 1
-
- const/4 v0, -1
- add-int v0, p0, v0
- return v0
-.end method
-
-.method static addTwoConstants()I
- .locals 2
-
- const/4 v0, 1
- const/4 v1, 2
- add-int v0, v0, v1
- return v0
-.end method
-
-.method static addSameTwoConstants()I
- .locals 2
-
- const/4 v0, 1
- add-int v0, v0, v0
- return v0
-.end method
-
-.method static subMinusOne(I)I
- .locals 1
-
- const/4 v0, -1
- sub-int v0, p0, v0
- return v0
-.end method
-
-.method static subSameTwoConstants()I
- .locals 2
-
- const/4 v0, 1
- sub-int v0, v0, v0
- return v0
-.end method
-
-.method static subtractConstants()I
- .locals 9
-
- const/4 v0, 0
-
- const v1, 127 # Max 8-bit signed integer.
- const v2, -128 # Min 8-bit signed integer.
- const v3, 128 # Max 8-bit signed integer plus one.
- const v4, -129 # Min 8-bit signed integer minus one.
-
- const v5, 32767 # Max 16-bit signed integer.
- const v6, -32768 # Min 16-bit signed integer.
- const v7, 32768 # Max 16-bit signed integer plus one.
- const v8, -32769 # Min 16-bit signed integer minus one.
-
- sub-int v0, v0, v1
- sub-int v0, v0, v2
- sub-int v0, v0, v3
- sub-int v0, v0, v4
- sub-int v0, v0, v5
- sub-int v0, v0, v6
- sub-int v0, v0, v7
- sub-int v0, v0, v8
- sub-int v0, v1, v0
- sub-int v0, v2, v0
- sub-int v0, v3, v0
- sub-int v0, v4, v0
- sub-int v0, v5, v0
- sub-int v0, v6, v0
- sub-int v0, v7, v0
- sub-int v0, v8, v0
-
- return v0
-.end method
-
-.method static sixteenIntArgMethod(IIIIIIIIIIIIIIII)V
- .locals 0
- return-void
-.end method
-
-# Same code as subtractConstants, but try to force the register allocator to allocate registers for
-# the arithmetic operations above 15.
-.method static subtractConstants8bitRegisters()I
- .locals 32
-
- const/4 v0, 0
-
- const v1, 127 # Max 8-bit signed integer.
- const v2, -128 # Min 8-bit signed integer.
- const v3, 128 # Max 8-bit signed integer plus one.
- const v4, -129 # Min 8-bit signed integer minus one.
-
- const v5, 32767 # Max 16-bit signed integer.
- const v6, -32768 # Min 16-bit signed integer.
- const v7, 32768 # Max 16-bit signed integer plus one.
- const v8, -32769 # Min 16-bit signed integer minus one.
-
- const v9, 9
- const v10, 10
- const v11, 11
- const v12, 12
- const v13, 13
- const v14, 14
- const v15, 15
-
- sub-int v16, v0, v1
- sub-int v17, v16, v2
- sub-int v18, v17, v3
- sub-int v19, v18, v4
- sub-int v20, v19, v5
- sub-int v21, v20, v6
- sub-int v22, v21, v7
- sub-int v23, v22, v8
- sub-int v24, v1, v23
- sub-int v25, v2, v24
- sub-int v26, v3, v25
- sub-int v27, v4, v26
- sub-int v28, v5, v27
- sub-int v29, v6, v28
- sub-int v30, v7, v29
- sub-int v31, v8, v30
-
- invoke-static/range {v16 .. v31}, LTest;->sixteenIntArgMethod(IIIIIIIIIIIIIIII)V
-
- return v31
-.end method
-
-.method static addConstantUsedTwice()I
- .locals 4
-
- const/4 v0, 0
- const/4 v1, 1
- add-int/2addr v0, v1
- add-int/2addr v0, v1
- return v0
-.end method
-
-.method static addTwoLongConstants()J
- .locals 4
-
- const-wide v0, 1
- const-wide v2, 2
- add-long v0, v0, v2
- return-wide v0
-.end method
-
-.method static addTwoDoubleConstants()D
- .locals 4
-
- const-wide v0, 0x3ff0000000000000L # 1.0
- const-wide v2, 0x4000000000000000L # 2.0
- add-double v0, v0, v2
- return-wide v0
-.end method
-
-.method static cmpFold()I
- .locals 4
-
- const-wide v0, 0
- const-wide v2, 0
- cmp-long v0, v0, v2
- return v0
-.end method
-
-.method static addFoldLeft(I)I
- .locals 2
-
- const/4 v0, 1
- const/4 v1, 2
- add-int/2addr v0, v1
- add-int/2addr v0, p0
- return v0
-.end method
-
-.method static subFoldLeft(I)I
- .locals 2
-
- const/4 v0, 1
- const/4 v1, 2
- sub-int/2addr v0, v1
- sub-int/2addr v0, p0
- return v0
-.end method
-
-.method public static main([Ljava/lang/String;)V
- .locals 3
-
- sget-object v0, Ljava/lang/System;->out:Ljava/io/PrintStream;
-
- # Calculate: 0 + (-1).
- const/4 v1, 0
- invoke-static {v1}, LTest;->addMinusOne(I)I
- move-result v1
- invoke-virtual {v0, v1}, Ljava/io/PrintStream;->println(I)V
-
- invoke-static {}, LTest;->addTwoConstants()I
- move-result v1
- invoke-virtual {v0, v1}, Ljava/io/PrintStream;->println(I)V
-
- invoke-static {}, LTest;->addSameTwoConstants()I
- move-result v1
- invoke-virtual {v0, v1}, Ljava/io/PrintStream;->println(I)V
-
- invoke-static {}, LTest;->addTwoLongConstants()J
- move-result-wide v1
- invoke-virtual {v0, v1, v2}, Ljava/io/PrintStream;->println(J)V
-
- invoke-static {}, LTest;->addTwoDoubleConstants()D
- move-result-wide v1
- invoke-virtual {v0, v1, v2}, Ljava/io/PrintStream;->println(D)V
-
- # Calculate: 0 - (-1).
- const/4 v1, 0
- invoke-static {v1}, LTest;->subMinusOne(I)I
- move-result v1
- invoke-virtual {v0, v1}, Ljava/io/PrintStream;->println(I)V
-
- invoke-static {}, LTest;->subSameTwoConstants()I
- move-result v1
- invoke-virtual {v0, v1}, Ljava/io/PrintStream;->println(I)V
-
- invoke-static {}, LTest;->subtractConstants()I
- move-result v1
- invoke-virtual {v0, v1}, Ljava/io/PrintStream;->println(I)V
-
- invoke-static {}, LTest;->subtractConstants8bitRegisters()I
- move-result v1
- invoke-virtual {v0, v1}, Ljava/io/PrintStream;->println(I)V
-
- invoke-static {}, LTest;->addConstantUsedTwice()I
- move-result v1
- invoke-virtual {v0, v1}, Ljava/io/PrintStream;->println(I)V
-
- const/4 v1, 1
- invoke-static {v1}, LTest;->addFoldLeft(I)I
- move-result v1
- invoke-virtual {v0, v1}, Ljava/io/PrintStream;->println(I)V
-
- const/4 v1, 1
- invoke-static {v1}, LTest;->subFoldLeft(I)I
- move-result v1
- invoke-virtual {v0, v1}, Ljava/io/PrintStream;->println(I)V
-
- return-void
-.end method
diff --git a/src/test/smali/bad-codegen/Test.java b/src/test/smali/bad-codegen/Test.java
deleted file mode 100644
index f301ed7..0000000
--- a/src/test/smali/bad-codegen/Test.java
+++ /dev/null
@@ -1,40 +0,0 @@
-// Copyright (c) 2016, 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 java.util.Map;
-
-public class Test {
- public Test a;
- public static Test P;
-
- public Test() {
- }
-
- public Test(int a, Test b, Test c, Long d, Test e, Map f) {
- }
-
- public Test(int i1, int i2, int i3) {
- }
-
- public long b() {
- return 0;
- }
-
- public boolean c() {
- return false;
- }
-
- public boolean d() {
- return false;
- }
-
- public static void main(String[] args) {
- Test test = new Test();
- try {
- new TestObject().a(test, test, test, test, true);
- } catch (Throwable t) {
- System.out.println(t);
- }
- }
-}
diff --git a/src/test/smali/bad-codegen/TestObject.java b/src/test/smali/bad-codegen/TestObject.java
deleted file mode 100644
index dc96fca..0000000
--- a/src/test/smali/bad-codegen/TestObject.java
+++ /dev/null
@@ -1,9 +0,0 @@
-// Copyright (c) 2016, 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.
-
-public class TestObject {
- public Test a(Test a, Test b, Test c, Test d, boolean e) {
- return new Test();
- }
-}
diff --git a/src/test/smali/bad-codegen/TestObject.smali b/src/test/smali/bad-codegen/TestObject.smali
deleted file mode 100644
index 811cd21..0000000
--- a/src/test/smali/bad-codegen/TestObject.smali
+++ /dev/null
@@ -1,1494 +0,0 @@
-# Copyright (c) 2016, 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.
-
-.class public final LTestObject;
-.super Ljava/lang/Object;
-
-.field public a:LTest;
-.field public b:Ljava/util/List;
-
-.method public constructor <init>()V
- .registers 1
- invoke-direct {p0}, Ljava/lang/Object;-><init>()V
- return-void
-.end method
-
-.method public final a(LTest;LTest;LTest;LTest;Z)LTest;
- .registers 34
- move-object/from16 v0, p0
- iget-object v12, v0, LTestObject;->a:LTest;
- iget-object v4, v12, LTest;->a:LTest;
- invoke-virtual {v4}, LTest;->b()J
- move-result-wide v14
- const/4 v10, 0x0
- const/4 v4, 0x0
- if-eqz p2, :cond_9cf
- move-object/from16 v0, p2
- iget-object v10, v0, LTest;->a:LTest;
- move-object/from16 v0, p2
- iget-object v4, v0, LTest;->b:Ljava/util/List;
- move-object v13, v4
- :goto_17
- if-eqz v10, :cond_1f
- invoke-virtual {v10}, LTest;->d()Z
- move-result v4
- if-nez v4, :cond_21d
- :cond_1f
- new-instance v4, LTest;
- const/4 v5, 0x0
- const/4 v6, 0x0
- sget-object v7, LTest;->P:LTest;
- const-wide/16 v8, 0x0
- const/4 v11, 0x0
- invoke-direct/range {v4 .. v11}, LTest;-><init>(ILTest;LTest;JLTest;Ljava/util/Map;)V
- move-object v14, v4
- :goto_2c
- if-nez p4, :cond_44
- iget-object v4, v14, LTest;->a:LTest;
- sget-object v5, LTest;->P:LTest;
- if-ne v4, v5, :cond_44
- iget-object v4, v14, LTest;->a:LTest;
- new-instance p4, LTest;
- iget v5, v4, LTest;->c:I
- iget v4, v4, LTest;->d:I
- const v6, 0x2faf080
- move-object/from16 v0, p4
- invoke-direct {v0, v5, v4, v6}, LTest;-><init>(III)V
- :cond_44
- move-object/from16 v0, p0
- iget-object v4, v0, LTestObject;->a:LTest;
- invoke-virtual {v4}, LTest;->a()Z
- move-result v5
- if-eqz v5, :cond_6c5
- iget-object v8, v4, LTest;->a:LTest;
- if-nez p1, :cond_61e
- const/4 v4, 0x0
- :cond_53
- :goto_53
- if-eqz v4, :cond_6c8
- move-object v12, v4
- :goto_56
- iget-object v4, v12, LTest;->a:LTest;
- sget-object v5, LTest;->P:LTest;
- if-ne v4, v5, :cond_931
- const/4 v4, 0x1
- :goto_5d
- iget-object v5, v14, LTest;->a:LTest;
- sget-object v6, LTest;->P:LTest;
- if-ne v5, v6, :cond_934
- const/4 v5, 0x1
- :goto_64
- if-nez v4, :cond_937
- if-nez v5, :cond_937
- const/4 v4, 0x0
- move-object v13, v4
- :goto_6a
- sget-object v4, LTest;->P:LTest;
- invoke-static {v4}, LTest;->a(LTest;)Z
- move-result v4
- if-eqz v4, :cond_212
- const/4 v5, 0x0
- const/4 v4, 0x0
- if-eqz v13, :cond_9c8
- if-ne v13, v14, :cond_976
- const/4 v5, 0x1
- move v11, v4
- move v15, v5
- :goto_7b
- if-eqz v12, :cond_97b
- iget-object v4, v12, LTest;->a:LTest;
- sget-object v5, LTest;->P:LTest;
- if-ne v4, v5, :cond_97b
- const/4 v4, 0x1
- :goto_84
- if-eqz v4, :cond_9c
- const/4 v7, 0x0
- iget v4, v12, LTest;->a:I
- packed-switch v4, :pswitch_data_9d2
- :goto_8c
- :pswitch_8c
- if-eqz v7, :cond_9c
- move-object/from16 v0, p0
- iget-object v4, v0, LTestObject;->a:LTest;
- const-string v5, ""
- const-string v6, ""
- const-wide/16 v8, 0x1
- const/4 v10, 0x1
- invoke-interface/range {v4 .. v10}, LTest;->a(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;JZ)V
- :cond_9c
- iget-object v4, v14, LTest;->a:LTest;
- sget-object v5, LTest;->P:LTest;
- if-ne v4, v5, :cond_98e
- const/4 v4, 0x1
- :goto_a3
- if-eqz v4, :cond_bb
- const/4 v7, 0x0
- iget v4, v14, LTest;->a:I
- packed-switch v4, :pswitch_data_9e0
- :goto_ab
- if-eqz v7, :cond_bb
- move-object/from16 v0, p0
- iget-object v4, v0, LTestObject;->a:LTest;
- const-string v5, ""
- const-string v6, ""
- const-wide/16 v8, 0x1
- const/4 v10, 0x1
- invoke-interface/range {v4 .. v10}, LTest;->a(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;JZ)V
- :cond_bb
- if-eqz v15, :cond_999
- move-object/from16 v0, p0
- iget-object v4, v0, LTestObject;->a:LTest;
- const-string v5, ""
- const-string v6, ""
- const-string v7, ""
- const-wide/16 v8, 0x1
- const/4 v10, 0x1
- invoke-interface/range {v4 .. v10}, LTest;->a(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;JZ)V
- :goto_cd
- move-object/from16 v0, p0
- iget-object v4, v0, LTestObject;->a:LTest;
- if-eqz v4, :cond_119
- move-object/from16 v0, p0
- iget-object v4, v0, LTestObject;->a:LTest;
- move-object/from16 v0, p0
- iget-object v5, v0, LTestObject;->a:LTest;
- const-string v6, ""
- invoke-virtual {v4}, LTest;->a()Z
- move-result v7
- if-eqz v7, :cond_f6
- iget-object v4, v4, LTest;->a:LTest;
- iget-object v7, v4, LTest;->a:LTest;
- if-eqz v7, :cond_f6
- iget-object v7, v4, LTest;->a:LTest;
- iget-object v7, v7, LTest;->a:LTest;
- if-eqz v7, :cond_f6
- iget-object v4, v4, LTest;->a:LTest;
- iget-object v4, v4, LTest;->a:LTest;
- invoke-virtual {v4, v5, v6}, LTest;->a(LTest;Ljava/lang/String;)V
- :cond_f6
- move-object/from16 v0, p0
- iget-object v4, v0, LTestObject;->a:LTest;
- move-object/from16 v0, p0
- iget-object v5, v0, LTestObject;->a:LTest;
- const-string v6, ""
- invoke-virtual {v4}, LTest;->b()Z
- move-result v7
- if-eqz v7, :cond_119
- iget-object v4, v4, LTest;->a:LTest;
- iget-object v7, v4, LTest;->a:LTest;
- if-eqz v7, :cond_119
- iget-object v7, v4, LTest;->a:LTest;
- iget-object v7, v7, LTest;->a:LTest;
- if-eqz v7, :cond_119
- iget-object v4, v4, LTest;->a:LTest;
- iget-object v4, v4, LTest;->a:LTest;
- invoke-virtual {v4, v5, v6}, LTest;->a(LTest;Ljava/lang/String;)V
- :cond_119
- move-object/from16 v0, p0
- iget-object v4, v0, LTestObject;->a:LTest;
- if-eqz v4, :cond_212
- move-object/from16 v0, p0
- iget-object v4, v0, LTestObject;->a:LTest;
- move-object/from16 v0, p0
- iget-object v5, v0, LTestObject;->a:LTest;
- const-string v6, ""
- invoke-virtual {v4}, LTest;->a()Z
- move-result v7
- if-eqz v7, :cond_212
- iget-object v4, v4, LTest;->a:LTest;
- invoke-static {v5}, LTest;->a(Ljava/lang/Object;)Ljava/lang/Object;
- invoke-static {v6}, LTest;->a(Ljava/lang/Object;)Ljava/lang/Object;
- iget-object v7, v4, LTest;->a:LTest;
- iget-object v15, v7, LTest;->a:LTest;
- iget-object v4, v4, LTest;->a:LTest;
- iget-object v7, v4, LTest;->a:LTest;
- if-eqz v7, :cond_9bf
- iget-object v4, v4, LTest;->a:LTest;
- invoke-virtual {v4}, LTest;->b()J
- move-result-wide v8
- move-wide/from16 v16, v8
- :goto_149
- iget-wide v8, v15, LTest;->l:J
- const-wide/16 v10, -0x1
- cmp-long v4, v8, v10
- if-eqz v4, :cond_191
- iget-wide v8, v15, LTest;->l:J
- cmp-long v4, v16, v8
- if-lez v4, :cond_191
- iget-wide v8, v15, LTest;->l:J
- sub-long v8, v16, v8
- long-to-float v4, v8
- const v7, 0x4ca4cb80 # 8.64E7f
- div-float v10, v4, v7
- const-string v7, ""
- iget v4, v15, LTest;->g:I
- int-to-long v8, v4
- invoke-static/range {v5 .. v10}, LTest;->a(LTest;Ljava/lang/String;Ljava/lang/String;JF)V
- const-string v7, ""
- iget v4, v15, LTest;->c:I
- int-to-long v8, v4
- invoke-static/range {v5 .. v10}, LTest;->a(LTest;Ljava/lang/String;Ljava/lang/String;JF)V
- const-string v7, ""
- iget v4, v15, LTest;->b:I
- int-to-long v8, v4
- invoke-static/range {v5 .. v10}, LTest;->a(LTest;Ljava/lang/String;Ljava/lang/String;JF)V
- const-string v7, ""
- iget v4, v15, LTest;->a:I
- int-to-long v8, v4
- invoke-static/range {v5 .. v10}, LTest;->a(LTest;Ljava/lang/String;Ljava/lang/String;JF)V
- const-string v7, ""
- iget v4, v15, LTest;->d:I
- int-to-long v8, v4
- invoke-static/range {v5 .. v10}, LTest;->a(LTest;Ljava/lang/String;Ljava/lang/String;JF)V
- const-string v7, ""
- iget v4, v15, LTest;->h:I
- int-to-long v8, v4
- invoke-static/range {v5 .. v10}, LTest;->a(LTest;Ljava/lang/String;Ljava/lang/String;JF)V
- :cond_191
- const-string v7, ""
- iget v4, v15, LTest;->h:I
- int-to-long v8, v4
- iget v10, v15, LTest;->g:I
- const/4 v11, 0x0
- invoke-static/range {v5 .. v11}, LTest;->a(LTest;Ljava/lang/String;Ljava/lang/String;JII)I
- move-result v4
- iput v4, v15, LTest;->h:I
- const-string v7, ""
- iget-wide v8, v15, LTest;->k:J
- iget v10, v15, LTest;->g:I
- const/4 v11, 0x0
- invoke-static/range {v5 .. v11}, LTest;->a(LTest;Ljava/lang/String;Ljava/lang/String;JII)I
- move-result v4
- int-to-long v8, v4
- iput-wide v8, v15, LTest;->k:J
- const-string v7, ""
- iget v4, v15, LTest;->i:I
- int-to-long v8, v4
- iget v10, v15, LTest;->j:I
- const/4 v11, 0x0
- invoke-static/range {v5 .. v11}, LTest;->a(LTest;Ljava/lang/String;Ljava/lang/String;JII)I
- move-result v4
- iput v4, v15, LTest;->i:I
- const/4 v4, 0x0
- iput v4, v15, LTest;->j:I
- const-string v7, ""
- iget v4, v15, LTest;->e:I
- int-to-long v8, v4
- iget v10, v15, LTest;->a:I
- const/4 v11, 0x0
- invoke-static/range {v5 .. v11}, LTest;->a(LTest;Ljava/lang/String;Ljava/lang/String;JII)I
- move-result v4
- iput v4, v15, LTest;->e:I
- const-string v4, ""
- iget v7, v15, LTest;->a:I
- const/4 v8, 0x0
- invoke-static {v5, v6, v4, v7, v8}, LTest;->a(LTest;Ljava/lang/String;Ljava/lang/String;II)I
- move-result v4
- iput v4, v15, LTest;->a:I
- const-string v4, ""
- iget v7, v15, LTest;->b:I
- const/4 v8, 0x0
- invoke-static {v5, v6, v4, v7, v8}, LTest;->a(LTest;Ljava/lang/String;Ljava/lang/String;II)I
- move-result v4
- iput v4, v15, LTest;->b:I
- const-string v4, ""
- iget v7, v15, LTest;->c:I
- const/4 v8, 0x0
- invoke-static {v5, v6, v4, v7, v8}, LTest;->a(LTest;Ljava/lang/String;Ljava/lang/String;II)I
- move-result v4
- iput v4, v15, LTest;->c:I
- const-string v4, ""
- iget v7, v15, LTest;->d:I
- const/4 v8, 0x0
- invoke-static {v5, v6, v4, v7, v8}, LTest;->a(LTest;Ljava/lang/String;Ljava/lang/String;II)I
- move-result v4
- iput v4, v15, LTest;->d:I
- const-string v4, ""
- iget v7, v15, LTest;->f:I
- const/4 v8, 0x0
- invoke-static {v5, v6, v4, v7, v8}, LTest;->a(LTest;Ljava/lang/String;Ljava/lang/String;II)I
- move-result v4
- iput v4, v15, LTest;->f:I
- const-string v4, ""
- iget v7, v15, LTest;->g:I
- const/4 v8, 0x0
- invoke-static {v5, v6, v4, v7, v8}, LTest;->a(LTest;Ljava/lang/String;Ljava/lang/String;II)I
- move-result v4
- iput v4, v15, LTest;->g:I
- move-wide/from16 v0, v16
- iput-wide v0, v15, LTest;->l:J
- :cond_212
- if-eqz p5, :cond_9c5
- if-ne v13, v14, :cond_9c5
- const/4 v4, 0x1
- :goto_217
- new-instance v5, LTest;
- invoke-direct {v5, v13, v12, v14, v4}, LTest;-><init>(LTest;LTest;LTest;Z)V
- return-object v5
- :cond_21d
- invoke-virtual {v12}, LTest;->a()Z
- move-result v4
- if-eqz v4, :cond_57c
- iget-object v8, v12, LTest;->a:LTest;
- iget-wide v4, v8, LTest;->b:J
- const-wide/16 v6, 0x1
- add-long/2addr v4, v6
- iput-wide v4, v8, LTest;->b:J
- if-eqz v10, :cond_578
- iget v4, v10, LTest;->k:I
- const/4 v5, 0x3
- if-ne v4, v5, :cond_29b
- const/4 v4, 0x1
- :goto_234
- if-eqz v4, :cond_578
- iget-object v9, v8, LTest;->a:LTest;
- invoke-static {v10}, LTest;->a(LTest;)J
- move-result-wide v16
- const-wide/16 v4, 0x0
- cmp-long v4, v16, v4
- if-gez v4, :cond_2ca
- const/4 v4, 0x0
- :cond_243
- :goto_243
- if-nez v4, :cond_543
- iget-object v4, v8, LTest;->a:LTest;
- iget-object v4, v4, LTest;->a:LTest;
- iget v5, v4, LTest;->d:I
- add-int/lit8 v5, v5, 0x1
- iput v5, v4, LTest;->d:I
- iget-object v4, v8, LTest;->a:LTest;
- iget-object v5, v4, LTest;->a:LTest;
- iget-boolean v4, v5, LTest;->b:Z
- if-nez v4, :cond_53c
- iget-object v4, v5, LTest;->a:LTest;
- iget-object v4, v4, LTest;->a:LTest;
- iget-object v4, v4, LTest;->f:Ljava/lang/String;
- if-eqz v4, :cond_539
- const/4 v4, 0x1
- :goto_260
- if-eqz v4, :cond_53c
- iget-object v4, v5, LTest;->a:LTest;
- invoke-virtual {v4}, LTest;->b()J
- move-result-wide v6
- iget-wide v8, v5, LTest;->c:J
- sub-long/2addr v6, v8
- iget v4, v5, LTest;->j:I
- int-to-long v4, v4
- cmp-long v4, v6, v4
- if-lez v4, :cond_53c
- const/4 v4, 0x1
- :goto_273
- if-eqz v4, :cond_53f
- new-instance v4, LTest;
- const/4 v5, 0x0
- const/4 v6, 0x0
- sget-object v7, LTest;->P:LTest;
- const-wide/16 v8, 0x0
- const/4 v11, 0x0
- invoke-direct/range {v4 .. v11}, LTest;-><init>(ILTest;LTest;JLTest;Ljava/util/Map;)V
- move-object v6, v4
- :goto_282
- if-eqz v6, :cond_57c
- iget-object v4, v6, LTest;->a:LTest;
- sget-object v5, LTest;->P:LTest;
- if-ne v4, v5, :cond_57c
- new-instance v4, LTest;
- iget v5, v6, LTest;->a:I
- iget-object v6, v6, LTest;->a:LTest;
- sget-object v7, LTest;->P:LTest;
- iget-wide v8, v10, LTest;->i:J
- const/4 v11, 0x0
- invoke-direct/range {v4 .. v11}, LTest;-><init>(ILTest;LTest;JLTest;Ljava/util/Map;)V
- move-object v14, v4
- goto/16 :goto_2c
- :cond_29b
- const/4 v5, 0x4
- if-ne v4, v5, :cond_2c7
- sget-object v4, LTest;->P:LTest;
- invoke-virtual {v4}, LTest;->b()Ljava/lang/Object;
- move-result-object v4
- check-cast v4, Ljava/lang/Integer;
- invoke-virtual {v4}, Ljava/lang/Integer;->intValue()I
- move-result v4
- and-int/lit8 v4, v4, 0x1
- if-nez v4, :cond_2c4
- sget-object v4, LTest;->P:LTest;
- invoke-virtual {v4}, LTest;->a()Ljava/lang/Object;
- move-result-object v4
- check-cast v4, Ljava/lang/Long;
- invoke-virtual {v4}, Ljava/lang/Long;->intValue()I
- move-result v4
- and-int/lit8 v4, v4, 0x1
- if-nez v4, :cond_2c1
- const/4 v4, 0x1
- goto/16 :goto_234
- :cond_2c1
- const/4 v4, 0x0
- goto/16 :goto_234
- :cond_2c4
- const/4 v4, 0x1
- goto/16 :goto_234
- :cond_2c7
- const/4 v4, 0x0
- goto/16 :goto_234
- :cond_2ca
- iget-object v11, v9, LTest;->a:LTest;
- iget-object v4, v11, LTest;->a:LTest;
- if-eqz v4, :cond_325
- iget-wide v4, v11, LTest;->d:J
- cmp-long v4, v16, v4
- if-nez v4, :cond_325
- iget-object v4, v11, LTest;->a:LTest;
- :goto_2d8
- if-nez v4, :cond_243
- invoke-virtual {v10}, LTest;->a()Ljava/lang/String;
- move-result-object v5
- iget v6, v10, LTest;->k:I
- const/4 v7, 0x3
- if-ne v6, v7, :cond_4e1
- const-string v6, ""
- invoke-virtual {v5, v6}, Ljava/lang/String;->split(Ljava/lang/String;)[Ljava/lang/String;
- move-result-object v5
- array-length v6, v5
- const/4 v7, 0x5
- if-ne v6, v7, :cond_2f7
- const/4 v6, 0x0
- aget-object v6, v5, v6
- invoke-static {v6}, LTest;->a(Ljava/lang/String;)I
- move-result v6
- const/4 v7, 0x3
- if-eq v6, v7, :cond_489
- :cond_2f7
- const/4 v5, 0x0
- :goto_2f8
- if-eqz v5, :cond_2fe
- iget-object v6, v9, LTest;->a:LTest;
- iput-object v5, v6, LTest;->f:Ljava/lang/String;
- :cond_2fe
- iget-object v5, v9, LTest;->a:LTest;
- invoke-virtual {v5}, LTest;->b()J
- move-result-wide v6
- iget-wide v0, v9, LTest;->g:J
- move-wide/from16 v16, v0
- sub-long v16, v6, v16
- iget-wide v0, v9, LTest;->e:J
- move-wide/from16 v18, v0
- cmp-long v5, v16, v18
- if-lez v5, :cond_243
- iget-wide v0, v9, LTest;->f:J
- move-wide/from16 v16, v0
- sub-long v16, v6, v16
- iget-object v5, v9, LTest;->a:LTest;
- iget-object v5, v5, LTest;->a:LTest;
- move-wide/from16 v0, v16
- invoke-virtual {v5, v0, v1}, LTest;->a(J)V
- iput-wide v6, v9, LTest;->g:J
- goto/16 :goto_243
- :cond_325
- iget-object v4, v11, LTest;->a:LTest;
- const/4 v5, 0x1
- move-wide/from16 v0, v16
- invoke-virtual {v4, v0, v1, v5}, LTest;->a(JZ)[B
- move-result-object v5
- if-nez v5, :cond_332
- const/4 v4, 0x0
- goto :goto_2d8
- :cond_332
- iget-object v0, v11, LTest;->a:LTest;
- move-object/from16 v18, v0
- new-instance v4, LTest;
- sget-object v6, LTest;->P:LTest;
- invoke-direct {v4, v6}, LTest;-><init>(LTest;)V
- array-length v6, v5
- const/4 v7, 0x6
- if-ge v6, v7, :cond_346
- const/4 v4, 0x0
- :cond_342
- :goto_342
- if-nez v4, :cond_481
- const/4 v4, 0x0
- goto :goto_2d8
- :cond_346
- const/4 v6, 0x0
- invoke-static {v5, v6}, LTest;->b([BI)I
- move-result v19
- const/4 v6, 0x3
- move-object/from16 v0, v18
- move/from16 v1, v19
- invoke-virtual {v0, v1, v5, v6}, LTest;->a(I[BI)[D
- move-result-object v6
- if-eqz v6, :cond_35d
- array-length v7, v6
- const/16 v20, 0x3
- move/from16 v0, v20
- if-eq v7, v0, :cond_35f
- :cond_35d
- const/4 v4, 0x0
- goto :goto_342
- :cond_35f
- const/4 v7, 0x2
- const/16 v20, 0x0
- aget-wide v20, v6, v20
- const-wide v22, 0x416312d000000000L # 1.0E7
- mul-double v20, v20, v22
- move-wide/from16 v0, v20
- double-to-int v0, v0
- move/from16 v20, v0
- move/from16 v0, v20
- int-to-long v0, v0
- move-wide/from16 v20, v0
- move-wide/from16 v0, v20
- invoke-virtual {v4, v7, v0, v1}, LTest;->b(IJ)LTest;
- const/4 v7, 0x3
- const/16 v20, 0x1
- aget-wide v20, v6, v20
- const-wide v22, 0x416312d000000000L # 1.0E7
- mul-double v20, v20, v22
- move-wide/from16 v0, v20
- double-to-int v0, v0
- move/from16 v20, v0
- move/from16 v0, v20
- int-to-long v0, v0
- move-wide/from16 v20, v0
- move-wide/from16 v0, v20
- invoke-virtual {v4, v7, v0, v1}, LTest;->b(IJ)LTest;
- const/4 v7, 0x4
- const/16 v20, 0x2
- aget-wide v20, v6, v20
- move-wide/from16 v0, v20
- double-to-float v6, v0
- invoke-virtual {v4, v7, v6}, LTest;->b(IF)LTest;
- array-length v6, v5
- const/4 v7, 0x6
- if-eq v6, v7, :cond_47e
- array-length v6, v5
- add-int/lit8 v6, v6, -0x6
- new-array v0, v6, [B
- move-object/from16 v20, v0
- const/4 v7, 0x6
- const/16 v21, 0x0
- move-object/from16 v0, v20
- move/from16 v1, v21
- invoke-static {v5, v7, v0, v1, v6}, Ljava/lang/System;->arraycopy(Ljava/lang/Object;ILjava/lang/Object;II)V
- new-instance v21, LTest;
- move-object/from16 v0, v21
- move-object/from16 v1, v20
- invoke-direct {v0, v1}, LTest;-><init>([B)V
- const/4 v5, 0x0
- move-object/from16 v0, v21
- iput v5, v0, LTest;->a:I
- :goto_3c3
- move-object/from16 v0, v21
- iget v5, v0, LTest;->a:I
- move-object/from16 v0, v21
- iget-object v6, v0, LTest;->b:[B
- array-length v6, v6
- add-int/lit8 v6, v6, -0x1
- if-ge v5, v6, :cond_47e
- move-object/from16 v0, v21
- iget v6, v0, LTest;->a:I
- invoke-virtual/range {v21 .. v21}, LTest;->a()I
- move-result v5
- move-object/from16 v0, v20
- array-length v7, v0
- add-int/2addr v5, v6
- if-ge v7, v5, :cond_3e7
- const/4 v5, 0x0
- :goto_3df
- if-nez v5, :cond_46b
- const/4 v5, 0x0
- :goto_3e2
- if-nez v5, :cond_342
- const/4 v4, 0x0
- goto/16 :goto_342
- :cond_3e7
- new-instance v5, LTest;
- sget-object v7, LTest;->P:LTest;
- invoke-direct {v5, v7}, LTest;-><init>(LTest;)V
- move-object/from16 v0, v20
- invoke-static {v0, v6}, LTest;->a([BI)I
- move-result v22
- add-int/lit8 v6, v6, 0x1
- aget-byte v23, v20, v6
- add-int/lit8 v7, v6, 0x1
- const/4 v6, 0x0
- :goto_3fb
- move/from16 v0, v22
- if-ge v6, v0, :cond_41a
- move-object/from16 v0, v20
- move/from16 v1, v23
- invoke-static {v0, v7, v1, v6}, LTest;->a([BIBI)I
- move-result v24
- const/16 v25, 0x2
- move/from16 v0, v24
- int-to-long v0, v0
- move-wide/from16 v26, v0
- move/from16 v0, v25
- move-wide/from16 v1, v26
- invoke-virtual {v5, v0, v1, v2}, LTest;->a(IJ)V
- add-int/lit8 v7, v7, 0x1
- add-int/lit8 v6, v6, 0x1
- goto :goto_3fb
- :cond_41a
- move-object/from16 v0, v18
- move/from16 v1, v19
- move-object/from16 v2, v20
- invoke-virtual {v0, v1, v2, v7}, LTest;->a(I[BI)[D
- move-result-object v6
- if-nez v6, :cond_428
- const/4 v5, 0x0
- goto :goto_3df
- :cond_428
- const/4 v7, 0x3
- const/16 v22, 0x0
- aget-wide v22, v6, v22
- const-wide v24, 0x416312d000000000L # 1.0E7
- mul-double v22, v22, v24
- move-wide/from16 v0, v22
- double-to-int v0, v0
- move/from16 v22, v0
- move/from16 v0, v22
- int-to-long v0, v0
- move-wide/from16 v22, v0
- move-wide/from16 v0, v22
- invoke-virtual {v5, v7, v0, v1}, LTest;->a(IJ)V
- const/4 v7, 0x4
- const/16 v22, 0x1
- aget-wide v22, v6, v22
- const-wide v24, 0x416312d000000000L # 1.0E7
- mul-double v22, v22, v24
- move-wide/from16 v0, v22
- double-to-int v0, v0
- move/from16 v22, v0
- move/from16 v0, v22
- int-to-long v0, v0
- move-wide/from16 v22, v0
- move-wide/from16 v0, v22
- invoke-virtual {v5, v7, v0, v1}, LTest;->a(IJ)V
- const/4 v7, 0x5
- const/16 v22, 0x2
- aget-wide v22, v6, v22
- move-wide/from16 v0, v22
- double-to-float v6, v0
- invoke-virtual {v5, v7, v6}, LTest;->a(IF)V
- goto/16 :goto_3df
- :cond_46b
- const/4 v6, 0x5
- invoke-virtual {v4, v6, v5}, LTest;->a(ILjava/lang/Object;)V
- move-object/from16 v0, v21
- iget v5, v0, LTest;->a:I
- invoke-virtual/range {v21 .. v21}, LTest;->a()I
- move-result v6
- add-int/2addr v5, v6
- move-object/from16 v0, v21
- iput v5, v0, LTest;->a:I
- goto/16 :goto_3c3
- :cond_47e
- const/4 v5, 0x1
- goto/16 :goto_3e2
- :cond_481
- iput-object v4, v11, LTest;->a:LTest;
- move-wide/from16 v0, v16
- iput-wide v0, v11, LTest;->d:J
- goto/16 :goto_2d8
- :cond_489
- new-instance v6, Ljava/lang/StringBuilder;
- invoke-direct {v6}, Ljava/lang/StringBuilder;-><init>()V
- const/4 v7, 0x0
- aget-object v7, v5, v7
- invoke-virtual {v6, v7}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
- move-result-object v6
- const-string v7, ""
- invoke-virtual {v6, v7}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
- move-result-object v6
- const/4 v7, 0x1
- aget-object v7, v5, v7
- invoke-virtual {v6, v7}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
- move-result-object v6
- const-string v7, ""
- invoke-virtual {v6, v7}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
- move-result-object v6
- const/4 v7, 0x2
- aget-object v7, v5, v7
- invoke-virtual {v6, v7}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
- move-result-object v6
- const-string v7, ""
- invoke-virtual {v6, v7}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
- move-result-object v6
- const/4 v7, 0x4
- aget-object v7, v5, v7
- invoke-static {v7}, Ljava/lang/Integer;->parseInt(Ljava/lang/String;)I
- move-result v7
- shr-int/lit8 v7, v7, 0x10
- const v11, 0xffff
- and-int/2addr v7, v11
- invoke-virtual {v6, v7}, Ljava/lang/StringBuilder;->append(I)Ljava/lang/StringBuilder;
- move-result-object v6
- const-string v7, ""
- invoke-virtual {v6, v7}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
- move-result-object v6
- const/4 v7, 0x4
- aget-object v5, v5, v7
- invoke-static {v5}, Ljava/lang/Integer;->parseInt(Ljava/lang/String;)I
- move-result v5
- const v7, 0xffff
- and-int/2addr v5, v7
- invoke-virtual {v6, v5}, Ljava/lang/StringBuilder;->append(I)Ljava/lang/StringBuilder;
- move-result-object v5
- invoke-virtual {v5}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
- move-result-object v5
- goto/16 :goto_2f8
- :cond_4e1
- iget v6, v10, LTest;->k:I
- const/4 v7, 0x4
- if-ne v6, v7, :cond_536
- const-string v6, ""
- invoke-virtual {v5, v6}, Ljava/lang/String;->split(Ljava/lang/String;)[Ljava/lang/String;
- move-result-object v5
- array-length v6, v5
- const/4 v7, 0x4
- if-ne v6, v7, :cond_4fa
- const/4 v6, 0x0
- aget-object v6, v5, v6
- invoke-static {v6}, LTest;->a(Ljava/lang/String;)I
- move-result v6
- const/4 v7, 0x4
- if-eq v6, v7, :cond_4fd
- :cond_4fa
- const/4 v5, 0x0
- goto/16 :goto_2f8
- :cond_4fd
- new-instance v6, Ljava/lang/StringBuilder;
- invoke-direct {v6}, Ljava/lang/StringBuilder;-><init>()V
- const/4 v7, 0x0
- aget-object v7, v5, v7
- invoke-virtual {v6, v7}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
- move-result-object v6
- const-string v7, ""
- invoke-virtual {v6, v7}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
- move-result-object v6
- const/4 v7, 0x1
- aget-object v7, v5, v7
- invoke-virtual {v6, v7}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
- move-result-object v6
- const-string v7, ""
- invoke-virtual {v6, v7}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
- move-result-object v6
- const/4 v7, 0x2
- aget-object v7, v5, v7
- invoke-virtual {v6, v7}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
- move-result-object v6
- const-string v7, ""
- invoke-virtual {v6, v7}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
- move-result-object v6
- const/4 v7, 0x3
- aget-object v5, v5, v7
- invoke-virtual {v6, v5}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
- move-result-object v5
- invoke-virtual {v5}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
- move-result-object v5
- goto/16 :goto_2f8
- :cond_536
- const/4 v5, 0x0
- goto/16 :goto_2f8
- :cond_539
- const/4 v4, 0x0
- goto/16 :goto_260
- :cond_53c
- const/4 v4, 0x0
- goto/16 :goto_273
- :cond_53f
- const/4 v4, 0x0
- move-object v6, v4
- goto/16 :goto_282
- :cond_543
- iget-object v5, v8, LTest;->a:LTest;
- iget-object v5, v5, LTest;->a:LTest;
- iget-object v6, v10, LTest;->j:Ljava/util/Collection;
- invoke-interface {v6}, Ljava/util/Collection;->size()I
- move-result v6
- iget v7, v5, LTest;->e:I
- add-int/2addr v6, v7
- iput v6, v5, LTest;->e:I
- invoke-virtual {v8, v10, v4}, LTest;->a(LTest;LTest;)LTest;
- move-result-object v6
- if-eqz v6, :cond_578
- iget-object v4, v8, LTest;->a:LTest;
- iget-object v4, v4, LTest;->a:LTest;
- iget v5, v4, LTest;->c:I
- add-int/lit8 v5, v5, 0x1
- iput v5, v4, LTest;->c:I
- iget-wide v4, v8, LTest;->c:J
- const-wide/16 v16, 0x1
- add-long v4, v4, v16
- iput-wide v4, v8, LTest;->c:J
- new-instance v4, LTest;
- const/4 v5, 0x2
- sget-object v7, LTest;->P:LTest;
- iget-wide v8, v10, LTest;->i:J
- const/4 v11, 0x0
- invoke-direct/range {v4 .. v11}, LTest;-><init>(ILTest;LTest;JLTest;Ljava/util/Map;)V
- move-object v6, v4
- goto/16 :goto_282
- :cond_578
- const/4 v4, 0x0
- move-object v6, v4
- goto/16 :goto_282
- :cond_57c
- const/4 v4, 0x0
- invoke-virtual {v12, v10, v4, v14, v15}, LTest;->a(LTest;Ljava/util/Map;J)LTest;
- move-result-object v4
- if-nez v4, :cond_5a1
- iget-object v4, v12, LTest;->a:LTest;
- invoke-interface {v4}, LTest;->c()J
- move-result-wide v4
- invoke-virtual {v10, v4, v5}, LTest;->a(J)LTest;
- move-result-object v4
- move-object/from16 v0, p3
- invoke-virtual {v0, v4}, LTest;->a(LTest;)V
- new-instance v4, LTest;
- const/4 v5, 0x1
- const/4 v6, 0x0
- sget-object v7, LTest;->P:LTest;
- const-wide/16 v8, 0x0
- const/4 v11, 0x0
- invoke-direct/range {v4 .. v11}, LTest;-><init>(ILTest;LTest;JLTest;Ljava/util/Map;)V
- move-object v14, v4
- goto/16 :goto_2c
- :cond_5a1
- invoke-virtual {v4}, LTest;->b()Z
- move-result v4
- if-nez v4, :cond_5b6
- new-instance v4, LTest;
- const/4 v5, 0x0
- const/4 v6, 0x0
- sget-object v7, LTest;->P:LTest;
- const-wide/16 v8, 0x0
- const/4 v11, 0x0
- invoke-direct/range {v4 .. v11}, LTest;-><init>(ILTest;LTest;JLTest;Ljava/util/Map;)V
- move-object v14, v4
- goto/16 :goto_2c
- :cond_5b6
- if-nez v13, :cond_60a
- const/4 v4, 0x0
- :goto_5b9
- new-instance v16, LTest;
- add-int/lit8 v4, v4, 0x1
- move-object/from16 v0, v16
- invoke-direct {v0, v4}, LTest;-><init>(I)V
- new-instance v11, LTest;
- const/4 v13, 0x0
- invoke-direct/range {v11 .. v16}, LTest;-><init>(LTest;Ljava/util/Map;JLTest;)V
- iget-wide v0, v10, LTest;->i:J
- move-wide/from16 v18, v0
- const-wide/16 v20, 0x7530
- move-object/from16 v17, p2
- move-object/from16 v22, v11
- invoke-virtual/range {v17 .. v22}, LTest;->a(JJLTest;)V
- new-instance v6, LTest;
- invoke-virtual/range {v16 .. v16}, LTest;->a()D
- move-result-wide v4
- invoke-static {v4, v5}, LTest;->a(D)I
- move-result v4
- invoke-virtual/range {v16 .. v16}, LTest;->b()D
- move-result-wide v8
- invoke-static {v8, v9}, LTest;->a(D)I
- move-result v5
- invoke-virtual/range {v16 .. v16}, LTest;->c()I
- move-result v7
- invoke-static {v7}, LTest;->b(I)I
- move-result v7
- move-object/from16 v0, v16
- iget v8, v0, LTest;->d:I
- invoke-direct {v6, v4, v5, v7, v8}, LTest;-><init>(IIII)V
- invoke-static {v6}, LTest;->c(LTest;)Z
- move-result v4
- if-eqz v4, :cond_60f
- new-instance v4, LTest;
- const/4 v5, 0x1
- sget-object v7, LTest;->P:LTest;
- iget-wide v8, v10, LTest;->i:J
- const/4 v11, 0x0
- invoke-direct/range {v4 .. v11}, LTest;-><init>(ILTest;LTest;JLTest;Ljava/util/Map;)V
- move-object v14, v4
- goto/16 :goto_2c
- :cond_60a
- invoke-interface {v13}, Ljava/util/LTest;->size()I
- move-result v4
- goto :goto_5b9
- :cond_60f
- new-instance v4, LTest;
- const/4 v5, 0x0
- const/4 v6, 0x0
- sget-object v7, LTest;->P:LTest;
- const-wide/16 v8, 0x0
- const/4 v11, 0x0
- invoke-direct/range {v4 .. v11}, LTest;-><init>(ILTest;LTest;JLTest;Ljava/util/Map;)V
- move-object v14, v4
- goto/16 :goto_2c
- :cond_61e
- iget-object v4, v8, LTest;->a:LTest;
- iget-object v5, v4, LTest;->a:LTest;
- iget-object v4, v4, LTest;->a:LTest;
- iget v6, v5, LTest;->d:I
- add-int/lit8 v6, v6, 0x1
- iput v6, v5, LTest;->d:I
- invoke-virtual {v4}, LTest;->c()J
- move-result-wide v6
- iput-wide v6, v5, LTest;->f:J
- move-object/from16 v0, p1
- invoke-virtual {v8, v0}, LTest;->a(LTest;)LTest;
- move-result-object v6
- iget-object v4, v8, LTest;->a:LTest;
- invoke-virtual {v4}, LTest;->a()V
- iget-object v4, v8, LTest;->a:LTest;
- iget-object v5, v4, LTest;->a:LTest;
- invoke-virtual {v5}, LTest;->b()J
- move-result-wide v10
- iget-wide v12, v4, LTest;->m:J
- sub-long v12, v10, v12
- iget-wide v0, v4, LTest;->k:J
- move-wide/from16 v16, v0
- cmp-long v5, v12, v16
- if-lez v5, :cond_65f
- iget-wide v12, v4, LTest;->l:J
- sub-long v12, v10, v12
- iget-object v5, v4, LTest;->a:LTest;
- invoke-virtual {v5, v12, v13}, LTest;->a(J)V
- iget-object v5, v4, LTest;->a:LTest;
- invoke-virtual {v5, v12, v13}, LTest;->a(J)V
- iput-wide v10, v4, LTest;->m:J
- :cond_65f
- iget-object v5, v4, LTest;->a:LTest;
- invoke-virtual {v5}, LTest;->a()V
- iget-object v5, v4, LTest;->a:LTest;
- invoke-virtual {v5}, LTest;->a()V
- iget-object v5, v4, LTest;->a:LTest;
- invoke-virtual {v5}, LTest;->a()V
- iget-object v4, v4, LTest;->a:LTest;
- invoke-virtual {v4}, LTest;->a()V
- iget-object v4, v8, LTest;->a:LTest;
- iget-object v5, v4, LTest;->a:LTest;
- iget-object v4, v4, LTest;->a:LTest;
- iget-wide v10, v5, LTest;->f:J
- const-wide/16 v12, -0x1
- cmp-long v7, v10, v12
- if-eqz v7, :cond_698
- invoke-virtual {v4}, LTest;->c()J
- move-result-wide v10
- iget-wide v12, v5, LTest;->f:J
- sub-long/2addr v10, v12
- const-wide/16 v12, -0x1
- iput-wide v12, v5, LTest;->f:J
- const-wide/16 v12, 0x0
- cmp-long v4, v10, v12
- if-ltz v4, :cond_698
- const-wide/16 v12, 0x7530
- cmp-long v4, v10, v12
- if-lez v4, :cond_6b0
- :cond_698
- :goto_698
- const/4 v4, 0x0
- if-eqz v6, :cond_53
- new-instance v4, LTest;
- const/4 v5, 0x4
- sget-object v7, LTest;->P:LTest;
- iget-object v8, v8, LTest;->a:LTest;
- iget-object v8, v8, LTest;->a:LTest;
- invoke-virtual {v8}, LTest;->c()J
- move-result-wide v8
- const/4 v11, 0x0
- move-object/from16 v10, p1
- invoke-direct/range {v4 .. v11}, LTest;-><init>(ILTest;LTest;JLTest;Ljava/util/Map;)V
- goto/16 :goto_53
- :cond_6b0
- long-to-int v4, v10
- iput v4, v5, LTest;->a:I
- if-eqz v6, :cond_6c0
- iget v4, v5, LTest;->e:I
- add-int/lit8 v4, v4, 0x1
- iput v4, v5, LTest;->e:I
- iget v4, v5, LTest;->a:I
- iput v4, v5, LTest;->b:I
- goto :goto_698
- :cond_6c0
- iget v4, v5, LTest;->a:I
- iput v4, v5, LTest;->c:I
- goto :goto_698
- :cond_6c5
- const/4 v4, 0x0
- goto/16 :goto_53
- :cond_6c8
- move-object/from16 v0, p0
- iget-object v4, v0, LTestObject;->a:LTest;
- invoke-virtual {v4}, LTest;->b()Z
- move-result v5
- if-eqz v5, :cond_91d
- iget-object v8, v4, LTest;->a:LTest;
- iget-object v4, v8, LTest;->a:LTest;
- iget-object v5, v4, LTest;->a:LTest;
- iget-boolean v4, v5, LTest;->d:Z
- if-nez v4, :cond_716
- sget-object v4, LTest;->P:LTest;
- :goto_6de
- iput-object v4, v8, LTest;->a:LTest;
- iget-object v4, v8, LTest;->a:LTest;
- iget-object v5, v8, LTest;->a:LTest;
- iget-object v5, v5, LTest;->a:LTest;
- invoke-virtual {v5}, LTest;->b()J
- move-result-wide v6
- invoke-virtual {v4, v6, v7}, LTest;->a(J)V
- if-nez p1, :cond_721
- iget-object v4, v8, LTest;->a:LTest;
- const/4 v5, 0x3
- iget-object v6, v8, LTest;->a:LTest;
- iget-object v6, v6, LTest;->a:LTest;
- invoke-virtual {v6}, LTest;->b()J
- move-result-wide v6
- invoke-virtual {v4, v5, v6, v7}, LTest;->a(IJ)V
- const/4 v4, 0x0
- :goto_6fe
- if-eqz v4, :cond_920
- iget-object v5, v4, LTest;->a:LTest;
- sget-object v6, LTest;->P:LTest;
- if-ne v5, v6, :cond_9cc
- move-object/from16 v0, p0
- iget-object v5, v0, LTestObject;->a:LTest;
- move-object/from16 v0, p1
- move-object/from16 v1, p4
- move-object/from16 v2, p3
- invoke-virtual {v5, v0, v1, v2}, LTest;->a(LTest;LTest;LTest;)LTest;
- move-object v12, v4
- goto/16 :goto_56
- :cond_716
- new-instance v4, LTest;
- invoke-direct {v4}, LTest;-><init>()V
- iget-object v5, v5, LTest;->a:LTest;
- invoke-virtual {v5, v4}, LTest;->a(Ljava/lang/Object;)Ljava/lang/Object;
- goto :goto_6de
- :cond_721
- iget-object v4, v8, LTest;->a:LTest;
- move-object/from16 v0, p1
- invoke-virtual {v4, v0}, LTest;->a(LTest;)V
- iget-object v4, v8, LTest;->a:LTest;
- iget-object v5, v4, LTest;->a:LTest;
- iget-object v4, v4, LTest;->a:LTest;
- const-string v6, ""
- invoke-virtual {v5, v6}, LTest;->a(Ljava/lang/String;)LTest;
- move-result-object v5
- iget v6, v5, LTest;->c:I
- add-int/lit8 v6, v6, 0x1
- iput v6, v5, LTest;->c:I
- invoke-virtual {v4}, LTest;->c()J
- move-result-wide v6
- iput-wide v6, v5, LTest;->b:J
- iget-object v4, v8, LTest;->a:LTest;
- iget-object v5, v4, LTest;->a:LTest;
- iget-object v4, v4, LTest;->a:LTest;
- const-string v6, ""
- invoke-virtual {v5, v6}, LTest;->a(Ljava/lang/String;)LTest;
- move-result-object v5
- iget v6, v5, LTest;->c:I
- add-int/lit8 v6, v6, 0x1
- iput v6, v5, LTest;->c:I
- invoke-virtual {v4}, LTest;->c()J
- move-result-wide v6
- iput-wide v6, v5, LTest;->b:J
- move-object/from16 v0, p1
- invoke-virtual {v8, v0}, LTest;->a(LTest;)Z
- move-result v4
- iget-object v5, v8, LTest;->a:LTest;
- iget-object v6, v5, LTest;->a:LTest;
- iget-object v5, v5, LTest;->a:LTest;
- const-string v7, ""
- invoke-virtual {v6, v7}, LTest;->a(Ljava/lang/String;)LTest;
- move-result-object v6
- iget-wide v10, v6, LTest;->b:J
- const-wide/16 v12, -0x1
- cmp-long v7, v10, v12
- if-eqz v7, :cond_789
- invoke-virtual {v5}, LTest;->c()J
- move-result-wide v10
- iget-wide v12, v6, LTest;->b:J
- sub-long/2addr v10, v12
- const-wide/16 v12, -0x1
- iput-wide v12, v6, LTest;->b:J
- const-wide/16 v12, 0x0
- cmp-long v5, v10, v12
- if-ltz v5, :cond_789
- const-wide/16 v12, 0x7530
- cmp-long v5, v10, v12
- if-lez v5, :cond_83e
- :cond_789
- :goto_789
- if-eqz v4, :cond_793
- iget-object v4, v8, LTest;->a:LTest;
- invoke-virtual {v4}, LTest;->c()Z
- move-result v4
- if-eqz v4, :cond_843
- :cond_793
- iget-object v4, v8, LTest;->a:LTest;
- invoke-virtual {v4}, LTest;->a()V
- const/4 v6, 0x0
- :goto_799
- iget-object v4, v8, LTest;->a:LTest;
- const/4 v5, 0x0
- invoke-virtual {v4, v5}, LTest;->a(Ljava/util/LTest;)V
- iget-object v4, v8, LTest;->a:LTest;
- invoke-virtual {v4}, LTest;->a()V
- iget-object v4, v8, LTest;->a:LTest;
- iget-object v5, v4, LTest;->a:LTest;
- invoke-virtual {v5}, LTest;->b()J
- move-result-wide v10
- iget-wide v12, v4, LTest;->q:J
- sub-long v12, v10, v12
- iget-wide v0, v4, LTest;->o:J
- move-wide/from16 v16, v0
- cmp-long v5, v12, v16
- if-lez v5, :cond_7c3
- iget-wide v12, v4, LTest;->p:J
- sub-long v12, v10, v12
- iget-object v5, v4, LTest;->a:LTest;
- invoke-virtual {v5, v12, v13}, LTest;->a(J)V
- iput-wide v10, v4, LTest;->q:J
- :cond_7c3
- iget-wide v12, v4, LTest;->s:J
- sub-long v12, v10, v12
- iget-wide v0, v4, LTest;->r:J
- move-wide/from16 v16, v0
- cmp-long v5, v12, v16
- if-lez v5, :cond_7d6
- iget-object v5, v4, LTest;->a:LTest;
- invoke-virtual {v5}, LTest;->a()V
- iput-wide v10, v4, LTest;->s:J
- :cond_7d6
- iget-object v4, v4, LTest;->a:LTest;
- invoke-virtual {v4}, LTest;->a()V
- iget-object v4, v8, LTest;->a:LTest;
- iget-object v5, v4, LTest;->a:LTest;
- iget-object v4, v4, LTest;->a:LTest;
- const-string v7, ""
- invoke-virtual {v5, v7}, LTest;->a(Ljava/lang/String;)LTest;
- move-result-object v7
- iget-wide v10, v7, LTest;->b:J
- const-wide/16 v12, -0x1
- cmp-long v9, v10, v12
- if-eqz v9, :cond_806
- invoke-virtual {v4}, LTest;->c()J
- move-result-wide v10
- iget-wide v12, v7, LTest;->b:J
- sub-long/2addr v10, v12
- const-wide/16 v12, -0x1
- iput-wide v12, v7, LTest;->b:J
- const-wide/16 v12, 0x0
- cmp-long v4, v10, v12
- if-ltz v4, :cond_806
- const-wide/16 v12, 0x7530
- cmp-long v4, v10, v12
- if-lez v4, :cond_8d7
- :cond_806
- :goto_806
- if-eqz v6, :cond_8dc
- iget v4, v5, LTest;->f:I
- add-int/lit8 v4, v4, 0x1
- iput v4, v5, LTest;->f:I
- iget v4, v7, LTest;->a:I
- iput v4, v5, LTest;->g:I
- :goto_812
- iget-object v4, v8, LTest;->a:LTest;
- invoke-virtual {v4}, LTest;->c()Z
- move-result v4
- if-eqz v4, :cond_8e2
- iget-object v4, v8, LTest;->a:LTest;
- const/4 v5, 0x7
- iget-object v6, v8, LTest;->a:LTest;
- iget-object v6, v6, LTest;->a:LTest;
- invoke-virtual {v6}, LTest;->b()J
- move-result-wide v6
- invoke-virtual {v4, v5, v6, v7}, LTest;->a(IJ)V
- new-instance v4, LTest;
- const/4 v5, 0x0
- const/4 v6, 0x0
- sget-object v7, LTest;->P:LTest;
- iget-object v8, v8, LTest;->a:LTest;
- iget-object v8, v8, LTest;->a:LTest;
- invoke-virtual {v8}, LTest;->c()J
- move-result-wide v8
- const/4 v11, 0x0
- move-object/from16 v10, p1
- invoke-direct/range {v4 .. v11}, LTest;-><init>(ILTest;LTest;JLTest;Ljava/util/Map;)V
- goto/16 :goto_6fe
- :cond_83e
- long-to-int v5, v10
- iput v5, v6, LTest;->a:I
- goto/16 :goto_789
- :cond_843
- iget-object v4, v8, LTest;->a:LTest;
- iget-object v5, v4, LTest;->a:LTest;
- iget-object v4, v4, LTest;->a:LTest;
- const-string v6, ""
- invoke-virtual {v5, v6}, LTest;->a(Ljava/lang/String;)LTest;
- move-result-object v5
- iget v6, v5, LTest;->c:I
- add-int/lit8 v6, v6, 0x1
- iput v6, v5, LTest;->c:I
- invoke-virtual {v4}, LTest;->c()J
- move-result-wide v6
- iput-wide v6, v5, LTest;->b:J
- iget-object v4, v8, LTest;->a:LTest;
- invoke-virtual {v4}, LTest;->b()LTest;
- move-result-object v4
- iput-object v4, v8, LTest;->a:LTest;
- iget-object v4, v8, LTest;->a:LTest;
- iget-object v5, v4, LTest;->a:LTest;
- iget-object v4, v4, LTest;->a:LTest;
- const-string v6, ""
- invoke-virtual {v5, v6}, LTest;->a(Ljava/lang/String;)LTest;
- move-result-object v5
- iget-wide v6, v5, LTest;->b:J
- const-wide/16 v10, -0x1
- cmp-long v6, v6, v10
- if-eqz v6, :cond_88e
- invoke-virtual {v4}, LTest;->c()J
- move-result-wide v6
- iget-wide v10, v5, LTest;->b:J
- sub-long/2addr v6, v10
- const-wide/16 v10, -0x1
- iput-wide v10, v5, LTest;->b:J
- const-wide/16 v10, 0x0
- cmp-long v4, v6, v10
- if-ltz v4, :cond_88e
- const-wide/16 v10, 0x7530
- cmp-long v4, v6, v10
- if-lez v4, :cond_8a7
- :cond_88e
- :goto_88e
- iget-object v4, v8, LTest;->a:LTest;
- invoke-virtual {v4}, LTest;->b()Z
- move-result v4
- if-nez v4, :cond_8ab
- iget-object v4, v8, LTest;->a:LTest;
- const/4 v5, 0x4
- iget-object v6, v8, LTest;->a:LTest;
- iget-object v6, v6, LTest;->a:LTest;
- invoke-virtual {v6}, LTest;->b()J
- move-result-wide v6
- invoke-virtual {v4, v5, v6, v7}, LTest;->a(IJ)V
- const/4 v6, 0x0
- goto/16 :goto_799
- :cond_8a7
- long-to-int v4, v6
- iput v4, v5, LTest;->a:I
- goto :goto_88e
- :cond_8ab
- iget-object v4, v8, LTest;->a:LTest;
- iget-wide v4, v4, LTest;->a:J
- const/4 v6, 0x2
- new-array v6, v6, [I
- invoke-static {v4, v5, v6}, LTest;->a(J[I)[I
- move-result-object v4
- iget-object v5, v8, LTest;->a:LTest;
- iget-object v6, v8, LTest;->a:LTest;
- iget-object v6, v6, LTest;->a:LTest;
- iget v6, v6, LTest;->b:I
- iget-object v7, v8, LTest;->a:LTest;
- iget-object v7, v7, LTest;->a:LTest;
- iget v7, v7, LTest;->b:I
- invoke-virtual {v5, v6, v7, v4}, LTest;->a(II[I)I
- move-result v5
- new-instance v6, LTest;
- const/4 v7, 0x0
- aget v7, v4, v7
- const/4 v9, 0x1
- aget v4, v4, v9
- const/16 v9, 0x6d
- invoke-direct {v6, v7, v4, v5, v9}, LTest;-><init>(IIII)V
- goto/16 :goto_799
- :cond_8d7
- long-to-int v4, v10
- iput v4, v7, LTest;->a:I
- goto/16 :goto_806
- :cond_8dc
- iget v4, v7, LTest;->a:I
- iput v4, v5, LTest;->h:I
- goto/16 :goto_812
- :cond_8e2
- if-nez v6, :cond_8f5
- iget-object v4, v8, LTest;->a:LTest;
- const/4 v5, 0x5
- iget-object v6, v8, LTest;->a:LTest;
- iget-object v6, v6, LTest;->a:LTest;
- invoke-virtual {v6}, LTest;->b()J
- move-result-wide v6
- invoke-virtual {v4, v5, v6, v7}, LTest;->a(IJ)V
- const/4 v4, 0x0
- goto/16 :goto_6fe
- :cond_8f5
- iget-object v4, v8, LTest;->a:LTest;
- invoke-virtual {v4, v6}, LTest;->a(LTest;)V
- iget-object v4, v8, LTest;->a:LTest;
- const/4 v5, 0x1
- iget-object v7, v8, LTest;->a:LTest;
- iget-object v7, v7, LTest;->a:LTest;
- invoke-virtual {v7}, LTest;->b()J
- move-result-wide v10
- invoke-virtual {v4, v5, v10, v11}, LTest;->a(IJ)V
- new-instance v4, LTest;
- const/4 v5, 0x5
- sget-object v7, LTest;->P:LTest;
- iget-object v8, v8, LTest;->a:LTest;
- iget-object v8, v8, LTest;->a:LTest;
- invoke-virtual {v8}, LTest;->c()J
- move-result-wide v8
- const/4 v11, 0x0
- move-object/from16 v10, p1
- invoke-direct/range {v4 .. v11}, LTest;-><init>(ILTest;LTest;JLTest;Ljava/util/Map;)V
- goto/16 :goto_6fe
- :cond_91d
- const/4 v4, 0x0
- goto/16 :goto_6fe
- :cond_920
- move-object/from16 v0, p0
- iget-object v4, v0, LTestObject;->a:LTest;
- move-object/from16 v0, p1
- move-object/from16 v1, p4
- move-object/from16 v2, p3
- invoke-virtual {v4, v0, v1, v2}, LTest;->a(LTest;LTest;LTest;)LTest;
- move-result-object v4
- move-object v12, v4
- goto/16 :goto_56
- :cond_931
- const/4 v4, 0x0
- goto/16 :goto_5d
- :cond_934
- const/4 v5, 0x0
- goto/16 :goto_64
- :cond_937
- if-nez v4, :cond_93c
- move-object v13, v14
- goto/16 :goto_6a
- :cond_93c
- if-eqz v5, :cond_973
- iget-object v5, v12, LTest;->a:LTest;
- iget-object v6, v14, LTest;->a:LTest;
- invoke-static {v5, v6}, LTest;->a(LTest;LTest;)I
- move-result v4
- iget v7, v5, LTest;->e:I
- iget v8, v6, LTest;->e:I
- add-int/2addr v7, v8
- const v8, 0x3567e0
- invoke-static {v7, v8}, Ljava/lang/Math;->max(II)I
- move-result v7
- div-int/lit16 v7, v7, 0x3e8
- if-gt v4, v7, :cond_965
- const/4 v4, 0x1
- :goto_957
- if-eqz v4, :cond_969
- iget v4, v5, LTest;->e:I
- iget v5, v6, LTest;->e:I
- if-le v4, v5, :cond_967
- const/4 v4, 0x1
- :goto_960
- if-eqz v4, :cond_973
- move-object v13, v14
- goto/16 :goto_6a
- :cond_965
- const/4 v4, 0x0
- goto :goto_957
- :cond_967
- const/4 v4, 0x0
- goto :goto_960
- :cond_969
- iget v4, v5, LTest;->f:I
- iget v5, v6, LTest;->f:I
- if-ge v4, v5, :cond_971
- const/4 v4, 0x1
- goto :goto_960
- :cond_971
- const/4 v4, 0x0
- goto :goto_960
- :cond_973
- move-object v13, v12
- goto/16 :goto_6a
- :cond_976
- const/4 v4, 0x1
- move v11, v4
- move v15, v5
- goto/16 :goto_7b
- :cond_97b
- const/4 v4, 0x0
- goto/16 :goto_84
- :pswitch_97e
- const-string v7, ""
- goto/16 :goto_8c
- :pswitch_982
- const-string v7, ""
- goto/16 :goto_8c
- :pswitch_986
- const-string v7, ""
- goto/16 :goto_8c
- :pswitch_98a
- const-string v7, ""
- goto/16 :goto_8c
- :cond_98e
- const/4 v4, 0x0
- goto/16 :goto_a3
- :pswitch_991
- const-string v7, ""
- goto/16 :goto_ab
- :pswitch_995
- const-string v7, ""
- goto/16 :goto_ab
- :cond_999
- if-eqz v11, :cond_9ad
- move-object/from16 v0, p0
- iget-object v4, v0, LTestObject;->a:LTest;
- const-string v5, ""
- const-string v6, ""
- const-string v7, ""
- const-wide/16 v8, 0x1
- const/4 v10, 0x1
- invoke-virtual/range {v4 .. v10}, LTest;->a(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;JZ)V
- goto/16 :goto_cd
- :cond_9ad
- move-object/from16 v0, p0
- iget-object v4, v0, LTestObject;->a:LTest;
- const-string v5, ""
- const-string v6, ""
- const-string v7, ""
- const-wide/16 v8, 0x1
- const/4 v10, 0x1
- invoke-virtual/range {v4 .. v10}, LTest;->a(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;JZ)V
- goto/16 :goto_cd
- :cond_9bf
- const-wide/16 v8, 0x0
- move-wide/from16 v16, v8
- goto/16 :goto_149
- :cond_9c5
- const/4 v4, 0x0
- goto/16 :goto_217
- :cond_9c8
- move v11, v4
- move v15, v5
- goto/16 :goto_7b
- :cond_9cc
- move-object v12, v4
- goto/16 :goto_56
- :cond_9cf
- move-object v13, v4
- goto/16 :goto_17
- :pswitch_data_9d2
- .packed-switch 0x1
- :pswitch_97e
- :pswitch_982
- :pswitch_8c
- :pswitch_986
- :pswitch_98a
- .end packed-switch
- :pswitch_data_9e0
- .packed-switch 0x1
- :pswitch_991
- :pswitch_995
- .end packed-switch
-.end method
\ No newline at end of file
diff --git a/src/test/smali/chain-of-loops/Test.java b/src/test/smali/chain-of-loops/Test.java
deleted file mode 100644
index 77d335d..0000000
--- a/src/test/smali/chain-of-loops/Test.java
+++ /dev/null
@@ -1,25 +0,0 @@
-// Copyright (c) 2016, 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.
-
-public class Test {
- public int b(int i, String s) {
- throw new RuntimeException("b(ILjava/lang/String;)");
- }
-
- public int b(Test t) {
- throw new RuntimeException("b(LTest;)");
- }
-
- public static int f(int i0, int i1) {
- throw new RuntimeException("f(II)");
- }
-
- public static void main(String[] args) {
- try {
- new TestObject().method();
- } catch (Exception e) {
- System.out.println(e);
- }
- }
-}
diff --git a/src/test/smali/chain-of-loops/TestObject.java b/src/test/smali/chain-of-loops/TestObject.java
deleted file mode 100644
index 85cb78a..0000000
--- a/src/test/smali/chain-of-loops/TestObject.java
+++ /dev/null
@@ -1,9 +0,0 @@
-// Copyright (c) 2016, 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.
-
-public class TestObject {
- public final int method() {
- return 0;
- }
-}
diff --git a/src/test/smali/chain-of-loops/TestObject.smali b/src/test/smali/chain-of-loops/TestObject.smali
deleted file mode 100644
index ff971cb..0000000
--- a/src/test/smali/chain-of-loops/TestObject.smali
+++ /dev/null
@@ -1,1034 +0,0 @@
-# Copyright (c) 2016, 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.
-
-.class public final LTestObject;
-.super Ljava/lang/Object;
-
-.field public i:I
-.field public e:Ljava/lang/String;
-.field public z:Ljava/lang/String;
-.field public f:LTest;
-.field public a:[LTest;
-
-.method public constructor <init>()V
- .registers 1
- invoke-direct {p0}, Ljava/lang/Object;-><init>()V
- return-void
-.end method
-
-.method public final method()I
- .registers 7
- .prologue
- const/4 v5, 0x1
- const/4 v1, 0x0
- invoke-virtual {p0}, LTestObject;->method2()I
- move-result v0
- iget-object v2, p0, LTestObject;->e:Ljava/lang/String;
- if-eqz v2, :cond_1b
- iget-object v2, p0, LTestObject;->e:Ljava/lang/String;
- const-string v3, ""
- invoke-virtual {v2, v3}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
- move-result v2
- if-nez v2, :cond_1b
- iget-object v2, p0, LTestObject;->e:Ljava/lang/String;
- invoke-static {v5, v2}, LTest;->b(ILjava/lang/String;)I
- move-result v2
- add-int/2addr v0, v2
- :cond_1b
- iget-object v2, p0, LTestObject;->f:LTest;
- if-eqz v2, :cond_27
- const/4 v2, 0x2
- iget-object v3, p0, LTestObject;->f:LTest;
- invoke-static {v2, v3}, LTest;->d(ILTest;)I
- move-result v2
- add-int/2addr v0, v2
- :cond_27
- iget-object v2, p0, LTestObject;->a:[LTest;
- if-eqz v2, :cond_47
- iget-object v2, p0, LTestObject;->a:[LTest;
- array-length v2, v2
- if-lez v2, :cond_47
- move v2, v0
- move v0, v1
- :goto_32
- iget-object v3, p0, LTestObject;->a:[LTest;
- array-length v3, v3
- if-ge v0, v3, :cond_46
- iget-object v3, p0, LTestObject;->a:[LTest;
- aget-object v3, v3, v0
- if-eqz v3, :cond_43
- const/4 v4, 0x3
- invoke-static {v4, v3}, LTest;->d(ILTest;)I
- move-result v3
- add-int/2addr v2, v3
- :cond_43
- add-int/lit8 v0, v0, 0x1
- goto :goto_32
- :cond_46
- move v0, v2
- :cond_47
- iget-object v2, p0, LTestObject;->a:[LTest;
- if-eqz v2, :cond_67
- iget-object v2, p0, LTestObject;->a:[LTest;
- array-length v2, v2
- if-lez v2, :cond_67
- move v2, v0
- move v0, v1
- :goto_52
- iget-object v3, p0, LTestObject;->a:[LTest;
- array-length v3, v3
- if-ge v0, v3, :cond_66
- iget-object v3, p0, LTestObject;->a:[LTest;
- aget-object v3, v3, v0
- if-eqz v3, :cond_63
- const/4 v4, 0x4
- invoke-static {v4, v3}, LTest;->d(ILTest;)I
- move-result v3
- add-int/2addr v2, v3
- :cond_63
- add-int/lit8 v0, v0, 0x1
- goto :goto_52
- :cond_66
- move v0, v2
- :cond_67
- iget-object v2, p0, LTestObject;->a:[LTest;
- if-eqz v2, :cond_87
- iget-object v2, p0, LTestObject;->a:[LTest;
- array-length v2, v2
- if-lez v2, :cond_87
- move v2, v0
- move v0, v1
- :goto_72
- iget-object v3, p0, LTestObject;->a:[LTest;
- array-length v3, v3
- if-ge v0, v3, :cond_86
- iget-object v3, p0, LTestObject;->a:[LTest;
- aget-object v3, v3, v0
- if-eqz v3, :cond_83
- const/4 v4, 0x5
- invoke-static {v4, v3}, LTest;->d(ILTest;)I
- move-result v3
- add-int/2addr v2, v3
- :cond_83
- add-int/lit8 v0, v0, 0x1
- goto :goto_72
- :cond_86
- move v0, v2
- :cond_87
- iget-object v2, p0, LTestObject;->a:[LTest;
- if-eqz v2, :cond_a7
- iget-object v2, p0, LTestObject;->a:[LTest;
- array-length v2, v2
- if-lez v2, :cond_a7
- move v2, v0
- move v0, v1
- :goto_92
- iget-object v3, p0, LTestObject;->a:[LTest;
- array-length v3, v3
- if-ge v0, v3, :cond_a6
- iget-object v3, p0, LTestObject;->a:[LTest;
- aget-object v3, v3, v0
- if-eqz v3, :cond_a3
- const/4 v4, 0x6
- invoke-static {v4, v3}, LTest;->d(ILTest;)I
- move-result v3
- add-int/2addr v2, v3
- :cond_a3
- add-int/lit8 v0, v0, 0x1
- goto :goto_92
- :cond_a6
- move v0, v2
- :cond_a7
- iget-object v2, p0, LTestObject;->a:[LTest;
- if-eqz v2, :cond_c7
- iget-object v2, p0, LTestObject;->a:[LTest;
- array-length v2, v2
- if-lez v2, :cond_c7
- move v2, v0
- move v0, v1
- :goto_b2
- iget-object v3, p0, LTestObject;->a:[LTest;
- array-length v3, v3
- if-ge v0, v3, :cond_c6
- iget-object v3, p0, LTestObject;->a:[LTest;
- aget-object v3, v3, v0
- if-eqz v3, :cond_c3
- const/4 v4, 0x7
- invoke-static {v4, v3}, LTest;->d(ILTest;)I
- move-result v3
- add-int/2addr v2, v3
- :cond_c3
- add-int/lit8 v0, v0, 0x1
- goto :goto_b2
- :cond_c6
- move v0, v2
- :cond_c7
- iget-object v2, p0, LTestObject;->a:[LTest;
- if-eqz v2, :cond_e8
- iget-object v2, p0, LTestObject;->a:[LTest;
- array-length v2, v2
- if-lez v2, :cond_e8
- move v2, v0
- move v0, v1
- :goto_d2
- iget-object v3, p0, LTestObject;->a:[LTest;
- array-length v3, v3
- if-ge v0, v3, :cond_e7
- iget-object v3, p0, LTestObject;->a:[LTest;
- aget-object v3, v3, v0
- if-eqz v3, :cond_e4
- const/16 v4, 0x8
- invoke-static {v4, v3}, LTest;->d(ILTest;)I
- move-result v3
- add-int/2addr v2, v3
- :cond_e4
- add-int/lit8 v0, v0, 0x1
- goto :goto_d2
- :cond_e7
- move v0, v2
- :cond_e8
- iget-object v2, p0, LTestObject;->a:[LTest;
- if-eqz v2, :cond_109
- iget-object v2, p0, LTestObject;->a:[LTest;
- array-length v2, v2
- if-lez v2, :cond_109
- move v2, v0
- move v0, v1
- :goto_f3
- iget-object v3, p0, LTestObject;->a:[LTest;
- array-length v3, v3
- if-ge v0, v3, :cond_108
- iget-object v3, p0, LTestObject;->a:[LTest;
- aget-object v3, v3, v0
- if-eqz v3, :cond_105
- const/16 v4, 0x9
- invoke-static {v4, v3}, LTest;->d(ILTest;)I
- move-result v3
- add-int/2addr v2, v3
- :cond_105
- add-int/lit8 v0, v0, 0x1
- goto :goto_f3
- :cond_108
- move v0, v2
- :cond_109
- iget-object v2, p0, LTestObject;->a:[LTest;
- if-eqz v2, :cond_12a
- iget-object v2, p0, LTestObject;->a:[LTest;
- array-length v2, v2
- if-lez v2, :cond_12a
- move v2, v0
- move v0, v1
- :goto_114
- iget-object v3, p0, LTestObject;->a:[LTest;
- array-length v3, v3
- if-ge v0, v3, :cond_129
- iget-object v3, p0, LTestObject;->a:[LTest;
- aget-object v3, v3, v0
- if-eqz v3, :cond_126
- const/16 v4, 0xa
- invoke-static {v4, v3}, LTest;->d(ILTest;)I
- move-result v3
- add-int/2addr v2, v3
- :cond_126
- add-int/lit8 v0, v0, 0x1
- goto :goto_114
- :cond_129
- move v0, v2
- :cond_12a
- iget-object v2, p0, LTestObject;->a:[LTest;
- if-eqz v2, :cond_14b
- iget-object v2, p0, LTestObject;->a:[LTest;
- array-length v2, v2
- if-lez v2, :cond_14b
- move v2, v0
- move v0, v1
- :goto_135
- iget-object v3, p0, LTestObject;->a:[LTest;
- array-length v3, v3
- if-ge v0, v3, :cond_14a
- iget-object v3, p0, LTestObject;->a:[LTest;
- aget-object v3, v3, v0
- if-eqz v3, :cond_147
- const/16 v4, 0xb
- invoke-static {v4, v3}, LTest;->d(ILTest;)I
- move-result v3
- add-int/2addr v2, v3
- :cond_147
- add-int/lit8 v0, v0, 0x1
- goto :goto_135
- :cond_14a
- move v0, v2
- :cond_14b
- iget-object v2, p0, LTestObject;->a:[LTest;
- if-eqz v2, :cond_16c
- iget-object v2, p0, LTestObject;->a:[LTest;
- array-length v2, v2
- if-lez v2, :cond_16c
- move v2, v0
- move v0, v1
- :goto_156
- iget-object v3, p0, LTestObject;->a:[LTest;
- array-length v3, v3
- if-ge v0, v3, :cond_16b
- iget-object v3, p0, LTestObject;->a:[LTest;
- aget-object v3, v3, v0
- if-eqz v3, :cond_168
- const/16 v4, 0xc
- invoke-static {v4, v3}, LTest;->d(ILTest;)I
- move-result v3
- add-int/2addr v2, v3
- :cond_168
- add-int/lit8 v0, v0, 0x1
- goto :goto_156
- :cond_16b
- move v0, v2
- :cond_16c
- iget-object v2, p0, LTestObject;->a:[LTest;
- if-eqz v2, :cond_18d
- iget-object v2, p0, LTestObject;->a:[LTest;
- array-length v2, v2
- if-lez v2, :cond_18d
- move v2, v0
- move v0, v1
- :goto_177
- iget-object v3, p0, LTestObject;->a:[LTest;
- array-length v3, v3
- if-ge v0, v3, :cond_18c
- iget-object v3, p0, LTestObject;->a:[LTest;
- aget-object v3, v3, v0
- if-eqz v3, :cond_189
- const/16 v4, 0xd
- invoke-static {v4, v3}, LTest;->d(ILTest;)I
- move-result v3
- add-int/2addr v2, v3
- :cond_189
- add-int/lit8 v0, v0, 0x1
- goto :goto_177
- :cond_18c
- move v0, v2
- :cond_18d
- iget-object v2, p0, LTestObject;->a:[LTest;
- if-eqz v2, :cond_1ae
- iget-object v2, p0, LTestObject;->a:[LTest;
- array-length v2, v2
- if-lez v2, :cond_1ae
- move v2, v0
- move v0, v1
- :goto_198
- iget-object v3, p0, LTestObject;->a:[LTest;
- array-length v3, v3
- if-ge v0, v3, :cond_1ad
- iget-object v3, p0, LTestObject;->a:[LTest;
- aget-object v3, v3, v0
- if-eqz v3, :cond_1aa
- const/16 v4, 0xe
- invoke-static {v4, v3}, LTest;->d(ILTest;)I
- move-result v3
- add-int/2addr v2, v3
- :cond_1aa
- add-int/lit8 v0, v0, 0x1
- goto :goto_198
- :cond_1ad
- move v0, v2
- :cond_1ae
- iget-object v2, p0, LTestObject;->a:[LTest;
- if-eqz v2, :cond_1cf
- iget-object v2, p0, LTestObject;->a:[LTest;
- array-length v2, v2
- if-lez v2, :cond_1cf
- move v2, v0
- move v0, v1
- :goto_1b9
- iget-object v3, p0, LTestObject;->a:[LTest;
- array-length v3, v3
- if-ge v0, v3, :cond_1ce
- iget-object v3, p0, LTestObject;->a:[LTest;
- aget-object v3, v3, v0
- if-eqz v3, :cond_1cb
- const/16 v4, 0xf
- invoke-static {v4, v3}, LTest;->d(ILTest;)I
- move-result v3
- add-int/2addr v2, v3
- :cond_1cb
- add-int/lit8 v0, v0, 0x1
- goto :goto_1b9
- :cond_1ce
- move v0, v2
- :cond_1cf
- iget-object v2, p0, LTestObject;->a:[LTest;
- if-eqz v2, :cond_1f0
- iget-object v2, p0, LTestObject;->a:[LTest;
- array-length v2, v2
- if-lez v2, :cond_1f0
- move v2, v0
- move v0, v1
- :goto_1da
- iget-object v3, p0, LTestObject;->a:[LTest;
- array-length v3, v3
- if-ge v0, v3, :cond_1ef
- iget-object v3, p0, LTestObject;->a:[LTest;
- aget-object v3, v3, v0
- if-eqz v3, :cond_1ec
- const/16 v4, 0x10
- invoke-static {v4, v3}, LTest;->d(ILTest;)I
- move-result v3
- add-int/2addr v2, v3
- :cond_1ec
- add-int/lit8 v0, v0, 0x1
- goto :goto_1da
- :cond_1ef
- move v0, v2
- :cond_1f0
- iget-object v2, p0, LTestObject;->a:[LTest;
- if-eqz v2, :cond_211
- iget-object v2, p0, LTestObject;->a:[LTest;
- array-length v2, v2
- if-lez v2, :cond_211
- move v2, v0
- move v0, v1
- :goto_1fb
- iget-object v3, p0, LTestObject;->a:[LTest;
- array-length v3, v3
- if-ge v0, v3, :cond_210
- iget-object v3, p0, LTestObject;->a:[LTest;
- aget-object v3, v3, v0
- if-eqz v3, :cond_20d
- const/16 v4, 0x11
- invoke-static {v4, v3}, LTest;->d(ILTest;)I
- move-result v3
- add-int/2addr v2, v3
- :cond_20d
- add-int/lit8 v0, v0, 0x1
- goto :goto_1fb
- :cond_210
- move v0, v2
- :cond_211
- iget-object v2, p0, LTestObject;->a:[LTest;
- if-eqz v2, :cond_232
- iget-object v2, p0, LTestObject;->a:[LTest;
- array-length v2, v2
- if-lez v2, :cond_232
- move v2, v0
- move v0, v1
- :goto_21c
- iget-object v3, p0, LTestObject;->a:[LTest;
- array-length v3, v3
- if-ge v0, v3, :cond_231
- iget-object v3, p0, LTestObject;->a:[LTest;
- aget-object v3, v3, v0
- if-eqz v3, :cond_22e
- const/16 v4, 0x12
- invoke-static {v4, v3}, LTest;->d(ILTest;)I
- move-result v3
- add-int/2addr v2, v3
- :cond_22e
- add-int/lit8 v0, v0, 0x1
- goto :goto_21c
- :cond_231
- move v0, v2
- :cond_232
- iget-object v2, p0, LTestObject;->a:[LTest;
- if-eqz v2, :cond_253
- iget-object v2, p0, LTestObject;->a:[LTest;
- array-length v2, v2
- if-lez v2, :cond_253
- move v2, v0
- move v0, v1
- :goto_23d
- iget-object v3, p0, LTestObject;->a:[LTest;
- array-length v3, v3
- if-ge v0, v3, :cond_252
- iget-object v3, p0, LTestObject;->a:[LTest;
- aget-object v3, v3, v0
- if-eqz v3, :cond_24f
- const/16 v4, 0x13
- invoke-static {v4, v3}, LTest;->d(ILTest;)I
- move-result v3
- add-int/2addr v2, v3
- :cond_24f
- add-int/lit8 v0, v0, 0x1
- goto :goto_23d
- :cond_252
- move v0, v2
- :cond_253
- iget-object v2, p0, LTestObject;->a:[LTest;
- if-eqz v2, :cond_274
- iget-object v2, p0, LTestObject;->a:[LTest;
- array-length v2, v2
- if-lez v2, :cond_274
- move v2, v0
- move v0, v1
- :goto_25e
- iget-object v3, p0, LTestObject;->a:[LTest;
- array-length v3, v3
- if-ge v0, v3, :cond_273
- iget-object v3, p0, LTestObject;->a:[LTest;
- aget-object v3, v3, v0
- if-eqz v3, :cond_270
- const/16 v4, 0x14
- invoke-static {v4, v3}, LTest;->d(ILTest;)I
- move-result v3
- add-int/2addr v2, v3
- :cond_270
- add-int/lit8 v0, v0, 0x1
- goto :goto_25e
- :cond_273
- move v0, v2
- :cond_274
- iget-object v2, p0, LTestObject;->z:Ljava/lang/String;
- if-eqz v2, :cond_28b
- iget-object v2, p0, LTestObject;->z:Ljava/lang/String;
- const-string v3, ""
- invoke-virtual {v2, v3}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
- move-result v2
- if-nez v2, :cond_28b
- const/16 v2, 0x15
- iget-object v3, p0, LTestObject;->z:Ljava/lang/String;
- invoke-static {v2, v3}, LTest;->b(ILjava/lang/String;)I
- move-result v2
- add-int/2addr v0, v2
- :cond_28b
- iget v2, p0, LTestObject;->i:I
- if-eq v2, v5, :cond_298
- const/16 v2, 0x16
- iget v3, p0, LTestObject;->i:I
- invoke-static {v2, v3}, LTest;->f(II)I
- move-result v2
- add-int/2addr v0, v2
- :cond_298
- iget-object v2, p0, LTestObject;->a:[LTest;
- if-eqz v2, :cond_2b9
- iget-object v2, p0, LTestObject;->a:[LTest;
- array-length v2, v2
- if-lez v2, :cond_2b9
- move v2, v0
- move v0, v1
- :goto_2a3
- iget-object v3, p0, LTestObject;->a:[LTest;
- array-length v3, v3
- if-ge v0, v3, :cond_2b8
- iget-object v3, p0, LTestObject;->a:[LTest;
- aget-object v3, v3, v0
- if-eqz v3, :cond_2b5
- const/16 v4, 0x17
- invoke-static {v4, v3}, LTest;->d(ILTest;)I
- move-result v3
- add-int/2addr v2, v3
- :cond_2b5
- add-int/lit8 v0, v0, 0x1
- goto :goto_2a3
- :cond_2b8
- move v0, v2
- :cond_2b9
- iget-object v2, p0, LTestObject;->z:Ljava/lang/String;
- if-eqz v2, :cond_2d0
- iget-object v2, p0, LTestObject;->z:Ljava/lang/String;
- const-string v3, ""
- invoke-virtual {v2, v3}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
- move-result v2
- if-nez v2, :cond_2d0
- const/16 v2, 0x18
- iget-object v3, p0, LTestObject;->z:Ljava/lang/String;
- invoke-static {v2, v3}, LTest;->b(ILjava/lang/String;)I
- move-result v2
- add-int/2addr v0, v2
- :cond_2d0
- iget-object v2, p0, LTest;->M:LTest;
- if-eqz v2, :cond_2dd
- const/16 v2, 0x19
- iget-object v3, p0, LTest;->M:LTest;
- invoke-static {v2, v3}, LTest;->d(ILTest;)I
- move-result v2
- add-int/2addr v0, v2
- :cond_2dd
- iget-object v2, p0, LTestObject;->z:Ljava/lang/String;
- if-eqz v2, :cond_2f4
- iget-object v2, p0, LTestObject;->z:Ljava/lang/String;
- const-string v3, ""
- invoke-virtual {v2, v3}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
- move-result v2
- if-nez v2, :cond_2f4
- const/16 v2, 0x1a
- iget-object v3, p0, LTestObject;->z:Ljava/lang/String;
- invoke-static {v2, v3}, LTest;->b(ILjava/lang/String;)I
- move-result v2
- add-int/2addr v0, v2
- :cond_2f4
- iget-object v2, p0, LTest;->o:[LTest;
- if-eqz v2, :cond_315
- iget-object v2, p0, LTest;->o:[LTest;
- array-length v2, v2
- if-lez v2, :cond_315
- move v2, v0
- move v0, v1
- :goto_2ff
- iget-object v3, p0, LTest;->o:[LTest;
- array-length v3, v3
- if-ge v0, v3, :cond_314
- iget-object v3, p0, LTest;->o:[LTest;
- aget-object v3, v3, v0
- if-eqz v3, :cond_311
- const/16 v4, 0x1b
- invoke-static {v4, v3}, LTest;->d(ILTest;)I
- move-result v3
- add-int/2addr v2, v3
- :cond_311
- add-int/lit8 v0, v0, 0x1
- goto :goto_2ff
- :cond_314
- move v0, v2
- :cond_315
- iget-object v2, p0, LTestObject;->a:[LTest;
- if-eqz v2, :cond_336
- iget-object v2, p0, LTestObject;->a:[LTest;
- array-length v2, v2
- if-lez v2, :cond_336
- move v2, v0
- move v0, v1
- :goto_320
- iget-object v3, p0, LTestObject;->a:[LTest;
- array-length v3, v3
- if-ge v0, v3, :cond_335
- iget-object v3, p0, LTestObject;->a:[LTest;
- aget-object v3, v3, v0
- if-eqz v3, :cond_332
- const/16 v4, 0x1c
- invoke-static {v4, v3}, LTest;->d(ILTest;)I
- move-result v3
- add-int/2addr v2, v3
- :cond_332
- add-int/lit8 v0, v0, 0x1
- goto :goto_320
- :cond_335
- move v0, v2
- :cond_336
- iget-object v2, p0, LTestObject;->a:[LTest;
- if-eqz v2, :cond_357
- iget-object v2, p0, LTestObject;->a:[LTest;
- array-length v2, v2
- if-lez v2, :cond_357
- move v2, v0
- move v0, v1
- :goto_341
- iget-object v3, p0, LTestObject;->a:[LTest;
- array-length v3, v3
- if-ge v0, v3, :cond_356
- iget-object v3, p0, LTestObject;->a:[LTest;
- aget-object v3, v3, v0
- if-eqz v3, :cond_353
- const/16 v4, 0x1d
- invoke-static {v4, v3}, LTest;->d(ILTest;)I
- move-result v3
- add-int/2addr v2, v3
- :cond_353
- add-int/lit8 v0, v0, 0x1
- goto :goto_341
- :cond_356
- move v0, v2
- :cond_357
- iget-object v2, p0, LTest;->t:[LTest;
- if-eqz v2, :cond_378
- iget-object v2, p0, LTest;->t:[LTest;
- array-length v2, v2
- if-lez v2, :cond_378
- move v2, v0
- move v0, v1
- :goto_362
- iget-object v3, p0, LTest;->t:[LTest;
- array-length v3, v3
- if-ge v0, v3, :cond_377
- iget-object v3, p0, LTest;->t:[LTest;
- aget-object v3, v3, v0
- if-eqz v3, :cond_374
- const/16 v4, 0x1e
- invoke-static {v4, v3}, LTest;->d(ILTest;)I
- move-result v3
- add-int/2addr v2, v3
- :cond_374
- add-int/lit8 v0, v0, 0x1
- goto :goto_362
- :cond_377
- move v0, v2
- :cond_378
- iget-object v2, p0, LTestObject;->a:[LTest;
- if-eqz v2, :cond_399
- iget-object v2, p0, LTestObject;->a:[LTest;
- array-length v2, v2
- if-lez v2, :cond_399
- move v2, v0
- move v0, v1
- :goto_383
- iget-object v3, p0, LTestObject;->a:[LTest;
- array-length v3, v3
- if-ge v0, v3, :cond_398
- iget-object v3, p0, LTestObject;->a:[LTest;
- aget-object v3, v3, v0
- if-eqz v3, :cond_395
- const/16 v4, 0x1f
- invoke-static {v4, v3}, LTest;->d(ILTest;)I
- move-result v3
- add-int/2addr v2, v3
- :cond_395
- add-int/lit8 v0, v0, 0x1
- goto :goto_383
- :cond_398
- move v0, v2
- :cond_399
- iget-object v2, p0, LTestObject;->a:[LTest;
- if-eqz v2, :cond_3ba
- iget-object v2, p0, LTestObject;->a:[LTest;
- array-length v2, v2
- if-lez v2, :cond_3ba
- move v2, v0
- move v0, v1
- :goto_3a4
- iget-object v3, p0, LTestObject;->a:[LTest;
- array-length v3, v3
- if-ge v0, v3, :cond_3b9
- iget-object v3, p0, LTestObject;->a:[LTest;
- aget-object v3, v3, v0
- if-eqz v3, :cond_3b6
- const/16 v4, 0x20
- invoke-static {v4, v3}, LTest;->d(ILTest;)I
- move-result v3
- add-int/2addr v2, v3
- :cond_3b6
- add-int/lit8 v0, v0, 0x1
- goto :goto_3a4
- :cond_3b9
- move v0, v2
- :cond_3ba
- iget-object v2, p0, LTestObject;->a:[LTest;
- if-eqz v2, :cond_3db
- iget-object v2, p0, LTestObject;->a:[LTest;
- array-length v2, v2
- if-lez v2, :cond_3db
- move v2, v0
- move v0, v1
- :goto_3c5
- iget-object v3, p0, LTestObject;->a:[LTest;
- array-length v3, v3
- if-ge v0, v3, :cond_3da
- iget-object v3, p0, LTestObject;->a:[LTest;
- aget-object v3, v3, v0
- if-eqz v3, :cond_3d7
- const/16 v4, 0x21
- invoke-static {v4, v3}, LTest;->d(ILTest;)I
- move-result v3
- add-int/2addr v2, v3
- :cond_3d7
- add-int/lit8 v0, v0, 0x1
- goto :goto_3c5
- :cond_3da
- move v0, v2
- :cond_3db
- iget-object v2, p0, LTestObject;->a:[LTest;
- if-eqz v2, :cond_3fc
- iget-object v2, p0, LTestObject;->a:[LTest;
- array-length v2, v2
- if-lez v2, :cond_3fc
- move v2, v0
- move v0, v1
- :goto_3e6
- iget-object v3, p0, LTestObject;->a:[LTest;
- array-length v3, v3
- if-ge v0, v3, :cond_3fb
- iget-object v3, p0, LTestObject;->a:[LTest;
- aget-object v3, v3, v0
- if-eqz v3, :cond_3f8
- const/16 v4, 0x22
- invoke-static {v4, v3}, LTest;->d(ILTest;)I
- move-result v3
- add-int/2addr v2, v3
- :cond_3f8
- add-int/lit8 v0, v0, 0x1
- goto :goto_3e6
- :cond_3fb
- move v0, v2
- :cond_3fc
- iget-object v2, p0, LTestObject;->a:[LTest;
- if-eqz v2, :cond_41d
- iget-object v2, p0, LTestObject;->a:[LTest;
- array-length v2, v2
- if-lez v2, :cond_41d
- move v2, v0
- move v0, v1
- :goto_407
- iget-object v3, p0, LTestObject;->a:[LTest;
- array-length v3, v3
- if-ge v0, v3, :cond_41c
- iget-object v3, p0, LTestObject;->a:[LTest;
- aget-object v3, v3, v0
- if-eqz v3, :cond_419
- const/16 v4, 0x23
- invoke-static {v4, v3}, LTest;->d(ILTest;)I
- move-result v3
- add-int/2addr v2, v3
- :cond_419
- add-int/lit8 v0, v0, 0x1
- goto :goto_407
- :cond_41c
- move v0, v2
- :cond_41d
- iget-object v2, p0, LTestObject;->a:[LTest;
- if-eqz v2, :cond_43e
- iget-object v2, p0, LTestObject;->a:[LTest;
- array-length v2, v2
- if-lez v2, :cond_43e
- move v2, v0
- move v0, v1
- :goto_428
- iget-object v3, p0, LTestObject;->a:[LTest;
- array-length v3, v3
- if-ge v0, v3, :cond_43d
- iget-object v3, p0, LTestObject;->a:[LTest;
- aget-object v3, v3, v0
- if-eqz v3, :cond_43a
- const/16 v4, 0x24
- invoke-static {v4, v3}, LTest;->d(ILTest;)I
- move-result v3
- add-int/2addr v2, v3
- :cond_43a
- add-int/lit8 v0, v0, 0x1
- goto :goto_428
- :cond_43d
- move v0, v2
- :cond_43e
- iget-object v2, p0, LTestObject;->a:[LTest;
- if-eqz v2, :cond_45f
- iget-object v2, p0, LTestObject;->a:[LTest;
- array-length v2, v2
- if-lez v2, :cond_45f
- move v2, v0
- move v0, v1
- :goto_449
- iget-object v3, p0, LTestObject;->a:[LTest;
- array-length v3, v3
- if-ge v0, v3, :cond_45e
- iget-object v3, p0, LTestObject;->a:[LTest;
- aget-object v3, v3, v0
- if-eqz v3, :cond_45b
- const/16 v4, 0x25
- invoke-static {v4, v3}, LTest;->d(ILTest;)I
- move-result v3
- add-int/2addr v2, v3
- :cond_45b
- add-int/lit8 v0, v0, 0x1
- goto :goto_449
- :cond_45e
- move v0, v2
- :cond_45f
- iget-object v2, p0, LTest;->T:LTest;
- if-eqz v2, :cond_46c
- const/16 v2, 0x26
- iget-object v3, p0, LTest;->T:LTest;
- invoke-static {v2, v3}, LTest;->d(ILTest;)I
- move-result v2
- add-int/2addr v0, v2
- :cond_46c
- iget-object v2, p0, LTestObject;->a:[LTest;
- if-eqz v2, :cond_48d
- iget-object v2, p0, LTestObject;->a:[LTest;
- array-length v2, v2
- if-lez v2, :cond_48d
- move v2, v0
- move v0, v1
- :goto_477
- iget-object v3, p0, LTestObject;->a:[LTest;
- array-length v3, v3
- if-ge v0, v3, :cond_48c
- iget-object v3, p0, LTestObject;->a:[LTest;
- aget-object v3, v3, v0
- if-eqz v3, :cond_489
- const/16 v4, 0x27
- invoke-static {v4, v3}, LTest;->d(ILTest;)I
- move-result v3
- add-int/2addr v2, v3
- :cond_489
- add-int/lit8 v0, v0, 0x1
- goto :goto_477
- :cond_48c
- move v0, v2
- :cond_48d
- iget-object v2, p0, LTestObject;->a:[LTest;
- if-eqz v2, :cond_4ae
- iget-object v2, p0, LTestObject;->a:[LTest;
- array-length v2, v2
- if-lez v2, :cond_4ae
- move v2, v0
- move v0, v1
- :goto_498
- iget-object v3, p0, LTestObject;->a:[LTest;
- array-length v3, v3
- if-ge v0, v3, :cond_4ad
- iget-object v3, p0, LTestObject;->a:[LTest;
- aget-object v3, v3, v0
- if-eqz v3, :cond_4aa
- const/16 v4, 0x28
- invoke-static {v4, v3}, LTest;->d(ILTest;)I
- move-result v3
- add-int/2addr v2, v3
- :cond_4aa
- add-int/lit8 v0, v0, 0x1
- goto :goto_498
- :cond_4ad
- move v0, v2
- :cond_4ae
- iget-object v2, p0, LTestObject;->a:[LTest;
- if-eqz v2, :cond_4cf
- iget-object v2, p0, LTestObject;->a:[LTest;
- array-length v2, v2
- if-lez v2, :cond_4cf
- move v2, v0
- move v0, v1
- :goto_4b9
- iget-object v3, p0, LTestObject;->a:[LTest;
- array-length v3, v3
- if-ge v0, v3, :cond_4ce
- iget-object v3, p0, LTestObject;->a:[LTest;
- aget-object v3, v3, v0
- if-eqz v3, :cond_4cb
- const/16 v4, 0x29
- invoke-static {v4, v3}, LTest;->d(ILTest;)I
- move-result v3
- add-int/2addr v2, v3
- :cond_4cb
- add-int/lit8 v0, v0, 0x1
- goto :goto_4b9
- :cond_4ce
- move v0, v2
- :cond_4cf
- iget-object v2, p0, LTestObject;->a:[LTest;
- if-eqz v2, :cond_4f0
- iget-object v2, p0, LTestObject;->a:[LTest;
- array-length v2, v2
- if-lez v2, :cond_4f0
- move v2, v0
- move v0, v1
- :goto_4da
- iget-object v3, p0, LTestObject;->a:[LTest;
- array-length v3, v3
- if-ge v0, v3, :cond_4ef
- iget-object v3, p0, LTestObject;->a:[LTest;
- aget-object v3, v3, v0
- if-eqz v3, :cond_4ec
- const/16 v4, 0x2a
- invoke-static {v4, v3}, LTest;->d(ILTest;)I
- move-result v3
- add-int/2addr v2, v3
- :cond_4ec
- add-int/lit8 v0, v0, 0x1
- goto :goto_4da
- :cond_4ef
- move v0, v2
- :cond_4f0
- iget-object v2, p0, LTestObject;->a:[LTest;
- if-eqz v2, :cond_511
- iget-object v2, p0, LTestObject;->a:[LTest;
- array-length v2, v2
- if-lez v2, :cond_511
- move v2, v0
- move v0, v1
- :goto_4fb
- iget-object v3, p0, LTestObject;->a:[LTest;
- array-length v3, v3
- if-ge v0, v3, :cond_510
- iget-object v3, p0, LTestObject;->a:[LTest;
- aget-object v3, v3, v0
- if-eqz v3, :cond_50d
- const/16 v4, 0x2b
- invoke-static {v4, v3}, LTest;->d(ILTest;)I
- move-result v3
- add-int/2addr v2, v3
- :cond_50d
- add-int/lit8 v0, v0, 0x1
- goto :goto_4fb
- :cond_510
- move v0, v2
- :cond_511
- iget-object v2, p0, LTestObject;->a:[LTest;
- if-eqz v2, :cond_532
- iget-object v2, p0, LTestObject;->a:[LTest;
- array-length v2, v2
- if-lez v2, :cond_532
- move v2, v0
- move v0, v1
- :goto_51c
- iget-object v3, p0, LTestObject;->a:[LTest;
- array-length v3, v3
- if-ge v0, v3, :cond_531
- iget-object v3, p0, LTestObject;->a:[LTest;
- aget-object v3, v3, v0
- if-eqz v3, :cond_52e
- const/16 v4, 0x2c
- invoke-static {v4, v3}, LTest;->d(ILTest;)I
- move-result v3
- add-int/2addr v2, v3
- :cond_52e
- add-int/lit8 v0, v0, 0x1
- goto :goto_51c
- :cond_531
- move v0, v2
- :cond_532
- iget-object v2, p0, LTestObject;->a:[LTest;
- if-eqz v2, :cond_553
- iget-object v2, p0, LTestObject;->a:[LTest;
- array-length v2, v2
- if-lez v2, :cond_553
- move v2, v0
- move v0, v1
- :goto_53d
- iget-object v3, p0, LTestObject;->a:[LTest;
- array-length v3, v3
- if-ge v0, v3, :cond_552
- iget-object v3, p0, LTestObject;->a:[LTest;
- aget-object v3, v3, v0
- if-eqz v3, :cond_54f
- const/16 v4, 0x2d
- invoke-static {v4, v3}, LTest;->d(ILTest;)I
- move-result v3
- add-int/2addr v2, v3
- :cond_54f
- add-int/lit8 v0, v0, 0x1
- goto :goto_53d
- :cond_552
- move v0, v2
- :cond_553
- iget-object v2, p0, LTestObject;->a:[LTest;
- if-eqz v2, :cond_571
- iget-object v2, p0, LTestObject;->a:[LTest;
- array-length v2, v2
- if-lez v2, :cond_571
- :goto_55c
- iget-object v2, p0, LTestObject;->a:[LTest;
- array-length v2, v2
- if-ge v1, v2, :cond_571
- iget-object v2, p0, LTestObject;->a:[LTest;
- aget-object v2, v2, v1
- if-eqz v2, :cond_56e
- const/16 v3, 0x2e
- invoke-static {v3, v2}, LTest;->d(ILTest;)I
- move-result v2
- add-int/2addr v0, v2
- :cond_56e
- add-int/lit8 v1, v1, 0x1
- goto :goto_55c
- :cond_571
- iget-object v1, p0, LTest;->V:LTest;
- if-eqz v1, :cond_57e
- const/16 v1, 0x64
- iget-object v2, p0, LTest;->V:LTest;
- invoke-static {v1, v2}, LTest;->d(ILTest;)I
- move-result v1
- add-int/2addr v0, v1
- :cond_57e
- return v0
-.end method
-
-.method public final method2()I
- .registers 1
- .prologue
- const/4 v0, 0x1
- return v0
-.end method
diff --git a/src/test/smali/controlflow/ControlFlow.smali b/src/test/smali/controlflow/ControlFlow.smali
deleted file mode 100644
index 35881fe..0000000
--- a/src/test/smali/controlflow/ControlFlow.smali
+++ /dev/null
@@ -1,225 +0,0 @@
-# Copyright (c) 2016, 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.
-
-.class public LTest;
-
-.super Ljava/lang/Object;
-
-.method static constantEqTrue()I
- .locals 1
-
- const v0, 0
- if-eqz v0, :equals
- const v0, 1
- return v0
- :equals
- const v0, 2
- return v0
-.end method
-
-.method static constantEqFalse()I
- .locals 1
-
- const v0, 1
- if-eqz v0, :equals
- const v0, 1
- return v0
- :equals
- const v0, 2
- return v0
-.end method
-
-.method static constantNeTrue()I
- .locals 1
-
- const v0, 1
- if-nez v0, :equals
- const v0, 1
- return v0
- :equals
- const v0, 2
- return v0
-.end method
-
-.method static constantNeFalse()I
- .locals 1
-
- const v0, 0
- if-nez v0, :equals
- const v0, 1
- return v0
- :equals
- const v0, 2
- return v0
-.end method
-
-.method static constantLtzTrue()I
- .locals 1
-
- const v0, -1
- if-ltz v0, :equals
- const v0, 1
- return v0
- :equals
- const v0, 2
- return v0
-.end method
-
-.method static constantLtzFalse()I
- .locals 1
-
- const v0, 0
- if-ltz v0, :equals
- const v0, 1
- return v0
- :equals
- const v0, 2
- return v0
-.end method
-
-.method static constantLezTrue()I
- .locals 1
-
- const v0, 0
- if-lez v0, :equals
- const v0, 1
- return v0
- :equals
- const v0, 2
- return v0
-.end method
-
-.method static constantLezFalse()I
- .locals 1
-
- const v0, 1
- if-lez v0, :equals
- const v0, 1
- return v0
- :equals
- const v0, 2
- return v0
-.end method
-
-.method static constantGtzTrue()I
- .locals 1
-
- const v0, 1
- if-gtz v0, :equals
- const v0, 1
- return v0
- :equals
- const v0, 2
- return v0
-.end method
-
-.method static constantGtzFalse()I
- .locals 1
-
- const v0, 0
- if-gtz v0, :equals
- const v0, 1
- return v0
- :equals
- const v0, 2
- return v0
-.end method
-
-.method static constantGezTrue()I
- .locals 1
-
- const v0, 0
- if-gez v0, :equals
- const v0, 1
- return v0
- :equals
- const v0, 2
- return v0
-.end method
-
-.method static constantGezFalse()I
- .locals 1
-
- const v0, -1
- if-gez v0, :equals
- const v0, 1
- return v0
- :equals
- const v0, 2
- return v0
-.end method
-
-.method static cmpConstantLong()I
- .locals 4
-
- const-wide v0, 0
- const-wide v2, 0
- cmp-long v0, v0, v2
- if-eqz v0, :equals
- const v0, 1
- return v0
- :equals
- const v0, 2
- return v0
-.end method
-
-.method public static main([Ljava/lang/String;)V
- .locals 3
-
- sget-object v0, Ljava/lang/System;->out:Ljava/io/PrintStream;
-
- invoke-static {}, LTest;->constantEqTrue()I
- move-result v1
- invoke-virtual {v0, v1}, Ljava/io/PrintStream;->println(I)V
-
- invoke-static {}, LTest;->constantEqFalse()I
- move-result v1
- invoke-virtual {v0, v1}, Ljava/io/PrintStream;->println(I)V
-
- invoke-static {}, LTest;->constantNeTrue()I
- move-result v1
- invoke-virtual {v0, v1}, Ljava/io/PrintStream;->println(I)V
-
- invoke-static {}, LTest;->constantNeFalse()I
- move-result v1
- invoke-virtual {v0, v1}, Ljava/io/PrintStream;->println(I)V
-
- invoke-static {}, LTest;->constantLtzTrue()I
- move-result v1
- invoke-virtual {v0, v1}, Ljava/io/PrintStream;->println(I)V
-
- invoke-static {}, LTest;->constantLtzFalse()I
- move-result v1
- invoke-virtual {v0, v1}, Ljava/io/PrintStream;->println(I)V
-
- invoke-static {}, LTest;->constantLezTrue()I
- move-result v1
- invoke-virtual {v0, v1}, Ljava/io/PrintStream;->println(I)V
-
- invoke-static {}, LTest;->constantLezFalse()I
- move-result v1
- invoke-virtual {v0, v1}, Ljava/io/PrintStream;->println(I)V
-
- invoke-static {}, LTest;->constantGtzTrue()I
- move-result v1
- invoke-virtual {v0, v1}, Ljava/io/PrintStream;->println(I)V
-
- invoke-static {}, LTest;->constantGtzFalse()I
- move-result v1
- invoke-virtual {v0, v1}, Ljava/io/PrintStream;->println(I)V
-
- invoke-static {}, LTest;->constantGezTrue()I
- move-result v1
- invoke-virtual {v0, v1}, Ljava/io/PrintStream;->println(I)V
-
- invoke-static {}, LTest;->constantGezFalse()I
- move-result v1
- invoke-virtual {v0, v1}, Ljava/io/PrintStream;->println(I)V
-
- invoke-static {}, LTest;->cmpConstantLong()I
- move-result v1
- invoke-virtual {v0, v1}, Ljava/io/PrintStream;->println(I)V
-
- return-void
-.end method
diff --git a/src/test/smali/fibonacci/Fibonacci.smali b/src/test/smali/fibonacci/Fibonacci.smali
deleted file mode 100644
index 3345ec0..0000000
--- a/src/test/smali/fibonacci/Fibonacci.smali
+++ /dev/null
@@ -1,129 +0,0 @@
-# Copyright (c) 2016, 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.
-
-.class public LTest;
-
-.super Ljava/lang/Object;
-
-.method static fibonacci(I)I
- .locals 2
-
- if-eqz p0, :return
- const/4 v0, 0x1
- if-ne p0, v0, :calc
-
- :return
- return p0
-
- :calc
- add-int/lit8 v0, p0, -0x1
- invoke-static {v0}, LTest;->fibonacci(I)I
- move-result v0
- add-int/lit8 v1, p0, -0x2
- invoke-static {v1}, LTest;->fibonacci(I)I
- move-result v1
- add-int p0, v0, v1
- goto :return
-.end method
-
-.method static fibonacciLong(J)J
- .locals 4
-
- const-wide/16 v2, 0x1
- const-wide/16 v0, 0x0
- cmp-long v0, p0, v0
- if-eqz v0, :return
- cmp-long v0, p0, v2
- if-nez v0, :calc
-
- :return
- return-wide p0
-
- :calc
- sub-long v0, p0, v2
- invoke-static {v0, v1}, LTest;->fibonacciLong(J)J
- move-result-wide v0
- const-wide/16 v2, 0x2
- sub-long v2, p0, v2
- invoke-static {v2, v3}, LTest;->fibonacciLong(J)J
- move-result-wide v2
- add-long p0, v0, v2
- goto :return
-.end method
-
-.method static fibonacciJack(I)I
- .locals 2
-
- if-eqz p0, :return
- const/4 v0, 0x1
- if-ne p0, v0, :calc
-
- :return
- return p0
-
- :calc
- add-int/lit8 v0, p0, -0x1
- invoke-static {v0}, LTest;->fibonacciJack(I)I
- move-result v0
- add-int/lit8 v1, p0, -0x2
- invoke-static {v1}, LTest;->fibonacciJack(I)I
- move-result v1
- add-int/2addr v0, v1
- return v0
-.end method
-
-.method static fibonacciLongJack(J)J
- .locals 4
-
- const-wide/16 v2, 0x1
- const-wide/16 v0, 0x0
- cmp-long v0, p0, v0
- if-eqz v0, :return
- cmp-long v0, p0, v2
- if-nez v0, :calc
-
- :return
- return-wide p0
-
- :calc
- sub-long v0, p0, v2
- invoke-static {v0, v1}, LTest;->fibonacciLongJack(J)J
- move-result-wide v0
- const-wide/16 v2, 0x2
- sub-long v2, p0, v2
- invoke-static {v2, v3}, LTest;->fibonacciLongJack(J)J
- move-result-wide v2
- add-long/2addr v0, v2
- return-wide v0
-.end method
-
-.method public static main([Ljava/lang/String;)V
- .registers 5
-
- sget-object v0, Ljava/lang/System;->out:Ljava/io/PrintStream;
-
- const/16 v1, 0xa
- invoke-static {v1}, LTest;->fibonacci(I)I
- move-result v1
- invoke-virtual {v0, v1}, Ljava/io/PrintStream;->println(I)V
-
- sget-object v0, Ljava/lang/System;->out:Ljava/io/PrintStream;
- const-wide/16 v2, 0xa
- invoke-static {v2, v3}, LTest;->fibonacciLong(J)J
- move-result-wide v2
- invoke-virtual {v0, v2, v3}, Ljava/io/PrintStream;->println(J)V
-
- const/16 v1, 0xa
- invoke-static {v1}, LTest;->fibonacciJack(I)I
- move-result v1
- invoke-virtual {v0, v1}, Ljava/io/PrintStream;->println(I)V
-
- sget-object v0, Ljava/lang/System;->out:Ljava/io/PrintStream;
- const-wide/16 v2, 0xa
- invoke-static {v2, v3}, LTest;->fibonacciLongJack(J)J
- move-result-wide v2
- invoke-virtual {v0, v2, v3}, Ljava/io/PrintStream;->println(J)V
-
- return-void
-.end method
diff --git a/src/test/smali/fill-array-data/FillArrayData.smali b/src/test/smali/fill-array-data/FillArrayData.smali
deleted file mode 100644
index 81a5834..0000000
--- a/src/test/smali/fill-array-data/FillArrayData.smali
+++ /dev/null
@@ -1,61 +0,0 @@
-# Copyright (c) 2016, 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.
-
-.class public LTest;
-
-.super Ljava/lang/Object;
-
-# Simple fill array data
-.method public static test1()[I
- .registers 2
-
- const/4 v1, 3
- new-array v0, v1, [I
- fill-array-data v0, :array_data
- return-object v0
-
- :array_data
- .array-data 4
- 1 2 3
- .end array-data
-.end method
-
-# Fill array data after data
-.method public static test2()[I
- .registers 2
-
- goto :start
-
- :array_data
- .array-data 4
- 4 5 6
- .end array-data
-
- :start
- const/4 v1, 3
- new-array v0, v1, [I
- fill-array-data v0, :array_data
- return-object v0
-
-.end method
-
-.method public static main([Ljava/lang/String;)V
- .locals 2
-
- sget-object v0, Ljava/lang/System;->out:Ljava/io/PrintStream;
-
- invoke-static {}, LTest;->test1()[I
- move-result-object v1
- invoke-static {v1}, Ljava/util/Arrays;->toString([I)Ljava/lang/String;
- move-result-object v1
- invoke-virtual {v0, v1}, Ljava/io/PrintStream;->print(Ljava/lang/Object;)V
-
- invoke-static {}, LTest;->test2()[I
- move-result-object v1
- invoke-static {v1}, Ljava/util/Arrays;->toString([I)Ljava/lang/String;
- move-result-object v1
- invoke-virtual {v0, v1}, Ljava/io/PrintStream;->print(Ljava/lang/Object;)V
-
- return-void
-.end method
diff --git a/src/test/smali/filled-new-array/FilledNewArray.smali b/src/test/smali/filled-new-array/FilledNewArray.smali
deleted file mode 100644
index 2550e3f..0000000
--- a/src/test/smali/filled-new-array/FilledNewArray.smali
+++ /dev/null
@@ -1,93 +0,0 @@
-# Copyright (c) 2016, 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.
-
-.class public LTest;
-
-.super Ljava/lang/Object;
-
-# Filled new array from arguments.
-.method public static test1(III)[I
- .locals 1
-
- filled-new-array {p0, p1, p2}, [I
- move-result-object v0
- return-object v0
-.end method
-
-# Filled new array from constants.
-.method public static test2()[I
- .locals 3
-
- const/4 v0, 4
- const/4 v1, 5
- const/4 v2, 6
- filled-new-array {v0, v1, v2}, [I
- move-result-object v0
- return-object v0
-.end method
-
-# Filled new array range from arguments.
-.method public static test3(IIIIII)[I
- .locals 1
-
- filled-new-array/range {p0 .. p5}, [I
- move-result-object v0
- return-object v0
-.end method
-
-# Filled new array range from constants.
-.method public static test4()[I
- .locals 6
-
- const/4 v0, 6
- const/4 v1, 5
- const/4 v2, 4
- const/4 v3, 3
- const/4 v4, 2
- const/4 v5, 1
- filled-new-array/range {v0 .. v5}, [I
- move-result-object v0
- return-object v0
-.end method
-
-.method public static main([Ljava/lang/String;)V
- .locals 7
-
- sget-object v0, Ljava/lang/System;->out:Ljava/io/PrintStream;
-
- const/4 v1, 1
- const/4 v2, 2
- const/4 v3, 3
- invoke-static {v1, v2, v3}, LTest;->test1(III)[I
- move-result-object v1
- invoke-static {v1}, Ljava/util/Arrays;->toString([I)Ljava/lang/String;
- move-result-object v1
- invoke-virtual {v0, v1}, Ljava/io/PrintStream;->print(Ljava/lang/Object;)V
-
- invoke-static {}, LTest;->test2()[I
- move-result-object v1
- invoke-static {v1}, Ljava/util/Arrays;->toString([I)Ljava/lang/String;
- move-result-object v1
- invoke-virtual {v0, v1}, Ljava/io/PrintStream;->print(Ljava/lang/Object;)V
-
- const/4 v1, 1
- const/4 v2, 2
- const/4 v3, 3
- const/4 v4, 4
- const/4 v5, 5
- const/4 v6, 6
- invoke-static/range {v1 .. v6}, LTest;->test3(IIIIII)[I
- move-result-object v1
- invoke-static {v1}, Ljava/util/Arrays;->toString([I)Ljava/lang/String;
- move-result-object v1
- invoke-virtual {v0, v1}, Ljava/io/PrintStream;->print(Ljava/lang/Object;)V
-
- invoke-static {}, LTest;->test4()[I
- move-result-object v1
- invoke-static {v1}, Ljava/util/Arrays;->toString([I)Ljava/lang/String;
- move-result-object v1
- invoke-virtual {v0, v1}, Ljava/io/PrintStream;->print(Ljava/lang/Object;)V
-
- return-void
-.end method
diff --git a/src/test/smali/illegal-invokes/Iface.java b/src/test/smali/illegal-invokes/Iface.java
deleted file mode 100644
index dd11626..0000000
--- a/src/test/smali/illegal-invokes/Iface.java
+++ /dev/null
@@ -1,9 +0,0 @@
-// Copyright (c) 2017, 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.
-
-public class Iface {
-
- public void bar() {
- }
-}
diff --git a/src/test/smali/illegal-invokes/Iface.smali b/src/test/smali/illegal-invokes/Iface.smali
deleted file mode 100644
index 5f074dce..0000000
--- a/src/test/smali/illegal-invokes/Iface.smali
+++ /dev/null
@@ -1,10 +0,0 @@
-# Copyright (c) 2017, 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.
-
-.class interface public abstract LIface;
-.super Ljava/lang/Object;
-
-.method public abstract bar()V
-.end method
-
diff --git a/src/test/smali/illegal-invokes/Lowest.java b/src/test/smali/illegal-invokes/Lowest.java
deleted file mode 100644
index e464313..0000000
--- a/src/test/smali/illegal-invokes/Lowest.java
+++ /dev/null
@@ -1,11 +0,0 @@
-// Copyright (c) 2017, 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.
-
-public class Lowest extends Iface implements Super {
-
- @Override
- public void foo() {
-
- }
-}
diff --git a/src/test/smali/illegal-invokes/Lowest.smali b/src/test/smali/illegal-invokes/Lowest.smali
deleted file mode 100644
index d6c5787..0000000
--- a/src/test/smali/illegal-invokes/Lowest.smali
+++ /dev/null
@@ -1,12 +0,0 @@
-# Copyright (c) 2017, 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.
-
-.class public LLowest;
-.super LSuper;
-
-.method public bar()V
- .locals 0
- return-void
-.end method
-
diff --git a/src/test/smali/illegal-invokes/Super.java b/src/test/smali/illegal-invokes/Super.java
deleted file mode 100644
index 54a8714..0000000
--- a/src/test/smali/illegal-invokes/Super.java
+++ /dev/null
@@ -1,8 +0,0 @@
-// Copyright (c) 2017, 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.
-
-public interface Super {
-
- public void foo();
-}
diff --git a/src/test/smali/illegal-invokes/Super.smali b/src/test/smali/illegal-invokes/Super.smali
deleted file mode 100644
index 1ec4f0e..0000000
--- a/src/test/smali/illegal-invokes/Super.smali
+++ /dev/null
@@ -1,13 +0,0 @@
-# Copyright (c) 2017, 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.
-
-.class public LSuper;
-.super Ljava/lang/Object;
-.implements LIface;
-
-.method public foo()V
- .locals 0
- return-void
-.end method
-
diff --git a/src/test/smali/illegal-invokes/Test.java b/src/test/smali/illegal-invokes/Test.java
deleted file mode 100644
index 8ddd18e..0000000
--- a/src/test/smali/illegal-invokes/Test.java
+++ /dev/null
@@ -1,30 +0,0 @@
-// Copyright (c) 2017, 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.
-
-public class Test {
-
- int ignore;
-
- public static void main(String... args) {
- Lowest l = new Lowest();
- callVirtualOnIface(l);
- callIfaceOnVirtual(l);
- }
-
- private static void callVirtualOnIface(Iface i) {
- try {
- i.bar();
- } catch (IncompatibleClassChangeError e) {
- System.out.println("ICCE");
- }
- }
-
- private static void callIfaceOnVirtual(Super s) {
- try {
- s.foo();
- } catch (IncompatibleClassChangeError e) {
- System.out.println("ICCE");
- }
- }
-}
diff --git a/src/test/smali/infinite-loop/InfiniteLoop1.smali b/src/test/smali/infinite-loop/InfiniteLoop1.smali
deleted file mode 100644
index a93923b..0000000
--- a/src/test/smali/infinite-loop/InfiniteLoop1.smali
+++ /dev/null
@@ -1,53 +0,0 @@
-# Copyright (c) 2017, 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.
-
-.class public LTest;
-
-.super Ljava/lang/Object;
-
-.method public static loop1()V
- .locals 0
- goto :a
-
- :a
- goto :b
-
- :b
- goto :c
-
- :c
- goto :d
-
- :d
- goto :b
-
- return-void
-.end method
-
-.method public static loop2()V
- .locals 2
- sget-object v0, Ljava/lang/System;->out:Ljava/io/PrintStream;
- const/4 v1, 0x1
- invoke-virtual {v0, v1}, Ljava/io/PrintStream;->println(I)V
- goto :a
-
- :a
- goto :b
-
- :b
- goto :c
-
- :c
- goto :d
-
- :d
- goto :b
-
- return-void
-.end method
-
-.method public static main([Ljava/lang/String;)V
- .locals 0
- return-void
-.end method
diff --git a/src/test/smali/merge-blocks-regression/Test.java b/src/test/smali/merge-blocks-regression/Test.java
deleted file mode 100644
index ca61ff4..0000000
--- a/src/test/smali/merge-blocks-regression/Test.java
+++ /dev/null
@@ -1,36 +0,0 @@
-// Copyright (c) 2016, 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.
-
-public class Test {
-
- public Object b;
- public Test d;
- public Test e;
- public Test g;
- public Test f;
-
- public void a() { throw new RuntimeException("Test.a()"); }
- public void a(long p1) { throw new RuntimeException("Test.a(long)"); }
- public void a(long p1, boolean p2) { throw new RuntimeException("Test.a(long, boolean)"); }
- public Test a(java.io.DataInputStream p1) { throw new RuntimeException("Test.a(input-stream)"); }
- public Test a(byte[] p1, Test p2) { throw new RuntimeException("Test.a(B[], Test)"); }
- public java.io.File b() { throw new RuntimeException("Test.b()"); }
- public Test bW_() { throw new RuntimeException("Test.bW_()"); }
- public long c() { throw new RuntimeException("Test.d()"); }
- public void c(boolean p1) { throw new RuntimeException("Test.c(boolean)"); }
- public void c(java.nio.ByteBuffer p1) { throw new RuntimeException("Test.c(byte-buf)"); }
- public byte[] cB() { throw new RuntimeException("Test.cB()"); }
- public long d() { throw new RuntimeException("Test.d()"); }
- public void d(boolean p1) { throw new RuntimeException("Test.d(boolean)"); }
- public Test e() { throw new RuntimeException("Test.e()"); }
- public void eV() { throw new RuntimeException("Test.eV()"); }
-
- public static void main(String[] args) {
- try {
- new TestObject().f();
- } catch (Exception e) {
- System.out.println(e);
- }
- }
-}
diff --git a/src/test/smali/merge-blocks-regression/TestObject.java b/src/test/smali/merge-blocks-regression/TestObject.java
deleted file mode 100644
index 59b46f6..0000000
--- a/src/test/smali/merge-blocks-regression/TestObject.java
+++ /dev/null
@@ -1,8 +0,0 @@
-// Copyright (c) 2016, 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.
-
-public class TestObject {
- public void f() {
- }
-}
diff --git a/src/test/smali/merge-blocks-regression/TestObject.smali b/src/test/smali/merge-blocks-regression/TestObject.smali
deleted file mode 100644
index f14013e..0000000
--- a/src/test/smali/merge-blocks-regression/TestObject.smali
+++ /dev/null
@@ -1,199 +0,0 @@
-# Copyright (c) 2016, 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.
-
-.class public final LTestObject;
-.super Ljava/lang/Object;
-
-.field public c:LTest;
-.field public b:LTest;
-.field public d:LTest;
-.field public e:LTest;
-.field public h:LTest;
-.field public i:LTest;
-.field public j:LTest;
-
-.method public constructor <init>()V
- .registers 1
- invoke-direct {p0}, Ljava/lang/Object;-><init>()V
- return-void
-.end method
-
-.method public final f()V
- .registers 15
- const/16 v11, 0xd
- const/4 v2, 0x0
- const/4 v1, 0x1
- iget-object v3, p0, LTestObject;->c:LTest;
- iget-object v0, p0, LTestObject;->b:LTest;
- invoke-virtual {v0}, LTest;->bW_()LTest;
- move-result-object v0
- iget-object v4, p0, LTestObject;->b:LTest;
- invoke-virtual {v4}, LTest;->e()LTest;
- move-result-object v4
- new-instance v5, Ljava/io/File;
- invoke-virtual {v0}, LTest;->b()Ljava/io/File;
- move-result-object v0
- const-string v6, "nlp_state"
- invoke-direct {v5, v0, v6}, Ljava/io/File;-><init>(Ljava/io/File;Ljava/lang/String;)V
- invoke-virtual {v4}, LTest;->d()J
- move-result-wide v6
- invoke-virtual {v4}, LTest;->c()J
- move-result-wide v8
- :try_start_25
- new-instance v0, Ljava/io/FileInputStream;
- invoke-direct {v0, v5}, Ljava/io/FileInputStream;-><init>(Ljava/io/File;)V
- new-instance v4, Ljava/io/BufferedInputStream;
- invoke-direct {v4, v0}, Ljava/io/BufferedInputStream;-><init>(Ljava/io/InputStream;)V
- iget-object v0, v3, LTest;->g:LTest;
- invoke-virtual {v0}, LTest;->cB()[B
- :try_end_34
- .catch Ljava/io/FileNotFoundException; {:try_start_25 .. :try_end_34} :catch_bf
- .catch Ljava/lang/SecurityException; {:try_start_25 .. :try_end_34} :catch_c8
- .catch Ljava/io/IOException; {:try_start_25 .. :try_end_34} :catch_d8
- move-result-object v0
- :try_start_35
- new-instance v5, Ljava/io/DataInputStream;
- invoke-direct {v5, v4}, Ljava/io/DataInputStream;-><init>(Ljava/io/InputStream;)V
- invoke-virtual {v5}, Ljava/io/DataInputStream;->readUnsignedShort()I
- move-result v10
- if-ne v10, v11, :cond_c4
- if-ne v10, v11, :cond_b2
- iget-object v10, v3, LTest;->f:LTest;
- if-nez v10, :cond_4d
- const/4 v10, 0x0
- invoke-static {v0, v10}, LTest;->a([BLTest;)LTest;
- move-result-object v0
- iput-object v0, v3, LTest;->f:LTest;
- :cond_4d
- iget-object v0, v3, LTest;->f:LTest;
- invoke-virtual {v0, v5}, LTest;->a(Ljava/io/DataInputStream;)LTest;
- move-result-object v0
- iget-object v0, v0, LTest;->b:Ljava/lang/Object;
- check-cast v0, [B
- invoke-static {v0}, Ljava/nio/ByteBuffer;->wrap([B)Ljava/nio/ByteBuffer;
- :try_end_5a
- .catch Ljava/io/IOException; {:try_start_35 .. :try_end_5a} :catch_ba
- .catch Ljava/io/FileNotFoundException; {:try_start_35 .. :try_end_5a} :catch_bf
- .catch Ljava/lang/SecurityException; {:try_start_35 .. :try_end_5a} :catch_c8
- move-result-object v5
- :try_start_5b
- invoke-virtual {v5}, Ljava/nio/ByteBuffer;->getLong()J
- move-result-wide v10
- invoke-virtual {v5}, Ljava/nio/ByteBuffer;->getLong()J
- move-result-wide v12
- add-long/2addr v10, v12
- sub-long v6, v10, v6
- invoke-static {v8, v9, v6, v7}, Ljava/lang/Math;->min(JJ)J
- move-result-wide v6
- invoke-virtual {v5}, Ljava/nio/ByteBuffer;->get()B
- move-result v0
- if-ne v0, v1, :cond_cd
- move v0, v1
- :goto_71
- invoke-virtual {v3, v6, v7, v0}, LTest;->a(JZ)V
- :try_end_74
- .catch Ljava/lang/IllegalArgumentException; {:try_start_5b .. :try_end_74} :catch_cf
- .catch Ljava/nio/BufferUnderflowException; {:try_start_5b .. :try_end_74} :catch_dd
- .catch Ljava/io/IOException; {:try_start_5b .. :try_end_74} :catch_ba
- .catch Ljava/io/FileNotFoundException; {:try_start_5b .. :try_end_74} :catch_bf
- .catch Ljava/lang/SecurityException; {:try_start_5b .. :try_end_74} :catch_c8
- :try_start_74
- iget-object v0, v3, LTest;->d:LTest;
- invoke-virtual {v0, v5}, LTest;->c(Ljava/nio/ByteBuffer;)V
- iget-object v0, v3, LTest;->e:LTest;
- invoke-virtual {v0, v5}, LTest;->c(Ljava/nio/ByteBuffer;)V
- :try_end_7e
- .catch Ljava/io/IOException; {:try_start_74 .. :try_end_7e} :catch_ba
- .catch Ljava/io/FileNotFoundException; {:try_start_74 .. :try_end_7e} :catch_bf
- .catch Ljava/lang/SecurityException; {:try_start_74 .. :try_end_7e} :catch_c8
- :goto_7e
- :try_start_7e
- invoke-virtual {v4}, Ljava/io/BufferedInputStream;->close()V
- :try_end_81
- .catch Ljava/io/FileNotFoundException; {:try_start_7e .. :try_end_81} :catch_bf
- .catch Ljava/lang/SecurityException; {:try_start_7e .. :try_end_81} :catch_c8
- .catch Ljava/io/IOException; {:try_start_7e .. :try_end_81} :catch_d8
- :goto_81
- iget-object v0, p0, LTestObject;->i:LTest;
- invoke-virtual {v0, v1}, LTest;->c(Z)V
- iget-object v0, p0, LTestObject;->i:LTest;
- invoke-virtual {v0, v2}, LTest;->d(Z)V
- iget-object v0, p0, LTestObject;->d:LTest;
- if-eqz v0, :cond_94
- iget-object v0, p0, LTestObject;->d:LTest;
- invoke-virtual {v0}, LTest;->a()V
- :cond_94
- iget-object v0, p0, LTestObject;->e:LTest;
- if-eqz v0, :cond_9d
- iget-object v0, p0, LTestObject;->e:LTest;
- invoke-virtual {v0}, LTest;->eV()V
- :cond_9d
- iget-object v0, p0, LTestObject;->h:LTest;
- iget-object v1, p0, LTestObject;->b:LTest;
- invoke-virtual {v1}, LTest;->e()LTest;
- move-result-object v1
- invoke-virtual {v1}, LTest;->c()J
- move-result-wide v2
- invoke-virtual {v0, v2, v3}, LTest;->a(J)V
- iget-object v0, p0, LTestObject;->j:LTest;
- invoke-virtual {v0}, LTest;->a()V
- return-void
- :cond_b2
- :try_start_b2
- new-instance v0, Ljava/io/IOException;
- const-string v4, "Incompatible version."
- invoke-direct {v0, v4}, Ljava/io/IOException;-><init>(Ljava/lang/String;)V
- throw v0
- :try_end_ba
- .catch Ljava/io/IOException; {:try_start_b2 .. :try_end_ba} :catch_ba
- .catch Ljava/io/FileNotFoundException; {:try_start_b2 .. :try_end_ba} :catch_bf
- .catch Ljava/lang/SecurityException; {:try_start_b2 .. :try_end_ba} :catch_c8
- :catch_ba
- move-exception v0
- :try_start_bb
- invoke-virtual {v3, v8, v9}, LTest;->a(J)V
- throw v0
- :try_end_bf
- .catch Ljava/io/FileNotFoundException; {:try_start_bb .. :try_end_bf} :catch_bf
- .catch Ljava/lang/SecurityException; {:try_start_bb .. :try_end_bf} :catch_c8
- .catch Ljava/io/IOException; {:try_start_bb .. :try_end_bf} :catch_d8
- :catch_bf
- move-exception v0
- invoke-virtual {v3, v8, v9}, LTest;->a(J)V
- goto :goto_81
- :cond_c4
- :try_start_c4
- invoke-virtual {v3, v8, v9}, LTest;->a(J)V
- :try_end_c7
- .catch Ljava/io/IOException; {:try_start_c4 .. :try_end_c7} :catch_ba
- .catch Ljava/io/FileNotFoundException; {:try_start_c4 .. :try_end_c7} :catch_bf
- .catch Ljava/lang/SecurityException; {:try_start_c4 .. :try_end_c7} :catch_c8
- goto :goto_7e
- :catch_c8
- move-exception v0
- invoke-virtual {v3, v8, v9}, LTest;->a(J)V
- goto :goto_81
- :cond_cd
- move v0, v2
- goto :goto_71
- :catch_cf
- move-exception v0
- :goto_d0
- :try_start_d0
- new-instance v4, Ljava/io/IOException;
- const-string v5, "Byte buffer read failed."
- invoke-direct {v4, v5, v0}, Ljava/io/IOException;-><init>(Ljava/lang/String;Ljava/lang/Throwable;)V
- throw v4
- :try_end_d8
- .catch Ljava/io/IOException; {:try_start_d0 .. :try_end_d8} :catch_ba
- .catch Ljava/io/FileNotFoundException; {:try_start_d0 .. :try_end_d8} :catch_bf
- .catch Ljava/lang/SecurityException; {:try_start_d0 .. :try_end_d8} :catch_c8
- :catch_d8
- move-exception v0
- invoke-virtual {v3, v8, v9}, LTest;->a(J)V
- goto :goto_81
- :catch_dd
- move-exception v0
- goto :goto_d0
-.end method
diff --git a/src/test/smali/multiple-returns/MultipleReturns.smali b/src/test/smali/multiple-returns/MultipleReturns.smali
deleted file mode 100644
index 145736b..0000000
--- a/src/test/smali/multiple-returns/MultipleReturns.smali
+++ /dev/null
@@ -1,126 +0,0 @@
-# Copyright (c) 2016, 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.
-
-.class public LTest;
-
-.super Ljava/lang/Object;
-
-.field static private result:Ljava/lang/String;
-
-.method public static test1(Z)Ljava/lang/String;
- .locals 1
- .param p0
-
- if-eqz p0, :false_branch
-
- const-string v0, "T"
- return-object v0
-
- :false_branch
- const-string v0, "F"
- return-object v0
-.end method
-
-.method public static test2(Z)V
- .locals 1
- .param p0
-
- if-eqz p0, :false_branch
-
- const-string v0, "t"
- sput-object v0, LTest;->result:Ljava/lang/String;
- return-void
-
- :false_branch
- const-string v0, "f"
- sput-object v0, LTest;->result:Ljava/lang/String;
- return-void
-.end method
-
-.method public static test3(Z)J
- .locals 2
- .param p0
-
- if-eqz p0, :false_branch
-
- const-wide v0, 0x1
- return-wide v0
-
- :false_branch
- const-wide/high16 v0, 0x4000000000000000L
- return-wide v0
-.end method
-
-.method public static test4(Z)Z
- .locals 0
- .param p0
-
- if-eqz p0, :false_branch
-
- return p0
-
- :false_branch
- return p0
-.end method
-
-.method public static main([Ljava/lang/String;)V
- .locals 3
- .param p0
-
- sget-object v0, Ljava/lang/System;->out:Ljava/io/PrintStream;
-
- const/4 v1, 0x1
- invoke-static {v1}, LTest;->test1(Z)Ljava/lang/String;
- move-result-object v1
- invoke-virtual {v0, v1}, Ljava/io/PrintStream;->print(Ljava/lang/Object;)V
-
- const/4 v1, 0x0
- invoke-static {v1}, LTest;->test1(Z)Ljava/lang/String;
- move-result-object v1
- invoke-virtual {v0, v1}, Ljava/io/PrintStream;->print(Ljava/lang/Object;)V
-
- const/4 v1, 0x1
- invoke-static {v1}, LTest;->test2(Z)V
- sget-object v1, LTest;->result:Ljava/lang/String;
- invoke-virtual {v0, v1}, Ljava/io/PrintStream;->print(Ljava/lang/Object;)V
-
- const/4 v1, 0x0
- invoke-static {v1}, LTest;->test2(Z)V
- sget-object v1, LTest;->result:Ljava/lang/String;
- invoke-virtual {v0, v1}, Ljava/io/PrintStream;->print(Ljava/lang/Object;)V
-
- invoke-virtual {v0}, Ljava/io/PrintStream;->println()V
-
- const/4 v1, 0x1
- invoke-static {v1}, LTest;->test3(Z)J
- move-result-wide v1
- invoke-static {v1, v2}, Ljava/lang/Long;->toString(J)Ljava/lang/String;
- move-result-object v1
- invoke-virtual {v0, v1}, Ljava/io/PrintStream;->println(Ljava/lang/Object;)V
-
- const/4 v1, 0x0
- invoke-static {v1}, LTest;->test3(Z)J
- move-result-wide v1
- invoke-static {v1, v2}, Ljava/lang/Long;->toString(J)Ljava/lang/String;
- move-result-object v1
- invoke-virtual {v0, v1}, Ljava/io/PrintStream;->println(Ljava/lang/Object;)V
-
- const/4 v1, 0x1
- invoke-static {v1}, LTest;->test4(Z)Z
- move-result v1
- invoke-static {v1}, Ljava/lang/Boolean;->toString(Z)Ljava/lang/String;
- move-result-object v1
- invoke-virtual {v0, v1}, Ljava/io/PrintStream;->println(Ljava/lang/Object;)V
-
- const/4 v1, 0x0
- invoke-static {v1}, LTest;->test4(Z)Z
- move-result v1
- invoke-static {v1}, Ljava/lang/Boolean;->toString(Z)Ljava/lang/String;
- move-result-object v1
- invoke-virtual {v0, v1}, Ljava/io/PrintStream;->println(Ljava/lang/Object;)V
-
- return-void
-.end method
-
-
diff --git a/src/test/smali/new-instance-and-init/Test.java b/src/test/smali/new-instance-and-init/Test.java
deleted file mode 100644
index a47e69d..0000000
--- a/src/test/smali/new-instance-and-init/Test.java
+++ /dev/null
@@ -1,16 +0,0 @@
-// Copyright (c) 2016, 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.
-
-public class Test {
-
- public Test(int i) {
- System.out.println("Test(" + i + ")");
- }
-
- public static void main(String[] args) {
- TestObject.allocate(0);
- TestObject.allocate(4);
- TestObject.allocate(10);
- }
-}
diff --git a/src/test/smali/new-instance-and-init/TestObject.java b/src/test/smali/new-instance-and-init/TestObject.java
deleted file mode 100644
index 003f09d..0000000
--- a/src/test/smali/new-instance-and-init/TestObject.java
+++ /dev/null
@@ -1,8 +0,0 @@
-// Copyright (c) 2016, 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.
-
-public class TestObject {
- public static void allocate(int i) {
- }
-}
diff --git a/src/test/smali/new-instance-and-init/TestObject.smali b/src/test/smali/new-instance-and-init/TestObject.smali
deleted file mode 100644
index 665de1b..0000000
--- a/src/test/smali/new-instance-and-init/TestObject.smali
+++ /dev/null
@@ -1,26 +0,0 @@
-# Copyright (c) 2016, 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.
-
-.class public final LTestObject;
-.super Ljava/lang/Object;
-
-.method public static allocate(I)V
- .registers 4
- new-instance v2, LTest;
- if-nez v3, :cond_9
- const/4 v1, 0x0
- invoke-direct {v2, v1}, LTest;-><init>(I)V
- :goto_8
- return-void
- :cond_9
- const/16 v0, 0xa
- if-ge v3, v0, :cond_14
- const/4 v1, 0x0
- invoke-direct {v2, v1}, LTest;-><init>(I)V
- goto :goto_8
- :cond_14
- const/4 v1, 0x0
- invoke-direct {v2, v1}, LTest;-><init>(I)V
- goto :goto_8
-.end method
\ No newline at end of file
diff --git a/src/test/smali/overlapping-long-registers/Overlapping.smali b/src/test/smali/overlapping-long-registers/Overlapping.smali
deleted file mode 100644
index 167eb1b..0000000
--- a/src/test/smali/overlapping-long-registers/Overlapping.smali
+++ /dev/null
@@ -1,53 +0,0 @@
-# Copyright (c) 2017, 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.
-
-# Some versions of dalvik had a bug where you cannot use the second half of an input long
-# as the first part of an output long. This smali code explicitly has that issue so the
-# generated dex file can be used to test art/dalvik versions.
-#
-# The issue was that if you have
-#
-# add-long v3, v0, v2
-#
-# dalvik would add v0 and v2 and store the result in v3 before adding v1 and v3 (now clobbered).
-
-.class public LTest;
-
-.super Ljava/lang/Object;
-
-.method static add(JJ)J
- .locals 5
- move-wide v0, p0
- move-wide v2, p2
- add-long v3, v0, v2
- return-wide v3
-.end method
-
-.method public static main([Ljava/lang/String;)V
- .locals 10
-
- sget-object v5, Ljava/lang/System;->out:Ljava/io/PrintStream;
-
- const-wide/high16 v0, 0x4000000000000000L
- const-wide/high16 v2, 0x4100000000000000L
- invoke-static {v0, v1, v2, v3}, LTest;->add(JJ)J
- move-result-wide v6
- invoke-virtual {v5, v6, v7}, Ljava/io/PrintStream;->println(J)V
-
- # Adding loop in an attempt to get the jit to process the add method.
- const v8, 1000000
- const v9, 1
- :loop
- if-eqz v8, :exit
- const-wide v0, 0x4000000000040000L
- const-wide v2, 0x4100000000041000L
- invoke-static {v0, v1, v2, v3}, LTest;->add(JJ)J
- move-result-wide v6
- sub-int v8, v8, v9
- goto :loop
-
- :exit
- invoke-virtual {v5, v6, v7}, Ljava/io/PrintStream;->println(J)V
- return-void
-.end method
diff --git a/src/test/smali/packed-switch/PackedSwitch.smali b/src/test/smali/packed-switch/PackedSwitch.smali
deleted file mode 100644
index 30ab926..0000000
--- a/src/test/smali/packed-switch/PackedSwitch.smali
+++ /dev/null
@@ -1,106 +0,0 @@
-# Copyright (c) 2016, 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.
-
-.class public LTest;
-
-.super Ljava/lang/Object;
-
-# Empty packed switch
-.method public static test1(I)I
- .registers 1
- packed-switch v0, :packed_switch_data
- const/4 v0, 0x1
- return v0
-
- :packed_switch_data
- .packed-switch 0x0
- .end packed-switch
-.end method
-
-# Empty packed switch after data
-.method public static test2(I)I
- .registers 1
-
- goto :packed_switch
-
- :packed_switch_data
- .packed-switch 0x0
- .end packed-switch
-
- :packed_switch
- packed-switch v0, :packed_switch_data
- const/4 v0, 0x2
- return v0
-.end method
-
-# Packed switch after data
-.method public static test3(I)I
- .registers 1
-
- goto :packed_switch
-
- :case_0
- const/4 v0, 0x3
- goto :return
-
- :packed_switch_data
- .packed-switch 0x0
- :case_0
- :case_1
- .end packed-switch
-
- :packed_switch
- packed-switch v0, :packed_switch_data
- const/4 v0, 0x5
- goto :return
-
- :case_1
- const/4 v0, 0x4
-
- :return
- return v0
-.end method
-
-.method public static main([Ljava/lang/String;)V
- .locals 2
-
- sget-object v0, Ljava/lang/System;->out:Ljava/io/PrintStream;
-
- const/4 v1, 0x0
- invoke-static {v1}, LTest;->test1(I)I
- move-result v1
- invoke-static {v1}, Ljava/lang/Integer;->toString(I)Ljava/lang/String;
- move-result-object v1
- invoke-virtual {v0, v1}, Ljava/io/PrintStream;->print(Ljava/lang/Object;)V
-
- const/4 v1, 0x0
- invoke-static {v1}, LTest;->test2(I)I
- move-result v1
- invoke-static {v1}, Ljava/lang/Integer;->toString(I)Ljava/lang/String;
- move-result-object v1
- invoke-virtual {v0, v1}, Ljava/io/PrintStream;->print(Ljava/lang/Object;)V
-
- const/4 v1, 0x0
- invoke-static {v1}, LTest;->test3(I)I
- move-result v1
- invoke-static {v1}, Ljava/lang/Integer;->toString(I)Ljava/lang/String;
- move-result-object v1
- invoke-virtual {v0, v1}, Ljava/io/PrintStream;->print(Ljava/lang/Object;)V
-
- const/4 v1, 0x1
- invoke-static {v1}, LTest;->test3(I)I
- move-result v1
- invoke-static {v1}, Ljava/lang/Integer;->toString(I)Ljava/lang/String;
- move-result-object v1
- invoke-virtual {v0, v1}, Ljava/io/PrintStream;->print(Ljava/lang/Object;)V
-
- const/4 v1, 0x2
- invoke-static {v1}, LTest;->test3(I)I
- move-result v1
- invoke-static {v1}, Ljava/lang/Integer;->toString(I)Ljava/lang/String;
- move-result-object v1
- invoke-virtual {v0, v1}, Ljava/io/PrintStream;->print(Ljava/lang/Object;)V
-
- return-void
-.end method
diff --git a/src/test/smali/phi-removal-regression/Test.java b/src/test/smali/phi-removal-regression/Test.java
deleted file mode 100644
index 7accd02..0000000
--- a/src/test/smali/phi-removal-regression/Test.java
+++ /dev/null
@@ -1,19 +0,0 @@
-// Copyright (c) 2016, 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.
-
-public class Test {
- boolean returnBoolean() {
- System.out.println("returnBoolean");
- return true;
- }
-
- boolean returnTheOtherBoolean(Test a) {
- System.out.println("returnTheOtherBoolean");
- return a.returnBoolean();
- }
-
- public static void main(String[] args) {
- new TestObject().a(new Test(), 42);
- }
-}
diff --git a/src/test/smali/phi-removal-regression/TestObject.java b/src/test/smali/phi-removal-regression/TestObject.java
deleted file mode 100644
index 8a93611..0000000
--- a/src/test/smali/phi-removal-regression/TestObject.java
+++ /dev/null
@@ -1,9 +0,0 @@
-// Copyright (c) 2016, 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.
-
-public class TestObject {
- public boolean a(Test a, int i) {
- return true;
- }
-}
diff --git a/src/test/smali/phi-removal-regression/TestObject.smali b/src/test/smali/phi-removal-regression/TestObject.smali
deleted file mode 100644
index 66efa4f..0000000
--- a/src/test/smali/phi-removal-regression/TestObject.smali
+++ /dev/null
@@ -1,64 +0,0 @@
-# Copyright (c) 2016, 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.
-
-.class public final LTestObject;
-.super Ljava/lang/Object;
-
-.field final list:Ljava/util/ArrayList;
-.field private final s:Z
-
-.method public constructor <init>()V
- .registers 1
- invoke-direct {p0}, Ljava/lang/Object;-><init>()V
- return-void
-.end method
-
-.method public final a(LTest;I)Z
- .registers 9
- .prologue
- const/4 v2, 0x1
- const/4 v1, 0x0
- invoke-virtual {p1}, LTest;->returnBoolean()Z
- move-result v0
- if-eqz v0, :cond_a
- move v0, v1
- :goto_9
- return v0
- :cond_a
- and-int/lit8 v0, p2, 0x2
- if-nez v0, :cond_14
- iget-boolean v0, p0, LTestObject;->b:Z
- if-eqz v0, :cond_14
- move v0, v2
- goto :goto_9
- :cond_14
- iget-object v0, p0, LTestObject;->list:Ljava/util/ArrayList;
- invoke-virtual {v0}, Ljava/util/ArrayList;->size()I
- move-result v4
- move v3, v1
- :goto_1b
- if-ge v3, v4, :cond_3b
- iget-object v0, p0, LTestObject;->list:Ljava/util/ArrayList;
- invoke-virtual {v0, v3}, Ljava/util/ArrayList;->get(I)Ljava/lang/Object;
- move-result-object v0
- check-cast v0, LTest;
- and-int/lit8 v5, p2, 0x1
- if-eqz v5, :cond_2f
- invoke-virtual {v0}, LTest;->returnBoolean()Z
- move-result v5
- if-nez v5, :cond_37
- :cond_2f
- invoke-virtual {v0, p1}, LTest;->returnTheOtherBoolean(LTest;)Z
- move-result v0
- if-eqz v0, :cond_37
- move v0, v2
- goto :goto_9
- :cond_37
- add-int/lit8 v0, v3, 0x1
- move v3, v0
- goto :goto_1b
- :cond_3b
- move v0, v1
- goto :goto_9
-.end method
diff --git a/src/test/smali/regression/33336471/33336471.smali b/src/test/smali/regression/33336471/33336471.smali
deleted file mode 100644
index 87e9cf6..0000000
--- a/src/test/smali/regression/33336471/33336471.smali
+++ /dev/null
@@ -1,204 +0,0 @@
-# Copyright (c) 2016, 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.
-
-.class public LTest;
-
-.super Ljava/lang/Object;
-
-# This method is not called by the test, and is only for reference of dex code failing on
-# art from Android 5.1.1 with mixed int/float constants.
-# When run dex2oat prints the warning:
-#
-# dex2oat W 7568 7571 art/compiler/dex/vreg_analysis.cc:367]
-# void Test.intAndFloatZeroConstantsNotWorking() op at block 6 has both fp and core/ref uses for
-# same def.
-.method static intAndFloatZeroConstantsNotWorking()V
- .locals 8
-
- const-string v6, "START"
- sget-object v7, Ljava/lang/System;->out:Ljava/io/PrintStream;
- invoke-virtual {v7, v6}, Ljava/io/PrintStream;->println(Ljava/lang/String;)V
-
- const/high16 v0, 0x3f800000 # 1.0
- const/4 v1, 0x00 # 0 / 0.0
- const/4 v3, 2
- move v4, v1
-
- :label_a
- invoke-virtual {v7, v4}, Ljava/io/PrintStream;->println(I)V
- invoke-virtual {v7, v3}, Ljava/io/PrintStream;->println(I)V
- if-ge v4, v3, :label_b
- const-string v6, "LOOP"
- invoke-virtual {v7, v6}, Ljava/io/PrintStream;->println(Ljava/lang/Object;)V
- add-int/lit8 v4, v4, 0x01 # 1
- goto :label_a
-
- :label_b
- const/4 v5, 0x01
- new-array v5, v5, [F
- const/4 v3, 0x00
- aget v4, v5, v3
- cmpl-float v1, v4, v1
- if-nez v1, :label_c
- cmpl-float v0, v4, v0
- if-eqz v0, :label_c
- const-string v0, "DONE"
- invoke-virtual {v7, v0}, Ljava/io/PrintStream;->println(Ljava/lang/String;)V
- goto :label_d
-
- :label_c
- const-string v0, "FLOAT COMPARISON FAILED"
- invoke-virtual {v7, v0}, Ljava/io/PrintStream;->println(Ljava/lang/String;)V
-
- :label_d
- return-void
-.end method
-
-.method static intAndFloatZeroConstants()V
- .locals 8
-
- const-string v6, "START"
- sget-object v7, Ljava/lang/System;->out:Ljava/io/PrintStream;
- invoke-virtual {v7, v6}, Ljava/io/PrintStream;->println(Ljava/lang/String;)V
-
- const/high16 v0, 0x3f800000 # 1.0
- const/4 v1, 0x00 # 0
- const/4 v2, 0x00 # 0.0
- const/4 v3, 2
- move v4, v1
-
- :label_a
- invoke-virtual {v7, v4}, Ljava/io/PrintStream;->println(I)V
- invoke-virtual {v7, v3}, Ljava/io/PrintStream;->println(I)V
- if-ge v4, v3, :label_b
- const-string v6, "LOOP"
- invoke-virtual {v7, v6}, Ljava/io/PrintStream;->println(Ljava/lang/Object;)V
- add-int/lit8 v4, v4, 0x01 # 1
- goto :label_a
-
- :label_b
- const/4 v5, 0x01
- new-array v5, v5, [F
- const/4 v3, 0x00
- aget v4, v5, v3
- cmpl-float v1, v4, v2
- if-nez v1, :label_c
- cmpl-float v0, v4, v0
- if-eqz v0, :label_c
- const-string v0, "DONE"
- invoke-virtual {v7, v0}, Ljava/io/PrintStream;->println(Ljava/lang/String;)V
- goto :label_d
-
- :label_c
- const-string v0, "FLOAT COMPARISON FAILED"
- invoke-virtual {v7, v0}, Ljava/io/PrintStream;->println(Ljava/lang/String;)V
-
- :label_d
- return-void
-.end method
-
-# This method is not called by the test, and is only for reference of dex code failing on
-# art from Android 5.1.1 with mixed long/double constants.
-# This code does actually work, but dex2oat still prints the warning:
-#
-# dex2oat W 7568 7571 art/compiler/dex/vreg_analysis.cc:367]
-# void Test.longAndDoubleZeroConstantsNotWorking() op at block 6 has both fp and core/ref uses
-#for same def.
-.method static longAndDoubleZeroConstantsNotWorking()V
- .locals 14
-
- const-string v12, "START"
- sget-object v13, Ljava/lang/System;->out:Ljava/io/PrintStream;
- invoke-virtual {v13, v12}, Ljava/io/PrintStream;->println(Ljava/lang/String;)V
-
- const-wide/high16 v0, 0x3f80000000000000L # 1.0 0->0 1->2 2->4 3->6 4->8 5->10+11 6->12 7->13
- const-wide/16 v2, 0x00L # 0 / 0.0
- const-wide/16 v6, 2
- move-wide v8, v2
-
- :label_a
- invoke-virtual {v13, v8, v9}, Ljava/io/PrintStream;->println(J)V
- invoke-virtual {v13, v6, v7}, Ljava/io/PrintStream;->println(J)V
- cmp-long v12, v8, v6
- if-gez v12, :label_b
- const-string v12, "LOOP"
- invoke-virtual {v13, v12}, Ljava/io/PrintStream;->println(Ljava/lang/Object;)V
- const-wide/16 v10, 0x01
- add-long v8, v8, v10
- goto :label_a
-
- :label_b
- const/4 v10, 0x01
- new-array v10, v10, [D
- const/4 v6, 0x00
- aget-wide v8, v10, v6
- cmpl-double v2, v8, v2
- if-nez v2, :label_c
- cmpl-double v0, v8, v0
- if-eqz v0, :label_c
- const-string v0, "DONE"
- invoke-virtual {v13, v0}, Ljava/io/PrintStream;->println(Ljava/lang/String;)V
- goto :label_d
-
- :label_c
- const-string v0, "FLOAT COMPARISON FAILED"
- invoke-virtual {v13, v0}, Ljava/io/PrintStream;->println(Ljava/lang/String;)V
-
- :label_d
- return-void
-.end method
-
-.method static longAndDoubleZeroConstants()V
- .locals 14
-
- const-string v12, "START"
- sget-object v13, Ljava/lang/System;->out:Ljava/io/PrintStream;
- invoke-virtual {v13, v12}, Ljava/io/PrintStream;->println(Ljava/lang/String;)V
-
- const-wide/high16 v0, 0x3f80000000000000L
- const-wide/16 v2, 0x00L # 0
- const-wide/16 v4, 0x00L # 0.0
- const-wide/16 v6, 2
- move-wide v8, v2
-
- :label_a
- invoke-virtual {v13, v8, v9}, Ljava/io/PrintStream;->println(J)V
- invoke-virtual {v13, v6, v7}, Ljava/io/PrintStream;->println(J)V
- cmp-long v12, v8, v6
- if-gez v12, :label_b
- const-string v12, "LOOP"
- invoke-virtual {v13, v12}, Ljava/io/PrintStream;->println(Ljava/lang/Object;)V
- const-wide/16 v10, 0x01
- add-long v8, v8, v10
- goto :label_a
-
- :label_b
- const/4 v10, 0x01
- new-array v10, v10, [D
- const/4 v6, 0x00
- aget-wide v8, v10, v6
- cmpl-double v2, v8, v4
- if-nez v2, :label_c
- cmpl-double v0, v8, v0
- if-eqz v0, :label_c
- const-string v0, "DONE"
- invoke-virtual {v13, v0}, Ljava/io/PrintStream;->println(Ljava/lang/String;)V
- goto :label_d
-
- :label_c
- const-string v0, "DOUBLE COMPARISON FAILED"
- invoke-virtual {v13, v0}, Ljava/io/PrintStream;->println(Ljava/lang/String;)V
-
- :label_d
- return-void
-.end method
-
-.method public static main([Ljava/lang/String;)V
- .locals 0
-
- invoke-static {}, LTest;->intAndFloatZeroConstants()V
- invoke-static {}, LTest;->longAndDoubleZeroConstants()V
-
- return-void
-.end method
diff --git a/src/test/smali/regression/33846227/33846227.smali b/src/test/smali/regression/33846227/33846227.smali
deleted file mode 100644
index c8553a7..0000000
--- a/src/test/smali/regression/33846227/33846227.smali
+++ /dev/null
@@ -1,36 +0,0 @@
-# Copyright (c) 2016, 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.
-
-# Before Lollipop (Art 5.1.1) Art/Dalvik failed on verification if an empty sparse switch payload
-# was the last instruction in a method. This was originally reported as 19827056, and fixed in
-# https://android.googlesource.com/platform/art/+/9ccd151d0d27a729f88af9d00285afe4d147981a
-
-# This test is copied from
-# https://android.googlesource.com/platform/art/+/9ccd151d0d27a729f88af9d00285afe4d147981a
-.class public LTest;
-.super Ljava/lang/Object;
-
-.method public static run()V
- .registers 2
-
- :start
- const v0, 0
-
- sparse-switch v0, :SparseSwitch
-
- return-void
-
- :SparseSwitch
- .sparse-switch
- .end sparse-switch
-
-.end method
-
-.method public static main([Ljava/lang/String;)V
- .locals 0
-
- invoke-static {}, LTest;->run()V
-
- return-void
-.end method
diff --git a/src/test/smali/regression/78072750/78072750.smali b/src/test/smali/regression/78072750/78072750.smali
deleted file mode 100644
index ecf4668..0000000
--- a/src/test/smali/regression/78072750/78072750.smali
+++ /dev/null
@@ -1,22386 +0,0 @@
-# Copyright (c) 2018, 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.
-
-.class Landroid/databinding/DataBinderMapperImpl;
-.super Landroid/databinding/DataBinderMapper;
-.source "DataBinderMapperImpl.java"
-
-
-# annotations
-.annotation system Ldalvik/annotation/MemberClasses;
- value = {
- Landroid/databinding/DataBinderMapperImpl$InnerBrLookup;
- }
-.end annotation
-
-
-# direct methods
-.method public constructor <init>()V
- .registers 1
-
- .line 5
- invoke-direct {p0}, Landroid/databinding/DataBinderMapper;-><init>()V
-
- .line 6
- return-void
-.end method
-
-
-# virtual methods
-.method public convertBrIdToString(I)Ljava/lang/String;
- .registers 3
- .param p1, "id" # I
-
- .line 4474
- if-ltz p1, :cond_d
-
- sget-object v0, Landroid/databinding/DataBinderMapperImpl$InnerBrLookup;->sKeys:[Ljava/lang/String;
-
- array-length v0, v0
-
- if-lt p1, v0, :cond_8
-
- goto :goto_d
-
- .line 4477
- :cond_8
- sget-object v0, Landroid/databinding/DataBinderMapperImpl$InnerBrLookup;->sKeys:[Ljava/lang/String;
-
- aget-object v0, v0, p1
-
- return-object v0
-
- .line 4475
- :cond_d
- :goto_d
- const/4 v0, 0x0
-
- return-object v0
-.end method
-
-.method public getDataBinder(Landroid/databinding/DataBindingComponent;Landroid/view/View;I)Landroid/databinding/ViewDataBinding;
- .registers 8
- .param p1, "bindingComponent" # Landroid/databinding/DataBindingComponent;
- .param p2, "view" # Landroid/view/View;
- .param p3, "layoutId" # I
-
- .line 9
- packed-switch p3, :pswitch_data_3bcc
-
- packed-switch p3, :pswitch_data_3bd6
-
- packed-switch p3, :pswitch_data_3be2
-
- packed-switch p3, :pswitch_data_3bea
-
- packed-switch p3, :pswitch_data_3bf8
-
- packed-switch p3, :pswitch_data_3c00
-
- packed-switch p3, :pswitch_data_3c10
-
- packed-switch p3, :pswitch_data_3c18
-
- packed-switch p3, :pswitch_data_3c22
-
- packed-switch p3, :pswitch_data_3c2a
-
- packed-switch p3, :pswitch_data_3c32
-
- packed-switch p3, :pswitch_data_3c40
-
- packed-switch p3, :pswitch_data_3c4c
-
- packed-switch p3, :pswitch_data_3c58
-
- packed-switch p3, :pswitch_data_3c62
-
- packed-switch p3, :pswitch_data_3c72
-
- packed-switch p3, :pswitch_data_3c8a
-
- packed-switch p3, :pswitch_data_3cd2
-
- packed-switch p3, :pswitch_data_3cde
-
- packed-switch p3, :pswitch_data_3d2a
-
- packed-switch p3, :pswitch_data_3d92
-
- packed-switch p3, :pswitch_data_3d9a
-
- packed-switch p3, :pswitch_data_3da8
-
- packed-switch p3, :pswitch_data_3db2
-
- packed-switch p3, :pswitch_data_3dd2
-
- packed-switch p3, :pswitch_data_3de6
-
- packed-switch p3, :pswitch_data_3df2
-
- packed-switch p3, :pswitch_data_3dfc
-
- packed-switch p3, :pswitch_data_3e08
-
- packed-switch p3, :pswitch_data_3e12
-
- packed-switch p3, :pswitch_data_3e20
-
- packed-switch p3, :pswitch_data_3e2a
-
- packed-switch p3, :pswitch_data_3e34
-
- packed-switch p3, :pswitch_data_3e42
-
- packed-switch p3, :pswitch_data_3e52
-
- sparse-switch p3, :sswitch_data_3e5c
-
- .line 2648
- const/4 v0, 0x0
-
- return-object v0
-
- .line 1779
- :sswitch_6e
- invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
- move-result-object v0
-
- .line 1780
- .local v0, "tag":Ljava/lang/Object;
- if-nez v0, :cond_7d
-
- new-instance v1, Ljava/lang/RuntimeException;
-
- const-string v2, "view must have a tag"
-
- invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 1781
- :cond_7d
- const-string v1, "layout/toolbar_onboarding_progress_layout_0"
-
- invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v1
-
- if-eqz v1, :cond_8b
-
- .line 1782
- new-instance v1, Lcom/classdojo/android/databinding/ToolbarOnboardingProgressLayoutBinding;
-
- invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/ToolbarOnboardingProgressLayoutBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
- return-object v1
-
- .line 1784
- :cond_8b
- new-instance v1, Ljava/lang/IllegalArgumentException;
-
- new-instance v2, Ljava/lang/StringBuilder;
-
- invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
- const-string v3, "The tag for toolbar_onboarding_progress_layout is invalid. Received: "
-
- invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
- move-result-object v2
-
- invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 825
- .end local v0 # "tag":Ljava/lang/Object;
- :sswitch_a2
- invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
- move-result-object v0
-
- .line 826
- .restart local v0 # "tag":Ljava/lang/Object;
- if-nez v0, :cond_b1
-
- new-instance v1, Ljava/lang/RuntimeException;
-
- const-string v2, "view must have a tag"
-
- invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 827
- :cond_b1
- const-string v1, "layout/toolbar_gray_layout_0"
-
- invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v1
-
- if-eqz v1, :cond_bf
-
- .line 828
- new-instance v1, Lcom/classdojo/android/databinding/ToolbarGrayLayoutBinding;
-
- invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/ToolbarGrayLayoutBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
- return-object v1
-
- .line 830
- :cond_bf
- new-instance v1, Ljava/lang/IllegalArgumentException;
-
- new-instance v2, Ljava/lang/StringBuilder;
-
- invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
- const-string v3, "The tag for toolbar_gray_layout is invalid. Received: "
-
- invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
- move-result-object v2
-
- invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 942
- .end local v0 # "tag":Ljava/lang/Object;
- :sswitch_d6
- invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
- move-result-object v0
-
- .line 943
- .restart local v0 # "tag":Ljava/lang/Object;
- if-nez v0, :cond_e5
-
- new-instance v1, Ljava/lang/RuntimeException;
-
- const-string v2, "view must have a tag"
-
- invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 944
- :cond_e5
- const-string v1, "layout/toolbar_base_layout_0"
-
- invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v1
-
- if-eqz v1, :cond_f3
-
- .line 945
- new-instance v1, Lcom/classdojo/android/databinding/ToolbarBaseLayoutBinding;
-
- invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/ToolbarBaseLayoutBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
- return-object v1
-
- .line 947
- :cond_f3
- new-instance v1, Ljava/lang/IllegalArgumentException;
-
- new-instance v2, Ljava/lang/StringBuilder;
-
- invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
- const-string v3, "The tag for toolbar_base_layout is invalid. Received: "
-
- invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
- move-result-object v2
-
- invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 2259
- .end local v0 # "tag":Ljava/lang/Object;
- :sswitch_10a
- invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
- move-result-object v0
-
- .line 2260
- .restart local v0 # "tag":Ljava/lang/Object;
- if-nez v0, :cond_119
-
- new-instance v1, Ljava/lang/RuntimeException;
-
- const-string v2, "view must have a tag"
-
- invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 2261
- :cond_119
- const-string v1, "layout/thumbnail_item_0"
-
- invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v1
-
- if-eqz v1, :cond_127
-
- .line 2262
- new-instance v1, Lcom/classdojo/components/databinding/ThumbnailItemBinding;
-
- invoke-direct {v1, p1, p2}, Lcom/classdojo/components/databinding/ThumbnailItemBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
- return-object v1
-
- .line 2264
- :cond_127
- new-instance v1, Ljava/lang/IllegalArgumentException;
-
- new-instance v2, Ljava/lang/StringBuilder;
-
- invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
- const-string v3, "The tag for thumbnail_item is invalid. Received: "
-
- invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
- move-result-object v2
-
- invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 1368
- .end local v0 # "tag":Ljava/lang/Object;
- :sswitch_13e
- invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
- move-result-object v0
-
- .line 1369
- .restart local v0 # "tag":Ljava/lang/Object;
- if-nez v0, :cond_14d
-
- new-instance v1, Ljava/lang/RuntimeException;
-
- const-string v2, "view must have a tag"
-
- invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 1370
- :cond_14d
- const-string v1, "layout/story_post_created_0"
-
- invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v1
-
- if-eqz v1, :cond_15b
-
- .line 1371
- new-instance v1, Lcom/classdojo/android/databinding/StoryPostCreatedBinding;
-
- invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/StoryPostCreatedBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
- return-object v1
-
- .line 1373
- :cond_15b
- new-instance v1, Ljava/lang/IllegalArgumentException;
-
- new-instance v2, Ljava/lang/StringBuilder;
-
- invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
- const-string v3, "The tag for story_post_created is invalid. Received: "
-
- invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
- move-result-object v2
-
- invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 315
- .end local v0 # "tag":Ljava/lang/Object;
- :sswitch_172
- invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
- move-result-object v0
-
- .line 316
- .restart local v0 # "tag":Ljava/lang/Object;
- if-nez v0, :cond_181
-
- new-instance v1, Ljava/lang/RuntimeException;
-
- const-string v2, "view must have a tag"
-
- invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 317
- :cond_181
- const-string v1, "layout/setup_skills_list_item_0"
-
- invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v1
-
- if-eqz v1, :cond_18f
-
- .line 318
- new-instance v1, Lcom/classdojo/android/databinding/SetupSkillsListItemBinding;
-
- invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/SetupSkillsListItemBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
- return-object v1
-
- .line 320
- :cond_18f
- new-instance v1, Ljava/lang/IllegalArgumentException;
-
- new-instance v2, Ljava/lang/StringBuilder;
-
- invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
- const-string v3, "The tag for setup_skills_list_item is invalid. Received: "
-
- invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
- move-result-object v2
-
- invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 1518
- .end local v0 # "tag":Ljava/lang/Object;
- :sswitch_1a6
- invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
- move-result-object v0
-
- .line 1519
- .restart local v0 # "tag":Ljava/lang/Object;
- if-nez v0, :cond_1b5
-
- new-instance v1, Ljava/lang/RuntimeException;
-
- const-string v2, "view must have a tag"
-
- invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 1520
- :cond_1b5
- const-string v1, "layout/popup_item_copy_0"
-
- invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v1
-
- if-eqz v1, :cond_1c3
-
- .line 1521
- new-instance v1, Lcom/classdojo/android/databinding/PopupItemCopyBinding;
-
- invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/PopupItemCopyBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
- return-object v1
-
- .line 1523
- :cond_1c3
- new-instance v1, Ljava/lang/IllegalArgumentException;
-
- new-instance v2, Ljava/lang/StringBuilder;
-
- invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
- const-string v3, "The tag for popup_item_copy is invalid. Received: "
-
- invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
- move-result-object v2
-
- invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 585
- .end local v0 # "tag":Ljava/lang/Object;
- :sswitch_1da
- invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
- move-result-object v0
-
- .line 586
- .restart local v0 # "tag":Ljava/lang/Object;
- if-nez v0, :cond_1e9
-
- new-instance v1, Ljava/lang/RuntimeException;
-
- const-string v2, "view must have a tag"
-
- invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 587
- :cond_1e9
- const-string v1, "layout/placeholder_offline_with_refresh_0"
-
- invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v1
-
- if-eqz v1, :cond_1f7
-
- .line 588
- new-instance v1, Lcom/classdojo/android/databinding/PlaceholderOfflineWithRefreshBinding;
-
- invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/PlaceholderOfflineWithRefreshBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
- return-object v1
-
- .line 590
- :cond_1f7
- new-instance v1, Ljava/lang/IllegalArgumentException;
-
- new-instance v2, Ljava/lang/StringBuilder;
-
- invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
- const-string v3, "The tag for placeholder_offline_with_refresh is invalid. Received: "
-
- invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
- move-result-object v2
-
- invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 795
- .end local v0 # "tag":Ljava/lang/Object;
- :sswitch_20e
- invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
- move-result-object v0
-
- .line 796
- .restart local v0 # "tag":Ljava/lang/Object;
- if-nez v0, :cond_21d
-
- new-instance v1, Ljava/lang/RuntimeException;
-
- const-string v2, "view must have a tag"
-
- invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 797
- :cond_21d
- const-string v1, "layout/placeholder_empty_with_refresh_0"
-
- invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v1
-
- if-eqz v1, :cond_22b
-
- .line 798
- new-instance v1, Lcom/classdojo/android/databinding/PlaceholderEmptyWithRefreshBinding;
-
- invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/PlaceholderEmptyWithRefreshBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
- return-object v1
-
- .line 800
- :cond_22b
- new-instance v1, Ljava/lang/IllegalArgumentException;
-
- new-instance v2, Ljava/lang/StringBuilder;
-
- invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
- const-string v3, "The tag for placeholder_empty_with_refresh is invalid. Received: "
-
- invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
- move-result-object v2
-
- invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 1473
- .end local v0 # "tag":Ljava/lang/Object;
- :sswitch_242
- invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
- move-result-object v0
-
- .line 1474
- .restart local v0 # "tag":Ljava/lang/Object;
- if-nez v0, :cond_251
-
- new-instance v1, Ljava/lang/RuntimeException;
-
- const-string v2, "view must have a tag"
-
- invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 1475
- :cond_251
- const-string v1, "layout/item_teacher_add_coteacher_0"
-
- invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v1
-
- if-eqz v1, :cond_25f
-
- .line 1476
- new-instance v1, Lcom/classdojo/android/databinding/ItemTeacherAddCoteacherBinding;
-
- invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/ItemTeacherAddCoteacherBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
- return-object v1
-
- .line 1478
- :cond_25f
- new-instance v1, Ljava/lang/IllegalArgumentException;
-
- new-instance v2, Ljava/lang/StringBuilder;
-
- invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
- const-string v3, "The tag for item_teacher_add_coteacher is invalid. Received: "
-
- invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
- move-result-object v2
-
- invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 1680
- .end local v0 # "tag":Ljava/lang/Object;
- :sswitch_276
- invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
- move-result-object v0
-
- .line 1681
- .restart local v0 # "tag":Ljava/lang/Object;
- if-nez v0, :cond_285
-
- new-instance v1, Ljava/lang/RuntimeException;
-
- const-string v2, "view must have a tag"
-
- invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 1682
- :cond_285
- const-string v1, "layout/item_student_drawing_tool_sticker_0"
-
- invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v1
-
- if-eqz v1, :cond_293
-
- .line 1683
- new-instance v1, Lcom/classdojo/android/databinding/ItemStudentDrawingToolStickerBinding;
-
- invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/ItemStudentDrawingToolStickerBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
- return-object v1
-
- .line 1685
- :cond_293
- new-instance v1, Ljava/lang/IllegalArgumentException;
-
- new-instance v2, Ljava/lang/StringBuilder;
-
- invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
- const-string v3, "The tag for item_student_drawing_tool_sticker is invalid. Received: "
-
- invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
- move-result-object v2
-
- invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 1161
- .end local v0 # "tag":Ljava/lang/Object;
- :sswitch_2aa
- invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
- move-result-object v0
-
- .line 1162
- .restart local v0 # "tag":Ljava/lang/Object;
- if-nez v0, :cond_2b9
-
- new-instance v1, Ljava/lang/RuntimeException;
-
- const-string v2, "view must have a tag"
-
- invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 1163
- :cond_2b9
- const-string v1, "layout/item_parent_list_new_message_invite_0"
-
- invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v1
-
- if-eqz v1, :cond_2c7
-
- .line 1164
- new-instance v1, Lcom/classdojo/android/databinding/ItemParentListNewMessageInviteBinding;
-
- invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/ItemParentListNewMessageInviteBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
- return-object v1
-
- .line 1166
- :cond_2c7
- new-instance v1, Ljava/lang/IllegalArgumentException;
-
- new-instance v2, Ljava/lang/StringBuilder;
-
- invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
- const-string v3, "The tag for item_parent_list_new_message_invite is invalid. Received: "
-
- invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
- move-result-object v2
-
- invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 1044
- .end local v0 # "tag":Ljava/lang/Object;
- :sswitch_2de
- invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
- move-result-object v0
-
- .line 1045
- .restart local v0 # "tag":Ljava/lang/Object;
- if-nez v0, :cond_2ed
-
- new-instance v1, Ljava/lang/RuntimeException;
-
- const-string v2, "view must have a tag"
-
- invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 1046
- :cond_2ed
- const-string v1, "layout/item_image_resource_0"
-
- invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v1
-
- if-eqz v1, :cond_2fb
-
- .line 1047
- new-instance v1, Lcom/classdojo/android/databinding/ItemImageResourceBinding;
-
- invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/ItemImageResourceBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
- return-object v1
-
- .line 1049
- :cond_2fb
- new-instance v1, Ljava/lang/IllegalArgumentException;
-
- new-instance v2, Ljava/lang/StringBuilder;
-
- invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
- const-string v3, "The tag for item_image_resource is invalid. Received: "
-
- invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
- move-result-object v2
-
- invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 1863
- .end local v0 # "tag":Ljava/lang/Object;
- :sswitch_312
- invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
- move-result-object v0
-
- .line 1864
- .restart local v0 # "tag":Ljava/lang/Object;
- if-nez v0, :cond_321
-
- new-instance v1, Ljava/lang/RuntimeException;
-
- const-string v2, "view must have a tag"
-
- invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 1865
- :cond_321
- const-string v1, "layout/item_add_student_0"
-
- invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v1
-
- if-eqz v1, :cond_32f
-
- .line 1866
- new-instance v1, Lcom/classdojo/android/databinding/ItemAddStudentBinding;
-
- invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/ItemAddStudentBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
- return-object v1
-
- .line 1868
- :cond_32f
- new-instance v1, Ljava/lang/IllegalArgumentException;
-
- new-instance v2, Ljava/lang/StringBuilder;
-
- invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
- const-string v3, "The tag for item_add_student is invalid. Received: "
-
- invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
- move-result-object v2
-
- invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 1287
- .end local v0 # "tag":Ljava/lang/Object;
- :sswitch_346
- invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
- move-result-object v0
-
- .line 1288
- .restart local v0 # "tag":Ljava/lang/Object;
- if-nez v0, :cond_355
-
- new-instance v1, Ljava/lang/RuntimeException;
-
- const-string v2, "view must have a tag"
-
- invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 1289
- :cond_355
- const-string v1, "layout/fragment_tab_class_wall_item_student_avatar_0"
-
- invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v1
-
- if-eqz v1, :cond_363
-
- .line 1290
- new-instance v1, Lcom/classdojo/android/databinding/FragmentTabClassWallItemStudentAvatarBinding;
-
- invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/FragmentTabClassWallItemStudentAvatarBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
- return-object v1
-
- .line 1292
- :cond_363
- new-instance v1, Ljava/lang/IllegalArgumentException;
-
- new-instance v2, Ljava/lang/StringBuilder;
-
- invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
- const-string v3, "The tag for fragment_tab_class_wall_item_student_avatar is invalid. Received: "
-
- invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
- move-result-object v2
-
- invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 351
- .end local v0 # "tag":Ljava/lang/Object;
- :sswitch_37a
- invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
- move-result-object v0
-
- .line 352
- .restart local v0 # "tag":Ljava/lang/Object;
- if-nez v0, :cond_389
-
- new-instance v1, Ljava/lang/RuntimeException;
-
- const-string v2, "view must have a tag"
-
- invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 353
- :cond_389
- const-string v1, "layout/fragment_tab_class_wall_generic_button_icon_text_item_0"
-
- invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v1
-
- if-eqz v1, :cond_397
-
- .line 354
- new-instance v1, Lcom/classdojo/android/databinding/FragmentTabClassWallGenericButtonIconTextItemBinding;
-
- invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/FragmentTabClassWallGenericButtonIconTextItemBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
- return-object v1
-
- .line 356
- :cond_397
- new-instance v1, Ljava/lang/IllegalArgumentException;
-
- new-instance v2, Ljava/lang/StringBuilder;
-
- invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
- const-string v3, "The tag for fragment_tab_class_wall_generic_button_icon_text_item is invalid. Received: "
-
- invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
- move-result-object v2
-
- invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 648
- .end local v0 # "tag":Ljava/lang/Object;
- :sswitch_3ae
- invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
- move-result-object v0
-
- .line 649
- .restart local v0 # "tag":Ljava/lang/Object;
- if-nez v0, :cond_3bd
-
- new-instance v1, Ljava/lang/RuntimeException;
-
- const-string v2, "view must have a tag"
-
- invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 650
- :cond_3bd
- const-string v1, "layout/fragment_school_detail_0"
-
- invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v1
-
- if-eqz v1, :cond_3cb
-
- .line 651
- new-instance v1, Lcom/classdojo/android/databinding/FragmentSchoolDetailBinding;
-
- invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/FragmentSchoolDetailBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
- return-object v1
-
- .line 653
- :cond_3cb
- new-instance v1, Ljava/lang/IllegalArgumentException;
-
- new-instance v2, Ljava/lang/StringBuilder;
-
- invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
- const-string v3, "The tag for fragment_school_detail is invalid. Received: "
-
- invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
- move-result-object v2
-
- invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 1815
- .end local v0 # "tag":Ljava/lang/Object;
- :sswitch_3e2
- invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
- move-result-object v0
-
- .line 1816
- .restart local v0 # "tag":Ljava/lang/Object;
- if-nez v0, :cond_3f1
-
- new-instance v1, Ljava/lang/RuntimeException;
-
- const-string v2, "view must have a tag"
-
- invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 1817
- :cond_3f1
- const-string v1, "layout/fragment_group_students_0"
-
- invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v1
-
- if-eqz v1, :cond_3ff
-
- .line 1818
- new-instance v1, Lcom/classdojo/android/databinding/FragmentGroupStudentsBinding;
-
- invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/FragmentGroupStudentsBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
- return-object v1
-
- .line 1820
- :cond_3ff
- new-instance v1, Ljava/lang/IllegalArgumentException;
-
- new-instance v2, Ljava/lang/StringBuilder;
-
- invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
- const-string v3, "The tag for fragment_group_students is invalid. Received: "
-
- invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
- move-result-object v2
-
- invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 567
- .end local v0 # "tag":Ljava/lang/Object;
- :sswitch_416
- invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
- move-result-object v0
-
- .line 568
- .restart local v0 # "tag":Ljava/lang/Object;
- if-nez v0, :cond_425
-
- new-instance v1, Ljava/lang/RuntimeException;
-
- const-string v2, "view must have a tag"
-
- invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 569
- :cond_425
- const-string v1, "layout/fragment_account_switcher_0"
-
- invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v1
-
- if-eqz v1, :cond_433
-
- .line 570
- new-instance v1, Lcom/classdojo/android/databinding/FragmentAccountSwitcherBinding;
-
- invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/FragmentAccountSwitcherBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
- return-object v1
-
- .line 572
- :cond_433
- new-instance v1, Ljava/lang/IllegalArgumentException;
-
- new-instance v2, Ljava/lang/StringBuilder;
-
- invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
- const-string v3, "The tag for fragment_account_switcher is invalid. Received: "
-
- invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
- move-result-object v2
-
- invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 978
- .end local v0 # "tag":Ljava/lang/Object;
- :sswitch_44a
- invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
- move-result-object v0
-
- .line 979
- .restart local v0 # "tag":Ljava/lang/Object;
- if-nez v0, :cond_459
-
- new-instance v1, Ljava/lang/RuntimeException;
-
- const-string v2, "view must have a tag"
-
- invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 980
- :cond_459
- const-string v1, "layout/debug_feature_list_item_0"
-
- invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v1
-
- if-eqz v1, :cond_467
-
- .line 981
- new-instance v1, Lcom/classdojo/android/databinding/DebugFeatureListItemBinding;
-
- invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/DebugFeatureListItemBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
- return-object v1
-
- .line 983
- :cond_467
- new-instance v1, Ljava/lang/IllegalArgumentException;
-
- new-instance v2, Ljava/lang/StringBuilder;
-
- invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
- const-string v3, "The tag for debug_feature_list_item is invalid. Received: "
-
- invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
- move-result-object v2
-
- invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 1644
- .end local v0 # "tag":Ljava/lang/Object;
- :sswitch_47e
- invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
- move-result-object v0
-
- .line 1645
- .restart local v0 # "tag":Ljava/lang/Object;
- if-nez v0, :cond_48d
-
- new-instance v1, Ljava/lang/RuntimeException;
-
- const-string v2, "view must have a tag"
-
- invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 1646
- :cond_48d
- const-string v1, "layout/chat_empty_broadcasts_view_0"
-
- invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v1
-
- if-eqz v1, :cond_49b
-
- .line 1647
- new-instance v1, Lcom/classdojo/android/databinding/ChatEmptyBroadcastsViewBinding;
-
- invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/ChatEmptyBroadcastsViewBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
- return-object v1
-
- .line 1649
- :cond_49b
- new-instance v1, Ljava/lang/IllegalArgumentException;
-
- new-instance v2, Ljava/lang/StringBuilder;
-
- invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
- const-string v3, "The tag for chat_empty_broadcasts_view is invalid. Received: "
-
- invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
- move-result-object v2
-
- invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 1425
- .end local v0 # "tag":Ljava/lang/Object;
- :sswitch_4b2
- invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
- move-result-object v0
-
- .line 1426
- .restart local v0 # "tag":Ljava/lang/Object;
- if-nez v0, :cond_4c1
-
- new-instance v1, Ljava/lang/RuntimeException;
-
- const-string v2, "view must have a tag"
-
- invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 1427
- :cond_4c1
- const-string v1, "layout-sw600dp-land/activity_student_capture_home_0"
-
- invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v1
-
- if-eqz v1, :cond_4cf
-
- .line 1428
- new-instance v1, Lcom/classdojo/android/databinding/ActivityStudentCaptureHomeBindingSw600dpLandImpl;
-
- invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/ActivityStudentCaptureHomeBindingSw600dpLandImpl;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
- return-object v1
-
- .line 1430
- :cond_4cf
- const-string v1, "layout/activity_student_capture_home_0"
-
- invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v1
-
- if-eqz v1, :cond_4dd
-
- .line 1431
- new-instance v1, Lcom/classdojo/android/databinding/ActivityStudentCaptureHomeBindingImpl;
-
- invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/ActivityStudentCaptureHomeBindingImpl;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
- return-object v1
-
- .line 1433
- :cond_4dd
- new-instance v1, Ljava/lang/IllegalArgumentException;
-
- new-instance v2, Ljava/lang/StringBuilder;
-
- invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
- const-string v3, "The tag for activity_student_capture_home is invalid. Received: "
-
- invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
- move-result-object v2
-
- invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 2349
- .end local v0 # "tag":Ljava/lang/Object;
- :sswitch_4f4
- invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
- move-result-object v0
-
- .line 2350
- .restart local v0 # "tag":Ljava/lang/Object;
- if-nez v0, :cond_503
-
- new-instance v1, Ljava/lang/RuntimeException;
-
- const-string v2, "view must have a tag"
-
- invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 2351
- :cond_503
- const-string v1, "layout/activity_school_0"
-
- invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v1
-
- if-eqz v1, :cond_511
-
- .line 2352
- new-instance v1, Lcom/classdojo/android/databinding/ActivitySchoolBinding;
-
- invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/ActivitySchoolBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
- return-object v1
-
- .line 2354
- :cond_511
- new-instance v1, Ljava/lang/IllegalArgumentException;
-
- new-instance v2, Ljava/lang/StringBuilder;
-
- invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
- const-string v3, "The tag for activity_school is invalid. Received: "
-
- invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
- move-result-object v2
-
- invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 495
- .end local v0 # "tag":Ljava/lang/Object;
- :sswitch_528
- invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
- move-result-object v0
-
- .line 496
- .restart local v0 # "tag":Ljava/lang/Object;
- if-nez v0, :cond_537
-
- new-instance v1, Ljava/lang/RuntimeException;
-
- const-string v2, "view must have a tag"
-
- invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 497
- :cond_537
- const-string v1, "layout/activity_qrcode_scan_0"
-
- invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v1
-
- if-eqz v1, :cond_545
-
- .line 498
- new-instance v1, Lcom/classdojo/android/databinding/ActivityQrcodeScanBinding;
-
- invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/ActivityQrcodeScanBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
- return-object v1
-
- .line 500
- :cond_545
- new-instance v1, Ljava/lang/IllegalArgumentException;
-
- new-instance v2, Ljava/lang/StringBuilder;
-
- invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
- const-string v3, "The tag for activity_qrcode_scan is invalid. Received: "
-
- invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
- move-result-object v2
-
- invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 333
- .end local v0 # "tag":Ljava/lang/Object;
- :sswitch_55c
- invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
- move-result-object v0
-
- .line 334
- .restart local v0 # "tag":Ljava/lang/Object;
- if-nez v0, :cond_56b
-
- new-instance v1, Ljava/lang/RuntimeException;
-
- const-string v2, "view must have a tag"
-
- invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 335
- :cond_56b
- const-string v1, "layout/activity_passwordless_login_0"
-
- invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v1
-
- if-eqz v1, :cond_579
-
- .line 336
- new-instance v1, Lcom/classdojo/android/databinding/ActivityPasswordlessLoginBinding;
-
- invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/ActivityPasswordlessLoginBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
- return-object v1
-
- .line 338
- :cond_579
- new-instance v1, Ljava/lang/IllegalArgumentException;
-
- new-instance v2, Ljava/lang/StringBuilder;
-
- invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
- const-string v3, "The tag for activity_passwordless_login is invalid. Received: "
-
- invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
- move-result-object v2
-
- invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 960
- .end local v0 # "tag":Ljava/lang/Object;
- :sswitch_590
- invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
- move-result-object v0
-
- .line 961
- .restart local v0 # "tag":Ljava/lang/Object;
- if-nez v0, :cond_59f
-
- new-instance v1, Ljava/lang/RuntimeException;
-
- const-string v2, "view must have a tag"
-
- invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 962
- :cond_59f
- const-string v1, "layout/activity_parent_setup_student_account_0"
-
- invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v1
-
- if-eqz v1, :cond_5ad
-
- .line 963
- new-instance v1, Lcom/classdojo/android/databinding/ActivityParentSetupStudentAccountBinding;
-
- invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/ActivityParentSetupStudentAccountBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
- return-object v1
-
- .line 965
- :cond_5ad
- new-instance v1, Ljava/lang/IllegalArgumentException;
-
- new-instance v2, Ljava/lang/StringBuilder;
-
- invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
- const-string v3, "The tag for activity_parent_setup_student_account is invalid. Received: "
-
- invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
- move-result-object v2
-
- invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 1572
- .end local v0 # "tag":Ljava/lang/Object;
- :sswitch_5c4
- invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
- move-result-object v0
-
- .line 1573
- .restart local v0 # "tag":Ljava/lang/Object;
- if-nez v0, :cond_5d3
-
- new-instance v1, Ljava/lang/RuntimeException;
-
- const-string v2, "view must have a tag"
-
- invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 1574
- :cond_5d3
- const-string v1, "layout/activity_parent_home_0"
-
- invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v1
-
- if-eqz v1, :cond_5e1
-
- .line 1575
- new-instance v1, Lcom/classdojo/android/databinding/ActivityParentHomeBinding;
-
- invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/ActivityParentHomeBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
- return-object v1
-
- .line 1577
- :cond_5e1
- new-instance v1, Ljava/lang/IllegalArgumentException;
-
- new-instance v2, Ljava/lang/StringBuilder;
-
- invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
- const-string v3, "The tag for activity_parent_home is invalid. Received: "
-
- invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
- move-result-object v2
-
- invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 1635
- .end local v0 # "tag":Ljava/lang/Object;
- :sswitch_5f8
- invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
- move-result-object v0
-
- .line 1636
- .restart local v0 # "tag":Ljava/lang/Object;
- if-nez v0, :cond_607
-
- new-instance v1, Ljava/lang/RuntimeException;
-
- const-string v2, "view must have a tag"
-
- invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 1637
- :cond_607
- const-string v1, "layout/activity_parent_checklist_0"
-
- invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v1
-
- if-eqz v1, :cond_615
-
- .line 1638
- new-instance v1, Lcom/classdojo/android/databinding/ActivityParentChecklistBinding;
-
- invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/ActivityParentChecklistBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
- return-object v1
-
- .line 1640
- :cond_615
- new-instance v1, Ljava/lang/IllegalArgumentException;
-
- new-instance v2, Ljava/lang/StringBuilder;
-
- invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
- const-string v3, "The tag for activity_parent_checklist is invalid. Received: "
-
- invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
- move-result-object v2
-
- invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 2520
- .end local v0 # "tag":Ljava/lang/Object;
- :sswitch_62c
- invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
- move-result-object v0
-
- .line 2521
- .restart local v0 # "tag":Ljava/lang/Object;
- if-nez v0, :cond_63b
-
- new-instance v1, Ljava/lang/RuntimeException;
-
- const-string v2, "view must have a tag"
-
- invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 2522
- :cond_63b
- const-string v1, "layout/activity_email_verified_0"
-
- invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v1
-
- if-eqz v1, :cond_649
-
- .line 2523
- new-instance v1, Lcom/classdojo/android/databinding/ActivityEmailVerifiedBinding;
-
- invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/ActivityEmailVerifiedBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
- return-object v1
-
- .line 2525
- :cond_649
- new-instance v1, Ljava/lang/IllegalArgumentException;
-
- new-instance v2, Ljava/lang/StringBuilder;
-
- invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
- const-string v3, "The tag for activity_email_verified is invalid. Received: "
-
- invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
- move-result-object v2
-
- invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 1797
- .end local v0 # "tag":Ljava/lang/Object;
- :sswitch_660
- invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
- move-result-object v0
-
- .line 1798
- .restart local v0 # "tag":Ljava/lang/Object;
- if-nez v0, :cond_66f
-
- new-instance v1, Ljava/lang/RuntimeException;
-
- const-string v2, "view must have a tag"
-
- invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 1799
- :cond_66f
- const-string v1, "layout/activity_class_link_0"
-
- invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v1
-
- if-eqz v1, :cond_67d
-
- .line 1800
- new-instance v1, Lcom/classdojo/android/databinding/ActivityClassLinkBinding;
-
- invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/ActivityClassLinkBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
- return-object v1
-
- .line 1802
- :cond_67d
- new-instance v1, Ljava/lang/IllegalArgumentException;
-
- new-instance v2, Ljava/lang/StringBuilder;
-
- invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
- const-string v3, "The tag for activity_class_link is invalid. Received: "
-
- invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
- move-result-object v2
-
- invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 180
- .end local v0 # "tag":Ljava/lang/Object;
- :sswitch_694
- invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
- move-result-object v0
-
- .line 181
- .restart local v0 # "tag":Ljava/lang/Object;
- if-nez v0, :cond_6a3
-
- new-instance v1, Ljava/lang/RuntimeException;
-
- const-string v2, "view must have a tag"
-
- invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 182
- :cond_6a3
- const-string v1, "layout/activity_add_edit_class_0"
-
- invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v1
-
- if-eqz v1, :cond_6b1
-
- .line 183
- new-instance v1, Lcom/classdojo/android/databinding/ActivityAddEditClassBinding;
-
- invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/ActivityAddEditClassBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
- return-object v1
-
- .line 185
- :cond_6b1
- new-instance v1, Ljava/lang/IllegalArgumentException;
-
- new-instance v2, Ljava/lang/StringBuilder;
-
- invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
- const-string v3, "The tag for activity_add_edit_class is invalid. Received: "
-
- invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
- move-result-object v2
-
- invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 1617
- .end local v0 # "tag":Ljava/lang/Object;
- :pswitch_6c8
- invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
- move-result-object v0
-
- .line 1618
- .restart local v0 # "tag":Ljava/lang/Object;
- if-nez v0, :cond_6d7
-
- new-instance v1, Ljava/lang/RuntimeException;
-
- const-string v2, "view must have a tag"
-
- invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 1619
- :cond_6d7
- const-string v1, "layout/webview_fragment_0"
-
- invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v1
-
- if-eqz v1, :cond_6e5
-
- .line 1620
- new-instance v1, Lcom/classdojo/android/databinding/WebviewFragmentBinding;
-
- invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/WebviewFragmentBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
- return-object v1
-
- .line 1622
- :cond_6e5
- new-instance v1, Ljava/lang/IllegalArgumentException;
-
- new-instance v2, Ljava/lang/StringBuilder;
-
- invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
- const-string v3, "The tag for webview_fragment is invalid. Received: "
-
- invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
- move-result-object v2
-
- invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 30
- .end local v0 # "tag":Ljava/lang/Object;
- :pswitch_6fc
- invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
- move-result-object v0
-
- .line 31
- .restart local v0 # "tag":Ljava/lang/Object;
- if-nez v0, :cond_70b
-
- new-instance v1, Ljava/lang/RuntimeException;
-
- const-string v2, "view must have a tag"
-
- invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 32
- :cond_70b
- const-string v1, "layout/view_teacher_student_connection_text_codes_instructions_header_0"
-
- invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v1
-
- if-eqz v1, :cond_719
-
- .line 33
- new-instance v1, Lcom/classdojo/android/databinding/ViewTeacherStudentConnectionTextCodesInstructionsHeaderBinding;
-
- invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/ViewTeacherStudentConnectionTextCodesInstructionsHeaderBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
- return-object v1
-
- .line 35
- :cond_719
- new-instance v1, Ljava/lang/IllegalArgumentException;
-
- new-instance v2, Ljava/lang/StringBuilder;
-
- invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
- const-string v3, "The tag for view_teacher_student_connection_text_codes_instructions_header is invalid. Received: "
-
- invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
- move-result-object v2
-
- invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 1743
- .end local v0 # "tag":Ljava/lang/Object;
- :pswitch_730
- invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
- move-result-object v0
-
- .line 1744
- .restart local v0 # "tag":Ljava/lang/Object;
- if-nez v0, :cond_73f
-
- new-instance v1, Ljava/lang/RuntimeException;
-
- const-string v2, "view must have a tag"
-
- invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 1745
- :cond_73f
- const-string v1, "layout/view_students_moved_tooltip_0"
-
- invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v1
-
- if-eqz v1, :cond_74d
-
- .line 1746
- new-instance v1, Lcom/classdojo/android/databinding/ViewStudentsMovedTooltipBinding;
-
- invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/ViewStudentsMovedTooltipBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
- return-object v1
-
- .line 1748
- :cond_74d
- new-instance v1, Ljava/lang/IllegalArgumentException;
-
- new-instance v2, Ljava/lang/StringBuilder;
-
- invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
- const-string v3, "The tag for view_students_moved_tooltip is invalid. Received: "
-
- invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
- move-result-object v2
-
- invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 2250
- .end local v0 # "tag":Ljava/lang/Object;
- :pswitch_764
- invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
- move-result-object v0
-
- .line 2251
- .restart local v0 # "tag":Ljava/lang/Object;
- if-nez v0, :cond_773
-
- new-instance v1, Ljava/lang/RuntimeException;
-
- const-string v2, "view must have a tag"
-
- invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 2252
- :cond_773
- const-string v1, "layout/view_parent_pending_connection_0"
-
- invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v1
-
- if-eqz v1, :cond_781
-
- .line 2253
- new-instance v1, Lcom/classdojo/android/databinding/ViewParentPendingConnectionBinding;
-
- invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/ViewParentPendingConnectionBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
- return-object v1
-
- .line 2255
- :cond_781
- new-instance v1, Ljava/lang/IllegalArgumentException;
-
- new-instance v2, Ljava/lang/StringBuilder;
-
- invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
- const-string v3, "The tag for view_parent_pending_connection is invalid. Received: "
-
- invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
- move-result-object v2
-
- invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 2049
- .end local v0 # "tag":Ljava/lang/Object;
- :pswitch_798
- invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
- move-result-object v0
-
- .line 2050
- .restart local v0 # "tag":Ljava/lang/Object;
- if-nez v0, :cond_7a7
-
- new-instance v1, Ljava/lang/RuntimeException;
-
- const-string v2, "view must have a tag"
-
- invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 2051
- :cond_7a7
- const-string v1, "layout/view_list_header_limit_width_0"
-
- invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v1
-
- if-eqz v1, :cond_7b5
-
- .line 2052
- new-instance v1, Lcom/classdojo/android/databinding/ViewListHeaderLimitWidthBinding;
-
- invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/ViewListHeaderLimitWidthBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
- return-object v1
-
- .line 2054
- :cond_7b5
- new-instance v1, Ljava/lang/IllegalArgumentException;
-
- new-instance v2, Ljava/lang/StringBuilder;
-
- invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
- const-string v3, "The tag for view_list_header_limit_width is invalid. Received: "
-
- invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
- move-result-object v2
-
- invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 207
- .end local v0 # "tag":Ljava/lang/Object;
- :pswitch_7cc
- invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
- move-result-object v0
-
- .line 208
- .restart local v0 # "tag":Ljava/lang/Object;
- if-nez v0, :cond_7db
-
- new-instance v1, Ljava/lang/RuntimeException;
-
- const-string v2, "view must have a tag"
-
- invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 209
- :cond_7db
- const-string v1, "layout/view_list_header_0"
-
- invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v1
-
- if-eqz v1, :cond_7e9
-
- .line 210
- new-instance v1, Lcom/classdojo/android/databinding/ViewListHeaderBinding;
-
- invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/ViewListHeaderBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
- return-object v1
-
- .line 212
- :cond_7e9
- new-instance v1, Ljava/lang/IllegalArgumentException;
-
- new-instance v2, Ljava/lang/StringBuilder;
-
- invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
- const-string v3, "The tag for view_list_header is invalid. Received: "
-
- invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
- move-result-object v2
-
- invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 1599
- .end local v0 # "tag":Ljava/lang/Object;
- :pswitch_800
- invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
- move-result-object v0
-
- .line 1600
- .restart local v0 # "tag":Ljava/lang/Object;
- if-nez v0, :cond_80f
-
- new-instance v1, Ljava/lang/RuntimeException;
-
- const-string v2, "view must have a tag"
-
- invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 1601
- :cond_80f
- const-string v1, "layout/view_drawing_tool_sticker_drawer_0"
-
- invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v1
-
- if-eqz v1, :cond_81d
-
- .line 1602
- new-instance v1, Lcom/classdojo/android/databinding/ViewDrawingToolStickerDrawerBinding;
-
- invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/ViewDrawingToolStickerDrawerBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
- return-object v1
-
- .line 1604
- :cond_81d
- new-instance v1, Ljava/lang/IllegalArgumentException;
-
- new-instance v2, Ljava/lang/StringBuilder;
-
- invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
- const-string v3, "The tag for view_drawing_tool_sticker_drawer is invalid. Received: "
-
- invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
- move-result-object v2
-
- invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 2538
- .end local v0 # "tag":Ljava/lang/Object;
- :pswitch_834
- invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
- move-result-object v0
-
- .line 2539
- .restart local v0 # "tag":Ljava/lang/Object;
- if-nez v0, :cond_843
-
- new-instance v1, Ljava/lang/RuntimeException;
-
- const-string v2, "view must have a tag"
-
- invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 2540
- :cond_843
- const-string v1, "layout/view_drawing_tool_discard_0"
-
- invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v1
-
- if-eqz v1, :cond_851
-
- .line 2541
- new-instance v1, Lcom/classdojo/android/databinding/ViewDrawingToolDiscardBinding;
-
- invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/ViewDrawingToolDiscardBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
- return-object v1
-
- .line 2543
- :cond_851
- new-instance v1, Ljava/lang/IllegalArgumentException;
-
- new-instance v2, Ljava/lang/StringBuilder;
-
- invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
- const-string v3, "The tag for view_drawing_tool_discard is invalid. Received: "
-
- invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
- move-result-object v2
-
- invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 2610
- .end local v0 # "tag":Ljava/lang/Object;
- :pswitch_868
- invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
- move-result-object v0
-
- .line 2611
- .restart local v0 # "tag":Ljava/lang/Object;
- if-nez v0, :cond_877
-
- new-instance v1, Ljava/lang/RuntimeException;
-
- const-string v2, "view must have a tag"
-
- invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 2612
- :cond_877
- const-string v1, "layout/view_drawer_item_0"
-
- invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v1
-
- if-eqz v1, :cond_885
-
- .line 2613
- new-instance v1, Lcom/classdojo/android/databinding/ViewDrawerItemBindingImpl;
-
- invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/ViewDrawerItemBindingImpl;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
- return-object v1
-
- .line 2615
- :cond_885
- const-string v1, "layout-sw600dp-land/view_drawer_item_0"
-
- invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v1
-
- if-eqz v1, :cond_893
-
- .line 2616
- new-instance v1, Lcom/classdojo/android/databinding/ViewDrawerItemBindingSw600dpLandImpl;
-
- invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/ViewDrawerItemBindingSw600dpLandImpl;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
- return-object v1
-
- .line 2618
- :cond_893
- new-instance v1, Ljava/lang/IllegalArgumentException;
-
- new-instance v2, Ljava/lang/StringBuilder;
-
- invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
- const-string v3, "The tag for view_drawer_item is invalid. Received: "
-
- invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
- move-result-object v2
-
- invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 2286
- .end local v0 # "tag":Ljava/lang/Object;
- :pswitch_8aa
- invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
- move-result-object v0
-
- .line 2287
- .restart local v0 # "tag":Ljava/lang/Object;
- if-nez v0, :cond_8b9
-
- new-instance v1, Ljava/lang/RuntimeException;
-
- const-string v2, "view must have a tag"
-
- invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 2288
- :cond_8b9
- const-string v1, "layout/toolbar_text_post_layout_0"
-
- invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v1
-
- if-eqz v1, :cond_8c7
-
- .line 2289
- new-instance v1, Lcom/classdojo/android/databinding/ToolbarTextPostLayoutBinding;
-
- invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/ToolbarTextPostLayoutBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
- return-object v1
-
- .line 2291
- :cond_8c7
- new-instance v1, Ljava/lang/IllegalArgumentException;
-
- new-instance v2, Ljava/lang/StringBuilder;
-
- invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
- const-string v3, "The tag for toolbar_text_post_layout is invalid. Received: "
-
- invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
- move-result-object v2
-
- invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 441
- .end local v0 # "tag":Ljava/lang/Object;
- :pswitch_8de
- invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
- move-result-object v0
-
- .line 442
- .restart local v0 # "tag":Ljava/lang/Object;
- if-nez v0, :cond_8ed
-
- new-instance v1, Ljava/lang/RuntimeException;
-
- const-string v2, "view must have a tag"
-
- invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 443
- :cond_8ed
- const-string v1, "layout/toolbar_text_layout_0"
-
- invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v1
-
- if-eqz v1, :cond_8fb
-
- .line 444
- new-instance v1, Lcom/classdojo/android/databinding/ToolbarTextLayoutBinding;
-
- invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/ToolbarTextLayoutBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
- return-object v1
-
- .line 446
- :cond_8fb
- new-instance v1, Ljava/lang/IllegalArgumentException;
-
- new-instance v2, Ljava/lang/StringBuilder;
-
- invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
- const-string v3, "The tag for toolbar_text_layout is invalid. Received: "
-
- invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
- move-result-object v2
-
- invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 1824
- .end local v0 # "tag":Ljava/lang/Object;
- :pswitch_912
- invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
- move-result-object v0
-
- .line 1825
- .restart local v0 # "tag":Ljava/lang/Object;
- if-nez v0, :cond_921
-
- new-instance v1, Ljava/lang/RuntimeException;
-
- const-string v2, "view must have a tag"
-
- invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 1826
- :cond_921
- const-string v1, "layout/toolbar_teacher_onboarding_0"
-
- invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v1
-
- if-eqz v1, :cond_92f
-
- .line 1827
- new-instance v1, Lcom/classdojo/android/databinding/ToolbarTeacherOnboardingBinding;
-
- invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/ToolbarTeacherOnboardingBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
- return-object v1
-
- .line 1829
- :cond_92f
- new-instance v1, Ljava/lang/IllegalArgumentException;
-
- new-instance v2, Ljava/lang/StringBuilder;
-
- invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
- const-string v3, "The tag for toolbar_teacher_onboarding is invalid. Received: "
-
- invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
- move-result-object v2
-
- invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 924
- .end local v0 # "tag":Ljava/lang/Object;
- :pswitch_946
- invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
- move-result-object v0
-
- .line 925
- .restart local v0 # "tag":Ljava/lang/Object;
- if-nez v0, :cond_955
-
- new-instance v1, Ljava/lang/RuntimeException;
-
- const-string v2, "view must have a tag"
-
- invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 926
- :cond_955
- const-string v1, "layout/toolbar_teacher_home_0"
-
- invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v1
-
- if-eqz v1, :cond_963
-
- .line 927
- new-instance v1, Lcom/classdojo/android/databinding/ToolbarTeacherHomeBinding;
-
- invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/ToolbarTeacherHomeBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
- return-object v1
-
- .line 929
- :cond_963
- new-instance v1, Ljava/lang/IllegalArgumentException;
-
- new-instance v2, Ljava/lang/StringBuilder;
-
- invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
- const-string v3, "The tag for toolbar_teacher_home is invalid. Received: "
-
- invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
- move-result-object v2
-
- invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 1377
- .end local v0 # "tag":Ljava/lang/Object;
- :pswitch_97a
- invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
- move-result-object v0
-
- .line 1378
- .restart local v0 # "tag":Ljava/lang/Object;
- if-nez v0, :cond_989
-
- new-instance v1, Ljava/lang/RuntimeException;
-
- const-string v2, "view must have a tag"
-
- invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 1379
- :cond_989
- const-string v1, "layout/toolbar_teacher_approval_0"
-
- invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v1
-
- if-eqz v1, :cond_997
-
- .line 1380
- new-instance v1, Lcom/classdojo/android/databinding/ToolbarTeacherApprovalBinding;
-
- invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/ToolbarTeacherApprovalBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
- return-object v1
-
- .line 1382
- :cond_997
- new-instance v1, Ljava/lang/IllegalArgumentException;
-
- new-instance v2, Ljava/lang/StringBuilder;
-
- invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
- const-string v3, "The tag for toolbar_teacher_approval is invalid. Received: "
-
- invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
- move-result-object v2
-
- invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 1698
- .end local v0 # "tag":Ljava/lang/Object;
- :pswitch_9ae
- invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
- move-result-object v0
-
- .line 1699
- .restart local v0 # "tag":Ljava/lang/Object;
- if-nez v0, :cond_9bd
-
- new-instance v1, Ljava/lang/RuntimeException;
-
- const-string v2, "view must have a tag"
-
- invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 1700
- :cond_9bd
- const-string v1, "layout/student_login_list_not_my_class_item_0"
-
- invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v1
-
- if-eqz v1, :cond_9cb
-
- .line 1701
- new-instance v1, Lcom/classdojo/android/databinding/StudentLoginListNotMyClassItemBinding;
-
- invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/StudentLoginListNotMyClassItemBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
- return-object v1
-
- .line 1703
- :cond_9cb
- new-instance v1, Ljava/lang/IllegalArgumentException;
-
- new-instance v2, Ljava/lang/StringBuilder;
-
- invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
- const-string v3, "The tag for student_login_list_not_my_class_item is invalid. Received: "
-
- invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
- move-result-object v2
-
- invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 1842
- .end local v0 # "tag":Ljava/lang/Object;
- :pswitch_9e2
- invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
- move-result-object v0
-
- .line 1843
- .restart local v0 # "tag":Ljava/lang/Object;
- if-nez v0, :cond_9f1
-
- new-instance v1, Ljava/lang/RuntimeException;
-
- const-string v2, "view must have a tag"
-
- invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 1844
- :cond_9f1
- const-string v1, "layout-sw600dp/student_login_list_item_0"
-
- invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v1
-
- if-eqz v1, :cond_9ff
-
- .line 1845
- new-instance v1, Lcom/classdojo/android/databinding/StudentLoginListItemBindingSw600dpImpl;
-
- invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/StudentLoginListItemBindingSw600dpImpl;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
- return-object v1
-
- .line 1847
- :cond_9ff
- const-string v1, "layout/student_login_list_item_0"
-
- invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v1
-
- if-eqz v1, :cond_a0d
-
- .line 1848
- new-instance v1, Lcom/classdojo/android/databinding/StudentLoginListItemBindingImpl;
-
- invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/StudentLoginListItemBindingImpl;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
- return-object v1
-
- .line 1850
- :cond_a0d
- new-instance v1, Ljava/lang/IllegalArgumentException;
-
- new-instance v2, Ljava/lang/StringBuilder;
-
- invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
- const-string v3, "The tag for student_login_list_item is invalid. Received: "
-
- invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
- move-result-object v2
-
- invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 2124
- .end local v0 # "tag":Ljava/lang/Object;
- :pswitch_a24
- invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
- move-result-object v0
-
- .line 2125
- .restart local v0 # "tag":Ljava/lang/Object;
- if-nez v0, :cond_a33
-
- new-instance v1, Ljava/lang/RuntimeException;
-
- const-string v2, "view must have a tag"
-
- invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 2126
- :cond_a33
- const-string v1, "layout/student_connections_individual_codes_invite_section_0"
-
- invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v1
-
- if-eqz v1, :cond_a41
-
- .line 2127
- new-instance v1, Lcom/classdojo/android/databinding/StudentConnectionsIndividualCodesInviteSectionBinding;
-
- invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/StudentConnectionsIndividualCodesInviteSectionBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
- return-object v1
-
- .line 2129
- :cond_a41
- new-instance v1, Ljava/lang/IllegalArgumentException;
-
- new-instance v2, Ljava/lang/StringBuilder;
-
- invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
- const-string v3, "The tag for student_connections_individual_codes_invite_section is invalid. Received: "
-
- invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
- move-result-object v2
-
- invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 1224
- .end local v0 # "tag":Ljava/lang/Object;
- :pswitch_a58
- invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
- move-result-object v0
-
- .line 1225
- .restart local v0 # "tag":Ljava/lang/Object;
- if-nez v0, :cond_a67
-
- new-instance v1, Ljava/lang/RuntimeException;
-
- const-string v2, "view must have a tag"
-
- invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 1226
- :cond_a67
- const-string v1, "layout/parent_connections_single_code_invite_section_0"
-
- invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v1
-
- if-eqz v1, :cond_a75
-
- .line 1227
- new-instance v1, Lcom/classdojo/android/databinding/ParentConnectionsSingleCodeInviteSectionBinding;
-
- invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/ParentConnectionsSingleCodeInviteSectionBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
- return-object v1
-
- .line 1229
- :cond_a75
- new-instance v1, Ljava/lang/IllegalArgumentException;
-
- new-instance v2, Ljava/lang/StringBuilder;
-
- invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
- const-string v3, "The tag for parent_connections_single_code_invite_section is invalid. Received: "
-
- invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
- move-result-object v2
-
- invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 1833
- .end local v0 # "tag":Ljava/lang/Object;
- :pswitch_a8c
- invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
- move-result-object v0
-
- .line 1834
- .restart local v0 # "tag":Ljava/lang/Object;
- if-nez v0, :cond_a9b
-
- new-instance v1, Ljava/lang/RuntimeException;
-
- const-string v2, "view must have a tag"
-
- invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 1835
- :cond_a9b
- const-string v1, "layout/parent_connections_individual_codes_invite_section_0"
-
- invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v1
-
- if-eqz v1, :cond_aa9
-
- .line 1836
- new-instance v1, Lcom/classdojo/android/databinding/ParentConnectionsIndividualCodesInviteSectionBinding;
-
- invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/ParentConnectionsIndividualCodesInviteSectionBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
- return-object v1
-
- .line 1838
- :cond_aa9
- new-instance v1, Ljava/lang/IllegalArgumentException;
-
- new-instance v2, Ljava/lang/StringBuilder;
-
- invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
- const-string v3, "The tag for parent_connections_individual_codes_invite_section is invalid. Received: "
-
- invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
- move-result-object v2
-
- invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 216
- .end local v0 # "tag":Ljava/lang/Object;
- :pswitch_ac0
- invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
- move-result-object v0
-
- .line 217
- .restart local v0 # "tag":Ljava/lang/Object;
- if-nez v0, :cond_acf
-
- new-instance v1, Ljava/lang/RuntimeException;
-
- const-string v2, "view must have a tag"
-
- invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 218
- :cond_acf
- const-string v1, "layout/parent_checklist_success_overlay_0"
-
- invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v1
-
- if-eqz v1, :cond_add
-
- .line 219
- new-instance v1, Lcom/classdojo/android/databinding/ParentChecklistSuccessOverlayBinding;
-
- invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/ParentChecklistSuccessOverlayBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
- return-object v1
-
- .line 221
- :cond_add
- new-instance v1, Ljava/lang/IllegalArgumentException;
-
- new-instance v2, Ljava/lang/StringBuilder;
-
- invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
- const-string v3, "The tag for parent_checklist_success_overlay is invalid. Received: "
-
- invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
- move-result-object v2
-
- invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 1890
- .end local v0 # "tag":Ljava/lang/Object;
- :pswitch_af4
- invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
- move-result-object v0
-
- .line 1891
- .restart local v0 # "tag":Ljava/lang/Object;
- if-nez v0, :cond_b03
-
- new-instance v1, Ljava/lang/RuntimeException;
-
- const-string v2, "view must have a tag"
-
- invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 1892
- :cond_b03
- const-string v1, "layout/layout_student_list_empty_0"
-
- invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v1
-
- if-eqz v1, :cond_b11
-
- .line 1893
- new-instance v1, Lcom/classdojo/android/databinding/LayoutStudentListEmptyBinding;
-
- invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/LayoutStudentListEmptyBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
- return-object v1
-
- .line 1895
- :cond_b11
- new-instance v1, Ljava/lang/IllegalArgumentException;
-
- new-instance v2, Ljava/lang/StringBuilder;
-
- invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
- const-string v3, "The tag for layout_student_list_empty is invalid. Received: "
-
- invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
- move-result-object v2
-
- invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 2214
- .end local v0 # "tag":Ljava/lang/Object;
- :pswitch_b28
- invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
- move-result-object v0
-
- .line 2215
- .restart local v0 # "tag":Ljava/lang/Object;
- if-nez v0, :cond_b37
-
- new-instance v1, Ljava/lang/RuntimeException;
-
- const-string v2, "view must have a tag"
-
- invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 2216
- :cond_b37
- const-string v1, "layout/layout_student_connections_list_0"
-
- invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v1
-
- if-eqz v1, :cond_b45
-
- .line 2217
- new-instance v1, Lcom/classdojo/android/databinding/LayoutStudentConnectionsListBinding;
-
- invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/LayoutStudentConnectionsListBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
- return-object v1
-
- .line 2219
- :cond_b45
- new-instance v1, Ljava/lang/IllegalArgumentException;
-
- new-instance v2, Ljava/lang/StringBuilder;
-
- invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
- const-string v3, "The tag for layout_student_connections_list is invalid. Received: "
-
- invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
- move-result-object v2
-
- invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 1395
- .end local v0 # "tag":Ljava/lang/Object;
- :pswitch_b5c
- invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
- move-result-object v0
-
- .line 1396
- .restart local v0 # "tag":Ljava/lang/Object;
- if-nez v0, :cond_b6b
-
- new-instance v1, Ljava/lang/RuntimeException;
-
- const-string v2, "view must have a tag"
-
- invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 1397
- :cond_b6b
- const-string v1, "layout/layout_student_connections_invite_0"
-
- invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v1
-
- if-eqz v1, :cond_b79
-
- .line 1398
- new-instance v1, Lcom/classdojo/android/databinding/LayoutStudentConnectionsInviteBinding;
-
- invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/LayoutStudentConnectionsInviteBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
- return-object v1
-
- .line 1400
- :cond_b79
- new-instance v1, Ljava/lang/IllegalArgumentException;
-
- new-instance v2, Ljava/lang/StringBuilder;
-
- invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
- const-string v3, "The tag for layout_student_connections_invite is invalid. Received: "
-
- invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
- move-result-object v2
-
- invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 1170
- .end local v0 # "tag":Ljava/lang/Object;
- :pswitch_b90
- invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
- move-result-object v0
-
- .line 1171
- .restart local v0 # "tag":Ljava/lang/Object;
- if-nez v0, :cond_b9f
-
- new-instance v1, Ljava/lang/RuntimeException;
-
- const-string v2, "view must have a tag"
-
- invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 1172
- :cond_b9f
- const-string v1, "layout/layout_student_connections_initial_0"
-
- invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v1
-
- if-eqz v1, :cond_bad
-
- .line 1173
- new-instance v1, Lcom/classdojo/android/databinding/LayoutStudentConnectionsInitialBinding;
-
- invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/LayoutStudentConnectionsInitialBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
- return-object v1
-
- .line 1175
- :cond_bad
- new-instance v1, Ljava/lang/IllegalArgumentException;
-
- new-instance v2, Ljava/lang/StringBuilder;
-
- invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
- const-string v3, "The tag for layout_student_connections_initial is invalid. Received: "
-
- invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
- move-result-object v2
-
- invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 2358
- .end local v0 # "tag":Ljava/lang/Object;
- :pswitch_bc4
- invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
- move-result-object v0
-
- .line 2359
- .restart local v0 # "tag":Ljava/lang/Object;
- if-nez v0, :cond_bd3
-
- new-instance v1, Ljava/lang/RuntimeException;
-
- const-string v2, "view must have a tag"
-
- invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 2360
- :cond_bd3
- const-string v1, "layout/layout_progress_footer_0"
-
- invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v1
-
- if-eqz v1, :cond_be1
-
- .line 2361
- new-instance v1, Lcom/classdojo/android/databinding/LayoutProgressFooterBinding;
-
- invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/LayoutProgressFooterBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
- return-object v1
-
- .line 2363
- :cond_be1
- new-instance v1, Ljava/lang/IllegalArgumentException;
-
- new-instance v2, Ljava/lang/StringBuilder;
-
- invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
- const-string v3, "The tag for layout_progress_footer is invalid. Received: "
-
- invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
- move-result-object v2
-
- invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 1215
- .end local v0 # "tag":Ljava/lang/Object;
- :pswitch_bf8
- invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
- move-result-object v0
-
- .line 1216
- .restart local v0 # "tag":Ljava/lang/Object;
- if-nez v0, :cond_c07
-
- new-instance v1, Ljava/lang/RuntimeException;
-
- const-string v2, "view must have a tag"
-
- invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 1217
- :cond_c07
- const-string v1, "layout/layout_parent_connections_list_0"
-
- invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v1
-
- if-eqz v1, :cond_c15
-
- .line 1218
- new-instance v1, Lcom/classdojo/android/databinding/LayoutParentConnectionsListBinding;
-
- invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/LayoutParentConnectionsListBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
- return-object v1
-
- .line 1220
- :cond_c15
- new-instance v1, Ljava/lang/IllegalArgumentException;
-
- new-instance v2, Ljava/lang/StringBuilder;
-
- invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
- const-string v3, "The tag for layout_parent_connections_list is invalid. Received: "
-
- invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
- move-result-object v2
-
- invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 468
- .end local v0 # "tag":Ljava/lang/Object;
- :pswitch_c2c
- invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
- move-result-object v0
-
- .line 469
- .restart local v0 # "tag":Ljava/lang/Object;
- if-nez v0, :cond_c3b
-
- new-instance v1, Ljava/lang/RuntimeException;
-
- const-string v2, "view must have a tag"
-
- invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 470
- :cond_c3b
- const-string v1, "layout/layout_parent_connections_invite_0"
-
- invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v1
-
- if-eqz v1, :cond_c49
-
- .line 471
- new-instance v1, Lcom/classdojo/android/databinding/LayoutParentConnectionsInviteBinding;
-
- invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/LayoutParentConnectionsInviteBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
- return-object v1
-
- .line 473
- :cond_c49
- new-instance v1, Ljava/lang/IllegalArgumentException;
-
- new-instance v2, Ljava/lang/StringBuilder;
-
- invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
- const-string v3, "The tag for layout_parent_connections_invite is invalid. Received: "
-
- invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
- move-result-object v2
-
- invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 2640
- .end local v0 # "tag":Ljava/lang/Object;
- :pswitch_c60
- invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
- move-result-object v0
-
- .line 2641
- .restart local v0 # "tag":Ljava/lang/Object;
- if-nez v0, :cond_c6f
-
- new-instance v1, Ljava/lang/RuntimeException;
-
- const-string v2, "view must have a tag"
-
- invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 2642
- :cond_c6f
- const-string v1, "layout/layout_parent_connections_initial_0"
-
- invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v1
-
- if-eqz v1, :cond_c7d
-
- .line 2643
- new-instance v1, Lcom/classdojo/android/databinding/LayoutParentConnectionsInitialBinding;
-
- invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/LayoutParentConnectionsInitialBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
- return-object v1
-
- .line 2645
- :cond_c7d
- new-instance v1, Ljava/lang/IllegalArgumentException;
-
- new-instance v2, Ljava/lang/StringBuilder;
-
- invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
- const-string v3, "The tag for layout_parent_connections_initial is invalid. Received: "
-
- invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
- move-result-object v2
-
- invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 2178
- .end local v0 # "tag":Ljava/lang/Object;
- :pswitch_c94
- invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
- move-result-object v0
-
- .line 2179
- .restart local v0 # "tag":Ljava/lang/Object;
- if-nez v0, :cond_ca3
-
- new-instance v1, Ljava/lang/RuntimeException;
-
- const-string v2, "view must have a tag"
-
- invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 2180
- :cond_ca3
- const-string v1, "layout/layout_legacy_video_view_0"
-
- invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v1
-
- if-eqz v1, :cond_cb1
-
- .line 2181
- new-instance v1, Lcom/classdojo/android/databinding/LayoutLegacyVideoViewBinding;
-
- invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/LayoutLegacyVideoViewBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
- return-object v1
-
- .line 2183
- :cond_cb1
- new-instance v1, Ljava/lang/IllegalArgumentException;
-
- new-instance v2, Ljava/lang/StringBuilder;
-
- invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
- const-string v3, "The tag for layout_legacy_video_view is invalid. Received: "
-
- invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
- move-result-object v2
-
- invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 723
- .end local v0 # "tag":Ljava/lang/Object;
- :pswitch_cc8
- invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
- move-result-object v0
-
- .line 724
- .restart local v0 # "tag":Ljava/lang/Object;
- if-nez v0, :cond_cd7
-
- new-instance v1, Ljava/lang/RuntimeException;
-
- const-string v2, "view must have a tag"
-
- invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 725
- :cond_cd7
- const-string v1, "layout/layout_dojo_video_view_0"
-
- invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v1
-
- if-eqz v1, :cond_ce5
-
- .line 726
- new-instance v1, Lcom/classdojo/android/databinding/LayoutDojoVideoViewBinding;
-
- invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/LayoutDojoVideoViewBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
- return-object v1
-
- .line 728
- :cond_ce5
- new-instance v1, Ljava/lang/IllegalArgumentException;
-
- new-instance v2, Ljava/lang/StringBuilder;
-
- invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
- const-string v3, "The tag for layout_dojo_video_view is invalid. Received: "
-
- invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
- move-result-object v2
-
- invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 603
- .end local v0 # "tag":Ljava/lang/Object;
- :pswitch_cfc
- invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
- move-result-object v0
-
- .line 604
- .restart local v0 # "tag":Ljava/lang/Object;
- if-nez v0, :cond_d0b
-
- new-instance v1, Ljava/lang/RuntimeException;
-
- const-string v2, "view must have a tag"
-
- invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 605
- :cond_d0b
- const-string v1, "layout/layout_create_account_splash_page_0"
-
- invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v1
-
- if-eqz v1, :cond_d19
-
- .line 606
- new-instance v1, Lcom/classdojo/android/databinding/LayoutCreateAccountSplashPageBinding;
-
- invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/LayoutCreateAccountSplashPageBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
- return-object v1
-
- .line 608
- :cond_d19
- new-instance v1, Ljava/lang/IllegalArgumentException;
-
- new-instance v2, Ljava/lang/StringBuilder;
-
- invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
- const-string v3, "The tag for layout_create_account_splash_page is invalid. Received: "
-
- invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
- move-result-object v2
-
- invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 1965
- .end local v0 # "tag":Ljava/lang/Object;
- :pswitch_d30
- invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
- move-result-object v0
-
- .line 1966
- .restart local v0 # "tag":Ljava/lang/Object;
- if-nez v0, :cond_d3f
-
- new-instance v1, Ljava/lang/RuntimeException;
-
- const-string v2, "view must have a tag"
-
- invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 1967
- :cond_d3f
- const-string v1, "layout/item_teacher_student_text_code_0"
-
- invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v1
-
- if-eqz v1, :cond_d4d
-
- .line 1968
- new-instance v1, Lcom/classdojo/android/databinding/ItemTeacherStudentTextCodeBinding;
-
- invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/ItemTeacherStudentTextCodeBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
- return-object v1
-
- .line 1970
- :cond_d4d
- new-instance v1, Ljava/lang/IllegalArgumentException;
-
- new-instance v2, Ljava/lang/StringBuilder;
-
- invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
- const-string v3, "The tag for item_teacher_student_text_code is invalid. Received: "
-
- invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
- move-result-object v2
-
- invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 2475
- .end local v0 # "tag":Ljava/lang/Object;
- :pswitch_d64
- invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
- move-result-object v0
-
- .line 2476
- .restart local v0 # "tag":Ljava/lang/Object;
- if-nez v0, :cond_d73
-
- new-instance v1, Ljava/lang/RuntimeException;
-
- const-string v2, "view must have a tag"
-
- invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 2477
- :cond_d73
- const-string v1, "layout/item_parent_checklist_complete_0"
-
- invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v1
-
- if-eqz v1, :cond_d81
-
- .line 2478
- new-instance v1, Lcom/classdojo/android/databinding/ItemParentChecklistCompleteBinding;
-
- invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/ItemParentChecklistCompleteBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
- return-object v1
-
- .line 2480
- :cond_d81
- new-instance v1, Ljava/lang/IllegalArgumentException;
-
- new-instance v2, Ljava/lang/StringBuilder;
-
- invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
- const-string v3, "The tag for item_parent_checklist_complete is invalid. Received: "
-
- invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
- move-result-object v2
-
- invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 1545
- .end local v0 # "tag":Ljava/lang/Object;
- :pswitch_d98
- invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
- move-result-object v0
-
- .line 1546
- .restart local v0 # "tag":Ljava/lang/Object;
- if-nez v0, :cond_da7
-
- new-instance v1, Ljava/lang/RuntimeException;
-
- const-string v2, "view must have a tag"
-
- invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 1547
- :cond_da7
- const-string v1, "layout/item_parent_checklist_0"
-
- invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v1
-
- if-eqz v1, :cond_db5
-
- .line 1548
- new-instance v1, Lcom/classdojo/android/databinding/ItemParentChecklistBinding;
-
- invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/ItemParentChecklistBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
- return-object v1
-
- .line 1550
- :cond_db5
- new-instance v1, Ljava/lang/IllegalArgumentException;
-
- new-instance v2, Ljava/lang/StringBuilder;
-
- invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
- const-string v3, "The tag for item_parent_checklist is invalid. Received: "
-
- invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
- move-result-object v2
-
- invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 714
- .end local v0 # "tag":Ljava/lang/Object;
- :pswitch_dcc
- invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
- move-result-object v0
-
- .line 715
- .restart local v0 # "tag":Ljava/lang/Object;
- if-nez v0, :cond_ddb
-
- new-instance v1, Ljava/lang/RuntimeException;
-
- const-string v2, "view must have a tag"
-
- invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 716
- :cond_ddb
- const-string v1, "layout/item_onboarding_class_code_header_0"
-
- invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v1
-
- if-eqz v1, :cond_de9
-
- .line 717
- new-instance v1, Lcom/classdojo/android/databinding/ItemOnboardingClassCodeHeaderBinding;
-
- invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/ItemOnboardingClassCodeHeaderBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
- return-object v1
-
- .line 719
- :cond_de9
- new-instance v1, Ljava/lang/IllegalArgumentException;
-
- new-instance v2, Ljava/lang/StringBuilder;
-
- invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
- const-string v3, "The tag for item_onboarding_class_code_header is invalid. Received: "
-
- invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
- move-result-object v2
-
- invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 1197
- .end local v0 # "tag":Ljava/lang/Object;
- :pswitch_e00
- invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
- move-result-object v0
-
- .line 1198
- .restart local v0 # "tag":Ljava/lang/Object;
- if-nez v0, :cond_e0f
-
- new-instance v1, Ljava/lang/RuntimeException;
-
- const-string v2, "view must have a tag"
-
- invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 1199
- :cond_e0f
- const-string v1, "layout/item_grid_teacher_title_0"
-
- invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v1
-
- if-eqz v1, :cond_e1d
-
- .line 1200
- new-instance v1, Lcom/classdojo/android/databinding/ItemGridTeacherTitleBinding;
-
- invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/ItemGridTeacherTitleBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
- return-object v1
-
- .line 1202
- :cond_e1d
- new-instance v1, Ljava/lang/IllegalArgumentException;
-
- new-instance v2, Ljava/lang/StringBuilder;
-
- invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
- const-string v3, "The tag for item_grid_teacher_title is invalid. Received: "
-
- invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
- move-result-object v2
-
- invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 2106
- .end local v0 # "tag":Ljava/lang/Object;
- :pswitch_e34
- invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
- move-result-object v0
-
- .line 2107
- .restart local v0 # "tag":Ljava/lang/Object;
- if-nez v0, :cond_e43
-
- new-instance v1, Ljava/lang/RuntimeException;
-
- const-string v2, "view must have a tag"
-
- invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 2108
- :cond_e43
- const-string v1, "layout/item_file_attachment_view_0"
-
- invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v1
-
- if-eqz v1, :cond_e51
-
- .line 2109
- new-instance v1, Lcom/classdojo/android/databinding/ItemFileAttachmentViewBinding;
-
- invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/ItemFileAttachmentViewBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
- return-object v1
-
- .line 2111
- :cond_e51
- new-instance v1, Ljava/lang/IllegalArgumentException;
-
- new-instance v2, Ljava/lang/StringBuilder;
-
- invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
- const-string v3, "The tag for item_file_attachment_view is invalid. Received: "
-
- invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
- move-result-object v2
-
- invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 2502
- .end local v0 # "tag":Ljava/lang/Object;
- :pswitch_e68
- invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
- move-result-object v0
-
- .line 2503
- .restart local v0 # "tag":Ljava/lang/Object;
- if-nez v0, :cond_e77
-
- new-instance v1, Ljava/lang/RuntimeException;
-
- const-string v2, "view must have a tag"
-
- invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 2504
- :cond_e77
- const-string v1, "layout/item_class_code_student_select_0"
-
- invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v1
-
- if-eqz v1, :cond_e85
-
- .line 2505
- new-instance v1, Lcom/classdojo/android/databinding/ItemClassCodeStudentSelectBinding;
-
- invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/ItemClassCodeStudentSelectBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
- return-object v1
-
- .line 2507
- :cond_e85
- new-instance v1, Ljava/lang/IllegalArgumentException;
-
- new-instance v2, Ljava/lang/StringBuilder;
-
- invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
- const-string v3, "The tag for item_class_code_student_select is invalid. Received: "
-
- invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
- move-result-object v2
-
- invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 1770
- .end local v0 # "tag":Ljava/lang/Object;
- :pswitch_e9c
- invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
- move-result-object v0
-
- .line 1771
- .restart local v0 # "tag":Ljava/lang/Object;
- if-nez v0, :cond_eab
-
- new-instance v1, Ljava/lang/RuntimeException;
-
- const-string v2, "view must have a tag"
-
- invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 1772
- :cond_eab
- const-string v1, "layout/item_class_code_header_0"
-
- invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v1
-
- if-eqz v1, :cond_eb9
-
- .line 1773
- new-instance v1, Lcom/classdojo/android/databinding/ItemClassCodeHeaderBinding;
-
- invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/ItemClassCodeHeaderBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
- return-object v1
-
- .line 1775
- :cond_eb9
- new-instance v1, Ljava/lang/IllegalArgumentException;
-
- new-instance v2, Ljava/lang/StringBuilder;
-
- invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
- const-string v3, "The tag for item_class_code_header is invalid. Received: "
-
- invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
- move-result-object v2
-
- invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 1509
- .end local v0 # "tag":Ljava/lang/Object;
- :pswitch_ed0
- invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
- move-result-object v0
-
- .line 1510
- .restart local v0 # "tag":Ljava/lang/Object;
- if-nez v0, :cond_edf
-
- new-instance v1, Ljava/lang/RuntimeException;
-
- const-string v2, "view must have a tag"
-
- invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 1511
- :cond_edf
- const-string v1, "layout/invite_parent_list_item_0"
-
- invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v1
-
- if-eqz v1, :cond_eed
-
- .line 1512
- new-instance v1, Lcom/classdojo/android/databinding/InviteParentListItemBinding;
-
- invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/InviteParentListItemBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
- return-object v1
-
- .line 1514
- :cond_eed
- new-instance v1, Ljava/lang/IllegalArgumentException;
-
- new-instance v2, Ljava/lang/StringBuilder;
-
- invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
- const-string v3, "The tag for invite_parent_list_item is invalid. Received: "
-
- invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
- move-result-object v2
-
- invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 450
- .end local v0 # "tag":Ljava/lang/Object;
- :pswitch_f04
- invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
- move-result-object v0
-
- .line 451
- .restart local v0 # "tag":Ljava/lang/Object;
- if-nez v0, :cond_f13
-
- new-instance v1, Ljava/lang/RuntimeException;
-
- const-string v2, "view must have a tag"
-
- invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 452
- :cond_f13
- const-string v1, "layout/invite_list_item_0"
-
- invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v1
-
- if-eqz v1, :cond_f21
-
- .line 453
- new-instance v1, Lcom/classdojo/android/databinding/InviteListItemBinding;
-
- invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/InviteListItemBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
- return-object v1
-
- .line 455
- :cond_f21
- new-instance v1, Ljava/lang/IllegalArgumentException;
-
- new-instance v2, Ljava/lang/StringBuilder;
-
- invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
- const-string v3, "The tag for invite_list_item is invalid. Received: "
-
- invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
- move-result-object v2
-
- invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 2241
- .end local v0 # "tag":Ljava/lang/Object;
- :pswitch_f38
- invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
- move-result-object v0
-
- .line 2242
- .restart local v0 # "tag":Ljava/lang/Object;
- if-nez v0, :cond_f47
-
- new-instance v1, Ljava/lang/RuntimeException;
-
- const-string v2, "view must have a tag"
-
- invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 2243
- :cond_f47
- const-string v1, "layout/fragment_web_view_0"
-
- invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v1
-
- if-eqz v1, :cond_f55
-
- .line 2244
- new-instance v1, Lcom/classdojo/android/databinding/FragmentWebViewBinding;
-
- invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/FragmentWebViewBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
- return-object v1
-
- .line 2246
- :cond_f55
- new-instance v1, Ljava/lang/IllegalArgumentException;
-
- new-instance v2, Ljava/lang/StringBuilder;
-
- invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
- const-string v3, "The tag for fragment_web_view is invalid. Received: "
-
- invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
- move-result-object v2
-
- invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 2574
- .end local v0 # "tag":Ljava/lang/Object;
- :pswitch_f6c
- invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
- move-result-object v0
-
- .line 2575
- .restart local v0 # "tag":Ljava/lang/Object;
- if-nez v0, :cond_f7b
-
- new-instance v1, Ljava/lang/RuntimeException;
-
- const-string v2, "view must have a tag"
-
- invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 2576
- :cond_f7b
- const-string v1, "layout/fragment_video_preview_0"
-
- invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v1
-
- if-eqz v1, :cond_f89
-
- .line 2577
- new-instance v1, Lcom/classdojo/android/databinding/FragmentVideoPreviewBinding;
-
- invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/FragmentVideoPreviewBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
- return-object v1
-
- .line 2579
- :cond_f89
- new-instance v1, Ljava/lang/IllegalArgumentException;
-
- new-instance v2, Ljava/lang/StringBuilder;
-
- invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
- const-string v3, "The tag for fragment_video_preview is invalid. Received: "
-
- invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
- move-result-object v2
-
- invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 2088
- .end local v0 # "tag":Ljava/lang/Object;
- :pswitch_fa0
- invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
- move-result-object v0
-
- .line 2089
- .restart local v0 # "tag":Ljava/lang/Object;
- if-nez v0, :cond_faf
-
- new-instance v1, Ljava/lang/RuntimeException;
-
- const-string v2, "view must have a tag"
-
- invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 2090
- :cond_faf
- const-string v1, "layout/fragment_teacher_welcome_0"
-
- invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v1
-
- if-eqz v1, :cond_fbd
-
- .line 2091
- new-instance v1, Lcom/classdojo/android/databinding/FragmentTeacherWelcomeBinding;
-
- invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/FragmentTeacherWelcomeBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
- return-object v1
-
- .line 2093
- :cond_fbd
- new-instance v1, Ljava/lang/IllegalArgumentException;
-
- new-instance v2, Ljava/lang/StringBuilder;
-
- invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
- const-string v3, "The tag for fragment_teacher_welcome is invalid. Received: "
-
- invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
- move-result-object v2
-
- invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 1098
- .end local v0 # "tag":Ljava/lang/Object;
- :pswitch_fd4
- invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
- move-result-object v0
-
- .line 1099
- .restart local v0 # "tag":Ljava/lang/Object;
- if-nez v0, :cond_fe3
-
- new-instance v1, Ljava/lang/RuntimeException;
-
- const-string v2, "view must have a tag"
-
- invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 1100
- :cond_fe3
- const-string v1, "layout/fragment_teacher_student_connection_text_codes_0"
-
- invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v1
-
- if-eqz v1, :cond_ff1
-
- .line 1101
- new-instance v1, Lcom/classdojo/android/databinding/FragmentTeacherStudentConnectionTextCodesBinding;
-
- invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/FragmentTeacherStudentConnectionTextCodesBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
- return-object v1
-
- .line 1103
- :cond_ff1
- new-instance v1, Ljava/lang/IllegalArgumentException;
-
- new-instance v2, Ljava/lang/StringBuilder;
-
- invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
- const-string v3, "The tag for fragment_teacher_student_connection_text_codes is invalid. Received: "
-
- invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
- move-result-object v2
-
- invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 2511
- .end local v0 # "tag":Ljava/lang/Object;
- :pswitch_1008
- invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
- move-result-object v0
-
- .line 2512
- .restart local v0 # "tag":Ljava/lang/Object;
- if-nez v0, :cond_1017
-
- new-instance v1, Ljava/lang/RuntimeException;
-
- const-string v2, "view must have a tag"
-
- invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 2513
- :cond_1017
- const-string v1, "layout/fragment_teacher_student_connection_class_code_qr_0"
-
- invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v1
-
- if-eqz v1, :cond_1025
-
- .line 2514
- new-instance v1, Lcom/classdojo/android/databinding/FragmentTeacherStudentConnectionClassCodeQrBinding;
-
- invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/FragmentTeacherStudentConnectionClassCodeQrBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
- return-object v1
-
- .line 2516
- :cond_1025
- new-instance v1, Ljava/lang/IllegalArgumentException;
-
- new-instance v2, Ljava/lang/StringBuilder;
-
- invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
- const-string v3, "The tag for fragment_teacher_student_connection_class_code_qr is invalid. Received: "
-
- invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
- move-result-object v2
-
- invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 1926
- .end local v0 # "tag":Ljava/lang/Object;
- :pswitch_103c
- invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
- move-result-object v0
-
- .line 1927
- .restart local v0 # "tag":Ljava/lang/Object;
- if-nez v0, :cond_104b
-
- new-instance v1, Ljava/lang/RuntimeException;
-
- const-string v2, "view must have a tag"
-
- invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 1928
- :cond_104b
- const-string v1, "layout/fragment_teacher_story_feed_approval_0"
-
- invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v1
-
- if-eqz v1, :cond_1059
-
- .line 1929
- new-instance v1, Lcom/classdojo/android/databinding/FragmentTeacherStoryFeedApprovalBinding;
-
- invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/FragmentTeacherStoryFeedApprovalBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
- return-object v1
-
- .line 1931
- :cond_1059
- new-instance v1, Ljava/lang/IllegalArgumentException;
-
- new-instance v2, Ljava/lang/StringBuilder;
-
- invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
- const-string v3, "The tag for fragment_teacher_story_feed_approval is invalid. Received: "
-
- invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
- move-result-object v2
-
- invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 2385
- .end local v0 # "tag":Ljava/lang/Object;
- :pswitch_1070
- invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
- move-result-object v0
-
- .line 2386
- .restart local v0 # "tag":Ljava/lang/Object;
- if-nez v0, :cond_107f
-
- new-instance v1, Ljava/lang/RuntimeException;
-
- const-string v2, "view must have a tag"
-
- invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 2387
- :cond_107f
- const-string v1, "layout/fragment_teacher_settings_0"
-
- invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v1
-
- if-eqz v1, :cond_108d
-
- .line 2388
- new-instance v1, Lcom/classdojo/android/databinding/FragmentTeacherSettingsBinding;
-
- invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/FragmentTeacherSettingsBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
- return-object v1
-
- .line 2390
- :cond_108d
- new-instance v1, Ljava/lang/IllegalArgumentException;
-
- new-instance v2, Ljava/lang/StringBuilder;
-
- invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
- const-string v3, "The tag for fragment_teacher_settings is invalid. Received: "
-
- invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
- move-result-object v2
-
- invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 1899
- .end local v0 # "tag":Ljava/lang/Object;
- :pswitch_10a4
- invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
- move-result-object v0
-
- .line 1900
- .restart local v0 # "tag":Ljava/lang/Object;
- if-nez v0, :cond_10b3
-
- new-instance v1, Ljava/lang/RuntimeException;
-
- const-string v2, "view must have a tag"
-
- invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 1901
- :cond_10b3
- const-string v1, "layout/fragment_teacher_search_item_empty_teacher_0"
-
- invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v1
-
- if-eqz v1, :cond_10c1
-
- .line 1902
- new-instance v1, Lcom/classdojo/android/databinding/FragmentTeacherSearchItemEmptyTeacherBinding;
-
- invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/FragmentTeacherSearchItemEmptyTeacherBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
- return-object v1
-
- .line 1904
- :cond_10c1
- new-instance v1, Ljava/lang/IllegalArgumentException;
-
- new-instance v2, Ljava/lang/StringBuilder;
-
- invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
- const-string v3, "The tag for fragment_teacher_search_item_empty_teacher is invalid. Received: "
-
- invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
- move-result-object v2
-
- invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 504
- .end local v0 # "tag":Ljava/lang/Object;
- :pswitch_10d8
- invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
- move-result-object v0
-
- .line 505
- .restart local v0 # "tag":Ljava/lang/Object;
- if-nez v0, :cond_10e7
-
- new-instance v1, Ljava/lang/RuntimeException;
-
- const-string v2, "view must have a tag"
-
- invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 506
- :cond_10e7
- const-string v1, "layout/fragment_teacher_connection_0"
-
- invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v1
-
- if-eqz v1, :cond_10f5
-
- .line 507
- new-instance v1, Lcom/classdojo/android/databinding/FragmentTeacherConnectionBinding;
-
- invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/FragmentTeacherConnectionBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
- return-object v1
-
- .line 509
- :cond_10f5
- new-instance v1, Ljava/lang/IllegalArgumentException;
-
- new-instance v2, Ljava/lang/StringBuilder;
-
- invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
- const-string v3, "The tag for fragment_teacher_connection is invalid. Received: "
-
- invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
- move-result-object v2
-
- invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 1260
- .end local v0 # "tag":Ljava/lang/Object;
- :pswitch_110c
- invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
- move-result-object v0
-
- .line 1261
- .restart local v0 # "tag":Ljava/lang/Object;
- if-nez v0, :cond_111b
-
- new-instance v1, Ljava/lang/RuntimeException;
-
- const-string v2, "view must have a tag"
-
- invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 1262
- :cond_111b
- const-string v1, "layout/fragment_teacher_channel_list_0"
-
- invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v1
-
- if-eqz v1, :cond_1129
-
- .line 1263
- new-instance v1, Lcom/classdojo/android/databinding/FragmentTeacherChannelListBinding;
-
- invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/FragmentTeacherChannelListBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
- return-object v1
-
- .line 1265
- :cond_1129
- new-instance v1, Ljava/lang/IllegalArgumentException;
-
- new-instance v2, Ljava/lang/StringBuilder;
-
- invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
- const-string v3, "The tag for fragment_teacher_channel_list is invalid. Received: "
-
- invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
- move-result-object v2
-
- invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 843
- .end local v0 # "tag":Ljava/lang/Object;
- :pswitch_1140
- invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
- move-result-object v0
-
- .line 844
- .restart local v0 # "tag":Ljava/lang/Object;
- if-nez v0, :cond_114f
-
- new-instance v1, Ljava/lang/RuntimeException;
-
- const-string v2, "view must have a tag"
-
- invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 845
- :cond_114f
- const-string v1, "layout/fragment_teacher_approval_feed_item_text_0"
-
- invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v1
-
- if-eqz v1, :cond_115d
-
- .line 846
- new-instance v1, Lcom/classdojo/android/databinding/FragmentTeacherApprovalFeedItemTextBinding;
-
- invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/FragmentTeacherApprovalFeedItemTextBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
- return-object v1
-
- .line 848
- :cond_115d
- new-instance v1, Ljava/lang/IllegalArgumentException;
-
- new-instance v2, Ljava/lang/StringBuilder;
-
- invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
- const-string v3, "The tag for fragment_teacher_approval_feed_item_text is invalid. Received: "
-
- invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
- move-result-object v2
-
- invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 2529
- .end local v0 # "tag":Ljava/lang/Object;
- :pswitch_1174
- invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
- move-result-object v0
-
- .line 2530
- .restart local v0 # "tag":Ljava/lang/Object;
- if-nez v0, :cond_1183
-
- new-instance v1, Ljava/lang/RuntimeException;
-
- const-string v2, "view must have a tag"
-
- invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 2531
- :cond_1183
- const-string v1, "layout/fragment_teacher_approval_feed_item_0"
-
- invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v1
-
- if-eqz v1, :cond_1191
-
- .line 2532
- new-instance v1, Lcom/classdojo/android/databinding/FragmentTeacherApprovalFeedItemBinding;
-
- invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/FragmentTeacherApprovalFeedItemBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
- return-object v1
-
- .line 2534
- :cond_1191
- new-instance v1, Ljava/lang/IllegalArgumentException;
-
- new-instance v2, Ljava/lang/StringBuilder;
-
- invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
- const-string v3, "The tag for fragment_teacher_approval_feed_item is invalid. Received: "
-
- invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
- move-result-object v2
-
- invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 2493
- .end local v0 # "tag":Ljava/lang/Object;
- :pswitch_11a8
- invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
- move-result-object v0
-
- .line 2494
- .restart local v0 # "tag":Ljava/lang/Object;
- if-nez v0, :cond_11b7
-
- new-instance v1, Ljava/lang/RuntimeException;
-
- const-string v2, "view must have a tag"
-
- invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 2495
- :cond_11b7
- const-string v1, "layout/fragment_tab_student_list_0"
-
- invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v1
-
- if-eqz v1, :cond_11c5
-
- .line 2496
- new-instance v1, Lcom/classdojo/android/databinding/FragmentTabStudentListBinding;
-
- invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/FragmentTabStudentListBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
- return-object v1
-
- .line 2498
- :cond_11c5
- new-instance v1, Ljava/lang/IllegalArgumentException;
-
- new-instance v2, Ljava/lang/StringBuilder;
-
- invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
- const-string v3, "The tag for fragment_tab_student_list is invalid. Received: "
-
- invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
- move-result-object v2
-
- invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 1935
- .end local v0 # "tag":Ljava/lang/Object;
- :pswitch_11dc
- invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
- move-result-object v0
-
- .line 1936
- .restart local v0 # "tag":Ljava/lang/Object;
- if-nez v0, :cond_11eb
-
- new-instance v1, Ljava/lang/RuntimeException;
-
- const-string v2, "view must have a tag"
-
- invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 1937
- :cond_11eb
- const-string v1, "layout-sw600dp-land/fragment_tab_story_feed_0"
-
- invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v1
-
- if-eqz v1, :cond_11f9
-
- .line 1938
- new-instance v1, Lcom/classdojo/android/databinding/FragmentTabStoryFeedBindingSw600dpLandImpl;
-
- invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/FragmentTabStoryFeedBindingSw600dpLandImpl;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
- return-object v1
-
- .line 1940
- :cond_11f9
- const-string v1, "layout/fragment_tab_story_feed_0"
-
- invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v1
-
- if-eqz v1, :cond_1207
-
- .line 1941
- new-instance v1, Lcom/classdojo/android/databinding/FragmentTabStoryFeedBindingImpl;
-
- invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/FragmentTabStoryFeedBindingImpl;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
- return-object v1
-
- .line 1943
- :cond_1207
- new-instance v1, Ljava/lang/IllegalArgumentException;
-
- new-instance v2, Ljava/lang/StringBuilder;
-
- invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
- const-string v3, "The tag for fragment_tab_story_feed is invalid. Received: "
-
- invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
- move-result-object v2
-
- invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 93
- .end local v0 # "tag":Ljava/lang/Object;
- :pswitch_121e
- invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
- move-result-object v0
-
- .line 94
- .restart local v0 # "tag":Ljava/lang/Object;
- if-nez v0, :cond_122d
-
- new-instance v1, Ljava/lang/RuntimeException;
-
- const-string v2, "view must have a tag"
-
- invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 95
- :cond_122d
- const-string v1, "layout/fragment_tab_notification_pending_posts_item_thumbnail_0"
-
- invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v1
-
- if-eqz v1, :cond_123b
-
- .line 96
- new-instance v1, Lcom/classdojo/android/databinding/FragmentTabNotificationPendingPostsItemThumbnailBinding;
-
- invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/FragmentTabNotificationPendingPostsItemThumbnailBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
- return-object v1
-
- .line 98
- :cond_123b
- new-instance v1, Ljava/lang/IllegalArgumentException;
-
- new-instance v2, Ljava/lang/StringBuilder;
-
- invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
- const-string v3, "The tag for fragment_tab_notification_pending_posts_item_thumbnail is invalid. Received: "
-
- invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
- move-result-object v2
-
- invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 2421
- .end local v0 # "tag":Ljava/lang/Object;
- :pswitch_1252
- invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
- move-result-object v0
-
- .line 2422
- .restart local v0 # "tag":Ljava/lang/Object;
- if-nez v0, :cond_1261
-
- new-instance v1, Ljava/lang/RuntimeException;
-
- const-string v2, "view must have a tag"
-
- invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 2423
- :cond_1261
- const-string v1, "layout/fragment_tab_notification_pending_posts_item_0"
-
- invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v1
-
- if-eqz v1, :cond_126f
-
- .line 2424
- new-instance v1, Lcom/classdojo/android/databinding/FragmentTabNotificationPendingPostsItemBinding;
-
- invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/FragmentTabNotificationPendingPostsItemBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
- return-object v1
-
- .line 2426
- :cond_126f
- new-instance v1, Ljava/lang/IllegalArgumentException;
-
- new-instance v2, Ljava/lang/StringBuilder;
-
- invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
- const-string v3, "The tag for fragment_tab_notification_pending_posts_item is invalid. Received: "
-
- invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
- move-result-object v2
-
- invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 1143
- .end local v0 # "tag":Ljava/lang/Object;
- :pswitch_1286
- invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
- move-result-object v0
-
- .line 1144
- .restart local v0 # "tag":Ljava/lang/Object;
- if-nez v0, :cond_1295
-
- new-instance v1, Ljava/lang/RuntimeException;
-
- const-string v2, "view must have a tag"
-
- invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 1145
- :cond_1295
- const-string v1, "layout/fragment_tab_notification_list_pending_requests_item_0"
-
- invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v1
-
- if-eqz v1, :cond_12a3
-
- .line 1146
- new-instance v1, Lcom/classdojo/android/databinding/FragmentTabNotificationListPendingRequestsItemBinding;
-
- invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/FragmentTabNotificationListPendingRequestsItemBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
- return-object v1
-
- .line 1148
- :cond_12a3
- new-instance v1, Ljava/lang/IllegalArgumentException;
-
- new-instance v2, Ljava/lang/StringBuilder;
-
- invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
- const-string v3, "The tag for fragment_tab_notification_list_pending_requests_item is invalid. Received: "
-
- invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
- move-result-object v2
-
- invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 750
- .end local v0 # "tag":Ljava/lang/Object;
- :pswitch_12ba
- invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
- move-result-object v0
-
- .line 751
- .restart local v0 # "tag":Ljava/lang/Object;
- if-nez v0, :cond_12c9
-
- new-instance v1, Ljava/lang/RuntimeException;
-
- const-string v2, "view must have a tag"
-
- invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 752
- :cond_12c9
- const-string v1, "layout/fragment_tab_notification_list_item_header_0"
-
- invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v1
-
- if-eqz v1, :cond_12d7
-
- .line 753
- new-instance v1, Lcom/classdojo/android/databinding/FragmentTabNotificationListItemHeaderBinding;
-
- invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/FragmentTabNotificationListItemHeaderBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
- return-object v1
-
- .line 755
- :cond_12d7
- new-instance v1, Ljava/lang/IllegalArgumentException;
-
- new-instance v2, Ljava/lang/StringBuilder;
-
- invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
- const-string v3, "The tag for fragment_tab_notification_list_item_header is invalid. Received: "
-
- invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
- move-result-object v2
-
- invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 1455
- .end local v0 # "tag":Ljava/lang/Object;
- :pswitch_12ee
- invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
- move-result-object v0
-
- .line 1456
- .restart local v0 # "tag":Ljava/lang/Object;
- if-nez v0, :cond_12fd
-
- new-instance v1, Ljava/lang/RuntimeException;
-
- const-string v2, "view must have a tag"
-
- invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 1457
- :cond_12fd
- const-string v1, "layout/fragment_tab_notification_list_item_0"
-
- invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v1
-
- if-eqz v1, :cond_130b
-
- .line 1458
- new-instance v1, Lcom/classdojo/android/databinding/FragmentTabNotificationListItemBinding;
-
- invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/FragmentTabNotificationListItemBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
- return-object v1
-
- .line 1460
- :cond_130b
- new-instance v1, Ljava/lang/IllegalArgumentException;
-
- new-instance v2, Ljava/lang/StringBuilder;
-
- invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
- const-string v3, "The tag for fragment_tab_notification_list_item is invalid. Received: "
-
- invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
- move-result-object v2
-
- invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 1752
- .end local v0 # "tag":Ljava/lang/Object;
- :pswitch_1322
- invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
- move-result-object v0
-
- .line 1753
- .restart local v0 # "tag":Ljava/lang/Object;
- if-nez v0, :cond_1331
-
- new-instance v1, Ljava/lang/RuntimeException;
-
- const-string v2, "view must have a tag"
-
- invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 1754
- :cond_1331
- const-string v1, "layout/fragment_tab_notification_list_0"
-
- invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v1
-
- if-eqz v1, :cond_133f
-
- .line 1755
- new-instance v1, Lcom/classdojo/android/databinding/FragmentTabNotificationListBinding;
-
- invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/FragmentTabNotificationListBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
- return-object v1
-
- .line 1757
- :cond_133f
- new-instance v1, Ljava/lang/IllegalArgumentException;
-
- new-instance v2, Ljava/lang/StringBuilder;
-
- invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
- const-string v3, "The tag for fragment_tab_notification_list is invalid. Received: "
-
- invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
- move-result-object v2
-
- invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 153
- .end local v0 # "tag":Ljava/lang/Object;
- :pswitch_1356
- invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
- move-result-object v0
-
- .line 154
- .restart local v0 # "tag":Ljava/lang/Object;
- if-nez v0, :cond_1365
-
- new-instance v1, Ljava/lang/RuntimeException;
-
- const-string v2, "view must have a tag"
-
- invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 155
- :cond_1365
- const-string v1, "layout/fragment_tab_class_wall_item_webview_0"
-
- invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v1
-
- if-eqz v1, :cond_1373
-
- .line 156
- new-instance v1, Lcom/classdojo/android/databinding/FragmentTabClassWallItemWebviewBinding;
-
- invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/FragmentTabClassWallItemWebviewBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
- return-object v1
-
- .line 158
- :cond_1373
- new-instance v1, Ljava/lang/IllegalArgumentException;
-
- new-instance v2, Ljava/lang/StringBuilder;
-
- invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
- const-string v3, "The tag for fragment_tab_class_wall_item_webview is invalid. Received: "
-
- invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
- move-result-object v2
-
- invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 1386
- .end local v0 # "tag":Ljava/lang/Object;
- :pswitch_138a
- invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
- move-result-object v0
-
- .line 1387
- .restart local v0 # "tag":Ljava/lang/Object;
- if-nez v0, :cond_1399
-
- new-instance v1, Ljava/lang/RuntimeException;
-
- const-string v2, "view must have a tag"
-
- invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 1388
- :cond_1399
- const-string v1, "layout/fragment_tab_class_wall_item_student_report_0"
-
- invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v1
-
- if-eqz v1, :cond_13a7
-
- .line 1389
- new-instance v1, Lcom/classdojo/android/databinding/FragmentTabClassWallItemStudentReportBinding;
-
- invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/FragmentTabClassWallItemStudentReportBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
- return-object v1
-
- .line 1391
- :cond_13a7
- new-instance v1, Ljava/lang/IllegalArgumentException;
-
- new-instance v2, Ljava/lang/StringBuilder;
-
- invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
- const-string v3, "The tag for fragment_tab_class_wall_item_student_report is invalid. Received: "
-
- invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
- move-result-object v2
-
- invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 1446
- .end local v0 # "tag":Ljava/lang/Object;
- :pswitch_13be
- invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
- move-result-object v0
-
- .line 1447
- .restart local v0 # "tag":Ljava/lang/Object;
- if-nez v0, :cond_13cd
-
- new-instance v1, Ljava/lang/RuntimeException;
-
- const-string v2, "view must have a tag"
-
- invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 1448
- :cond_13cd
- const-string v1, "layout/fragment_tab_class_wall_item_student_permission_0"
-
- invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v1
-
- if-eqz v1, :cond_13db
-
- .line 1449
- new-instance v1, Lcom/classdojo/android/databinding/FragmentTabClassWallItemStudentPermissionBinding;
-
- invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/FragmentTabClassWallItemStudentPermissionBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
- return-object v1
-
- .line 1451
- :cond_13db
- new-instance v1, Ljava/lang/IllegalArgumentException;
-
- new-instance v2, Ljava/lang/StringBuilder;
-
- invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
- const-string v3, "The tag for fragment_tab_class_wall_item_student_permission is invalid. Received: "
-
- invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
- move-result-object v2
-
- invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 1806
- .end local v0 # "tag":Ljava/lang/Object;
- :pswitch_13f2
- invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
- move-result-object v0
-
- .line 1807
- .restart local v0 # "tag":Ljava/lang/Object;
- if-nez v0, :cond_1401
-
- new-instance v1, Ljava/lang/RuntimeException;
-
- const-string v2, "view must have a tag"
-
- invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 1808
- :cond_1401
- const-string v1, "layout/fragment_tab_class_wall_item_parent_empty_checklist_0"
-
- invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v1
-
- if-eqz v1, :cond_140f
-
- .line 1809
- new-instance v1, Lcom/classdojo/android/databinding/FragmentTabClassWallItemParentEmptyChecklistBinding;
-
- invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/FragmentTabClassWallItemParentEmptyChecklistBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
- return-object v1
-
- .line 1811
- :cond_140f
- new-instance v1, Ljava/lang/IllegalArgumentException;
-
- new-instance v2, Ljava/lang/StringBuilder;
-
- invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
- const-string v3, "The tag for fragment_tab_class_wall_item_parent_empty_checklist is invalid. Received: "
-
- invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
- move-result-object v2
-
- invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 888
- .end local v0 # "tag":Ljava/lang/Object;
- :pswitch_1426
- invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
- move-result-object v0
-
- .line 889
- .restart local v0 # "tag":Ljava/lang/Object;
- if-nez v0, :cond_1435
-
- new-instance v1, Ljava/lang/RuntimeException;
-
- const-string v2, "view must have a tag"
-
- invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 890
- :cond_1435
- const-string v1, "layout/fragment_tab_class_wall_item_parent_empty_0"
-
- invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v1
-
- if-eqz v1, :cond_1443
-
- .line 891
- new-instance v1, Lcom/classdojo/android/databinding/FragmentTabClassWallItemParentEmptyBinding;
-
- invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/FragmentTabClassWallItemParentEmptyBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
- return-object v1
-
- .line 893
- :cond_1443
- new-instance v1, Ljava/lang/IllegalArgumentException;
-
- new-instance v2, Ljava/lang/StringBuilder;
-
- invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
- const-string v3, "The tag for fragment_tab_class_wall_item_parent_empty is invalid. Received: "
-
- invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
- move-result-object v2
-
- invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 804
- .end local v0 # "tag":Ljava/lang/Object;
- :pswitch_145a
- invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
- move-result-object v0
-
- .line 805
- .restart local v0 # "tag":Ljava/lang/Object;
- if-nez v0, :cond_1469
-
- new-instance v1, Ljava/lang/RuntimeException;
-
- const-string v2, "view must have a tag"
-
- invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 806
- :cond_1469
- const-string v1, "layout/fragment_tab_class_wall_item_invite_card_0"
-
- invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v1
-
- if-eqz v1, :cond_1477
-
- .line 807
- new-instance v1, Lcom/classdojo/android/databinding/FragmentTabClassWallItemInviteCardBinding;
-
- invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/FragmentTabClassWallItemInviteCardBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
- return-object v1
-
- .line 809
- :cond_1477
- new-instance v1, Ljava/lang/IllegalArgumentException;
-
- new-instance v2, Ljava/lang/StringBuilder;
-
- invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
- const-string v3, "The tag for fragment_tab_class_wall_item_invite_card is invalid. Received: "
-
- invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
- move-result-object v2
-
- invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 1251
- .end local v0 # "tag":Ljava/lang/Object;
- :pswitch_148e
- invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
- move-result-object v0
-
- .line 1252
- .restart local v0 # "tag":Ljava/lang/Object;
- if-nez v0, :cond_149d
-
- new-instance v1, Ljava/lang/RuntimeException;
-
- const-string v2, "view must have a tag"
-
- invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 1253
- :cond_149d
- const-string v1, "layout/fragment_tab_class_wall_item_invite_0"
-
- invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v1
-
- if-eqz v1, :cond_14ab
-
- .line 1254
- new-instance v1, Lcom/classdojo/android/databinding/FragmentTabClassWallItemInviteBinding;
-
- invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/FragmentTabClassWallItemInviteBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
- return-object v1
-
- .line 1256
- :cond_14ab
- new-instance v1, Ljava/lang/IllegalArgumentException;
-
- new-instance v2, Ljava/lang/StringBuilder;
-
- invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
- const-string v3, "The tag for fragment_tab_class_wall_item_invite is invalid. Received: "
-
- invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
- move-result-object v2
-
- invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 2013
- .end local v0 # "tag":Ljava/lang/Object;
- :pswitch_14c2
- invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
- move-result-object v0
-
- .line 2014
- .restart local v0 # "tag":Ljava/lang/Object;
- if-nez v0, :cond_14d1
-
- new-instance v1, Ljava/lang/RuntimeException;
-
- const-string v2, "view must have a tag"
-
- invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 2015
- :cond_14d1
- const-string v1, "layout/fragment_tab_class_wall_item_demo_empty_0"
-
- invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v1
-
- if-eqz v1, :cond_14df
-
- .line 2016
- new-instance v1, Lcom/classdojo/android/databinding/FragmentTabClassWallItemDemoEmptyBinding;
-
- invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/FragmentTabClassWallItemDemoEmptyBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
- return-object v1
-
- .line 2018
- :cond_14df
- new-instance v1, Ljava/lang/IllegalArgumentException;
-
- new-instance v2, Ljava/lang/StringBuilder;
-
- invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
- const-string v3, "The tag for fragment_tab_class_wall_item_demo_empty is invalid. Received: "
-
- invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
- move-result-object v2
-
- invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 522
- .end local v0 # "tag":Ljava/lang/Object;
- :pswitch_14f6
- invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
- move-result-object v0
-
- .line 523
- .restart local v0 # "tag":Ljava/lang/Object;
- if-nez v0, :cond_1505
-
- new-instance v1, Ljava/lang/RuntimeException;
-
- const-string v2, "view must have a tag"
-
- invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 524
- :cond_1505
- const-string v1, "layout/fragment_tab_class_wall_item_compose_large_0"
-
- invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v1
-
- if-eqz v1, :cond_1513
-
- .line 525
- new-instance v1, Lcom/classdojo/android/databinding/FragmentTabClassWallItemComposeLargeBinding;
-
- invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/FragmentTabClassWallItemComposeLargeBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
- return-object v1
-
- .line 527
- :cond_1513
- new-instance v1, Ljava/lang/IllegalArgumentException;
-
- new-instance v2, Ljava/lang/StringBuilder;
-
- invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
- const-string v3, "The tag for fragment_tab_class_wall_item_compose_large is invalid. Received: "
-
- invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
- move-result-object v2
-
- invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 540
- .end local v0 # "tag":Ljava/lang/Object;
- :pswitch_152a
- invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
- move-result-object v0
-
- .line 541
- .restart local v0 # "tag":Ljava/lang/Object;
- if-nez v0, :cond_1539
-
- new-instance v1, Ljava/lang/RuntimeException;
-
- const-string v2, "view must have a tag"
-
- invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 542
- :cond_1539
- const-string v1, "layout/fragment_tab_class_wall_item_compose_0"
-
- invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v1
-
- if-eqz v1, :cond_1547
-
- .line 543
- new-instance v1, Lcom/classdojo/android/databinding/FragmentTabClassWallItemComposeBinding;
-
- invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/FragmentTabClassWallItemComposeBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
- return-object v1
-
- .line 545
- :cond_1547
- new-instance v1, Ljava/lang/IllegalArgumentException;
-
- new-instance v2, Ljava/lang/StringBuilder;
-
- invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
- const-string v3, "The tag for fragment_tab_class_wall_item_compose is invalid. Received: "
-
- invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
- move-result-object v2
-
- invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 1689
- .end local v0 # "tag":Ljava/lang/Object;
- :pswitch_155e
- invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
- move-result-object v0
-
- .line 1690
- .restart local v0 # "tag":Ljava/lang/Object;
- if-nez v0, :cond_156d
-
- new-instance v1, Ljava/lang/RuntimeException;
-
- const-string v2, "view must have a tag"
-
- invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 1691
- :cond_156d
- const-string v1, "layout/fragment_student_report_selector_item_0"
-
- invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v1
-
- if-eqz v1, :cond_157b
-
- .line 1692
- new-instance v1, Lcom/classdojo/android/databinding/FragmentStudentReportSelectorItemBinding;
-
- invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/FragmentStudentReportSelectorItemBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
- return-object v1
-
- .line 1694
- :cond_157b
- new-instance v1, Ljava/lang/IllegalArgumentException;
-
- new-instance v2, Ljava/lang/StringBuilder;
-
- invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
- const-string v3, "The tag for fragment_student_report_selector_item is invalid. Received: "
-
- invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
- move-result-object v2
-
- invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 1554
- .end local v0 # "tag":Ljava/lang/Object;
- :pswitch_1592
- invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
- move-result-object v0
-
- .line 1555
- .restart local v0 # "tag":Ljava/lang/Object;
- if-nez v0, :cond_15a1
-
- new-instance v1, Ljava/lang/RuntimeException;
-
- const-string v2, "view must have a tag"
-
- invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 1556
- :cond_15a1
- const-string v1, "layout/fragment_student_report_list_item_0"
-
- invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v1
-
- if-eqz v1, :cond_15af
-
- .line 1557
- new-instance v1, Lcom/classdojo/android/databinding/FragmentStudentReportListItemBinding;
-
- invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/FragmentStudentReportListItemBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
- return-object v1
-
- .line 1559
- :cond_15af
- new-instance v1, Ljava/lang/IllegalArgumentException;
-
- new-instance v2, Ljava/lang/StringBuilder;
-
- invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
- const-string v3, "The tag for fragment_student_report_list_item is invalid. Received: "
-
- invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
- move-result-object v2
-
- invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 405
- .end local v0 # "tag":Ljava/lang/Object;
- :pswitch_15c6
- invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
- move-result-object v0
-
- .line 406
- .restart local v0 # "tag":Ljava/lang/Object;
- if-nez v0, :cond_15d5
-
- new-instance v1, Ljava/lang/RuntimeException;
-
- const-string v2, "view must have a tag"
-
- invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 407
- :cond_15d5
- const-string v1, "layout/fragment_student_report_list_dialog_0"
-
- invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v1
-
- if-eqz v1, :cond_15e3
-
- .line 408
- new-instance v1, Lcom/classdojo/android/databinding/FragmentStudentReportListDialogBinding;
-
- invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/FragmentStudentReportListDialogBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
- return-object v1
-
- .line 410
- :cond_15e3
- new-instance v1, Ljava/lang/IllegalArgumentException;
-
- new-instance v2, Ljava/lang/StringBuilder;
-
- invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
- const-string v3, "The tag for fragment_student_report_list_dialog is invalid. Received: "
-
- invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
- move-result-object v2
-
- invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 270
- .end local v0 # "tag":Ljava/lang/Object;
- :pswitch_15fa
- invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
- move-result-object v0
-
- .line 271
- .restart local v0 # "tag":Ljava/lang/Object;
- if-nez v0, :cond_1609
-
- new-instance v1, Ljava/lang/RuntimeException;
-
- const-string v2, "view must have a tag"
-
- invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 272
- :cond_1609
- const-string v1, "layout/fragment_student_report_item_0"
-
- invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v1
-
- if-eqz v1, :cond_1617
-
- .line 273
- new-instance v1, Lcom/classdojo/android/databinding/FragmentStudentReportItemBinding;
-
- invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/FragmentStudentReportItemBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
- return-object v1
-
- .line 275
- :cond_1617
- new-instance v1, Ljava/lang/IllegalArgumentException;
-
- new-instance v2, Ljava/lang/StringBuilder;
-
- invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
- const-string v3, "The tag for fragment_student_report_item is invalid. Received: "
-
- invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
- move-result-object v2
-
- invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 261
- .end local v0 # "tag":Ljava/lang/Object;
- :pswitch_162e
- invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
- move-result-object v0
-
- .line 262
- .restart local v0 # "tag":Ljava/lang/Object;
- if-nez v0, :cond_163d
-
- new-instance v1, Ljava/lang/RuntimeException;
-
- const-string v2, "view must have a tag"
-
- invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 263
- :cond_163d
- const-string v1, "layout/fragment_student_report_charts_item_0"
-
- invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v1
-
- if-eqz v1, :cond_164b
-
- .line 264
- new-instance v1, Lcom/classdojo/android/databinding/FragmentStudentReportChartsItemBinding;
-
- invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/FragmentStudentReportChartsItemBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
- return-object v1
-
- .line 266
- :cond_164b
- new-instance v1, Ljava/lang/IllegalArgumentException;
-
- new-instance v2, Ljava/lang/StringBuilder;
-
- invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
- const-string v3, "The tag for fragment_student_report_charts_item is invalid. Received: "
-
- invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
- move-result-object v2
-
- invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 594
- .end local v0 # "tag":Ljava/lang/Object;
- :pswitch_1662
- invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
- move-result-object v0
-
- .line 595
- .restart local v0 # "tag":Ljava/lang/Object;
- if-nez v0, :cond_1671
-
- new-instance v1, Ljava/lang/RuntimeException;
-
- const-string v2, "view must have a tag"
-
- invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 596
- :cond_1671
- const-string v1, "layout/fragment_student_report_add_note_item_0"
-
- invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v1
-
- if-eqz v1, :cond_167f
-
- .line 597
- new-instance v1, Lcom/classdojo/android/databinding/FragmentStudentReportAddNoteItemBinding;
-
- invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/FragmentStudentReportAddNoteItemBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
- return-object v1
-
- .line 599
- :cond_167f
- new-instance v1, Ljava/lang/IllegalArgumentException;
-
- new-instance v2, Ljava/lang/StringBuilder;
-
- invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
- const-string v3, "The tag for fragment_student_report_add_note_item is invalid. Received: "
-
- invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
- move-result-object v2
-
- invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 288
- .end local v0 # "tag":Ljava/lang/Object;
- :pswitch_1696
- invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
- move-result-object v0
-
- .line 289
- .restart local v0 # "tag":Ljava/lang/Object;
- if-nez v0, :cond_16a5
-
- new-instance v1, Ljava/lang/RuntimeException;
-
- const-string v2, "view must have a tag"
-
- invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 290
- :cond_16a5
- const-string v1, "layout/fragment_student_report_0"
-
- invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v1
-
- if-eqz v1, :cond_16b3
-
- .line 291
- new-instance v1, Lcom/classdojo/android/databinding/FragmentStudentReportBinding;
-
- invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/FragmentStudentReportBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
- return-object v1
-
- .line 293
- :cond_16b3
- new-instance v1, Ljava/lang/IllegalArgumentException;
-
- new-instance v2, Ljava/lang/StringBuilder;
-
- invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
- const-string v3, "The tag for fragment_student_report is invalid. Received: "
-
- invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
- move-result-object v2
-
- invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 324
- .end local v0 # "tag":Ljava/lang/Object;
- :pswitch_16ca
- invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
- move-result-object v0
-
- .line 325
- .restart local v0 # "tag":Ljava/lang/Object;
- if-nez v0, :cond_16d9
-
- new-instance v1, Ljava/lang/RuntimeException;
-
- const-string v2, "view must have a tag"
-
- invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 326
- :cond_16d9
- const-string v1, "layout/fragment_student_relation_item_0"
-
- invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v1
-
- if-eqz v1, :cond_16e7
-
- .line 327
- new-instance v1, Lcom/classdojo/android/databinding/FragmentStudentRelationItemBinding;
-
- invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/FragmentStudentRelationItemBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
- return-object v1
-
- .line 329
- :cond_16e7
- new-instance v1, Ljava/lang/IllegalArgumentException;
-
- new-instance v2, Ljava/lang/StringBuilder;
-
- invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
- const-string v3, "The tag for fragment_student_relation_item is invalid. Received: "
-
- invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
- move-result-object v2
-
- invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 1908
- .end local v0 # "tag":Ljava/lang/Object;
- :pswitch_16fe
- invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
- move-result-object v0
-
- .line 1909
- .restart local v0 # "tag":Ljava/lang/Object;
- if-nez v0, :cond_170d
-
- new-instance v1, Ljava/lang/RuntimeException;
-
- const-string v2, "view must have a tag"
-
- invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 1910
- :cond_170d
- const-string v1, "layout/fragment_student_registration_form_0"
-
- invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v1
-
- if-eqz v1, :cond_171b
-
- .line 1911
- new-instance v1, Lcom/classdojo/android/databinding/FragmentStudentRegistrationFormBinding;
-
- invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/FragmentStudentRegistrationFormBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
- return-object v1
-
- .line 1913
- :cond_171b
- new-instance v1, Ljava/lang/IllegalArgumentException;
-
- new-instance v2, Ljava/lang/StringBuilder;
-
- invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
- const-string v3, "The tag for fragment_student_registration_form is invalid. Received: "
-
- invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
- move-result-object v2
-
- invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 1581
- .end local v0 # "tag":Ljava/lang/Object;
- :pswitch_1732
- invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
- move-result-object v0
-
- .line 1582
- .restart local v0 # "tag":Ljava/lang/Object;
- if-nez v0, :cond_1741
-
- new-instance v1, Ljava/lang/RuntimeException;
-
- const-string v2, "view must have a tag"
-
- invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 1583
- :cond_1741
- const-string v1, "layout/fragment_student_profile_date_0"
-
- invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v1
-
- if-eqz v1, :cond_174f
-
- .line 1584
- new-instance v1, Lcom/classdojo/android/databinding/FragmentStudentProfileDateBinding;
-
- invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/FragmentStudentProfileDateBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
- return-object v1
-
- .line 1586
- :cond_174f
- new-instance v1, Ljava/lang/IllegalArgumentException;
-
- new-instance v2, Ljava/lang/StringBuilder;
-
- invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
- const-string v3, "The tag for fragment_student_profile_date is invalid. Received: "
-
- invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
- move-result-object v2
-
- invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 2067
- .end local v0 # "tag":Ljava/lang/Object;
- :pswitch_1766
- invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
- move-result-object v0
-
- .line 2068
- .restart local v0 # "tag":Ljava/lang/Object;
- if-nez v0, :cond_1775
-
- new-instance v1, Ljava/lang/RuntimeException;
-
- const-string v2, "view must have a tag"
-
- invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 2069
- :cond_1775
- const-string v1, "layout/fragment_student_login_list_0"
-
- invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v1
-
- if-eqz v1, :cond_1783
-
- .line 2070
- new-instance v1, Lcom/classdojo/android/databinding/FragmentStudentLoginListBindingImpl;
-
- invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/FragmentStudentLoginListBindingImpl;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
- return-object v1
-
- .line 2072
- :cond_1783
- const-string v1, "layout-sw600dp/fragment_student_login_list_0"
-
- invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v1
-
- if-eqz v1, :cond_1791
-
- .line 2073
- new-instance v1, Lcom/classdojo/android/databinding/FragmentStudentLoginListBindingSw600dpImpl;
-
- invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/FragmentStudentLoginListBindingSw600dpImpl;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
- return-object v1
-
- .line 2075
- :cond_1791
- new-instance v1, Ljava/lang/IllegalArgumentException;
-
- new-instance v2, Ljava/lang/StringBuilder;
-
- invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
- const-string v3, "The tag for fragment_student_login_list is invalid. Received: "
-
- invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
- move-result-object v2
-
- invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 57
- .end local v0 # "tag":Ljava/lang/Object;
- :pswitch_17a8
- invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
- move-result-object v0
-
- .line 58
- .restart local v0 # "tag":Ljava/lang/Object;
- if-nez v0, :cond_17b7
-
- new-instance v1, Ljava/lang/RuntimeException;
-
- const-string v2, "view must have a tag"
-
- invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 59
- :cond_17b7
- const-string v1, "layout/fragment_student_drawing_tool_0"
-
- invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v1
-
- if-eqz v1, :cond_17c5
-
- .line 60
- new-instance v1, Lcom/classdojo/android/databinding/FragmentStudentDrawingToolBinding;
-
- invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/FragmentStudentDrawingToolBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
- return-object v1
-
- .line 62
- :cond_17c5
- new-instance v1, Ljava/lang/IllegalArgumentException;
-
- new-instance v2, Ljava/lang/StringBuilder;
-
- invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
- const-string v3, "The tag for fragment_student_drawing_tool is invalid. Received: "
-
- invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
- move-result-object v2
-
- invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 786
- .end local v0 # "tag":Ljava/lang/Object;
- :pswitch_17dc
- invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
- move-result-object v0
-
- .line 787
- .restart local v0 # "tag":Ljava/lang/Object;
- if-nez v0, :cond_17eb
-
- new-instance v1, Ljava/lang/RuntimeException;
-
- const-string v2, "view must have a tag"
-
- invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 788
- :cond_17eb
- const-string v1, "layout/fragment_student_connections_0"
-
- invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v1
-
- if-eqz v1, :cond_17f9
-
- .line 789
- new-instance v1, Lcom/classdojo/android/databinding/FragmentStudentConnectionsBinding;
-
- invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/FragmentStudentConnectionsBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
- return-object v1
-
- .line 791
- :cond_17f9
- new-instance v1, Ljava/lang/IllegalArgumentException;
-
- new-instance v2, Ljava/lang/StringBuilder;
-
- invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
- const-string v3, "The tag for fragment_student_connections is invalid. Received: "
-
- invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
- move-result-object v2
-
- invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 2484
- .end local v0 # "tag":Ljava/lang/Object;
- :pswitch_1810
- invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
- move-result-object v0
-
- .line 2485
- .restart local v0 # "tag":Ljava/lang/Object;
- if-nez v0, :cond_181f
-
- new-instance v1, Ljava/lang/RuntimeException;
-
- const-string v2, "view must have a tag"
-
- invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 2486
- :cond_181f
- const-string v1, "layout/fragment_student_codes_item_0"
-
- invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v1
-
- if-eqz v1, :cond_182d
-
- .line 2487
- new-instance v1, Lcom/classdojo/android/databinding/FragmentStudentCodesItemBinding;
-
- invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/FragmentStudentCodesItemBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
- return-object v1
-
- .line 2489
- :cond_182d
- new-instance v1, Ljava/lang/IllegalArgumentException;
-
- new-instance v2, Ljava/lang/StringBuilder;
-
- invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
- const-string v3, "The tag for fragment_student_codes_item is invalid. Received: "
-
- invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
- move-result-object v2
-
- invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 1707
- .end local v0 # "tag":Ljava/lang/Object;
- :pswitch_1844
- invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
- move-result-object v0
-
- .line 1708
- .restart local v0 # "tag":Ljava/lang/Object;
- if-nez v0, :cond_1853
-
- new-instance v1, Ljava/lang/RuntimeException;
-
- const-string v2, "view must have a tag"
-
- invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 1709
- :cond_1853
- const-string v1, "layout/fragment_student_codes_0"
-
- invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v1
-
- if-eqz v1, :cond_1861
-
- .line 1710
- new-instance v1, Lcom/classdojo/android/databinding/FragmentStudentCodesBinding;
-
- invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/FragmentStudentCodesBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
- return-object v1
-
- .line 1712
- :cond_1861
- new-instance v1, Ljava/lang/IllegalArgumentException;
-
- new-instance v2, Ljava/lang/StringBuilder;
-
- invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
- const-string v3, "The tag for fragment_student_codes is invalid. Received: "
-
- invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
- move-result-object v2
-
- invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 684
- .end local v0 # "tag":Ljava/lang/Object;
- :pswitch_1878
- invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
- move-result-object v0
-
- .line 685
- .restart local v0 # "tag":Ljava/lang/Object;
- if-nez v0, :cond_1887
-
- new-instance v1, Ljava/lang/RuntimeException;
-
- const-string v2, "view must have a tag"
-
- invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 686
- :cond_1887
- const-string v1, "layout/fragment_student_code_form_0"
-
- invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v1
-
- if-eqz v1, :cond_1895
-
- .line 687
- new-instance v1, Lcom/classdojo/android/databinding/FragmentStudentCodeFormBinding;
-
- invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/FragmentStudentCodeFormBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
- return-object v1
-
- .line 689
- :cond_1895
- new-instance v1, Ljava/lang/IllegalArgumentException;
-
- new-instance v2, Ljava/lang/StringBuilder;
-
- invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
- const-string v3, "The tag for fragment_student_code_form is invalid. Received: "
-
- invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
- move-result-object v2
-
- invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 459
- .end local v0 # "tag":Ljava/lang/Object;
- :pswitch_18ac
- invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
- move-result-object v0
-
- .line 460
- .restart local v0 # "tag":Ljava/lang/Object;
- if-nez v0, :cond_18bb
-
- new-instance v1, Ljava/lang/RuntimeException;
-
- const-string v2, "view must have a tag"
-
- invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 461
- :cond_18bb
- const-string v1, "layout/fragment_student_capture_student_list_item_0"
-
- invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v1
-
- if-eqz v1, :cond_18c9
-
- .line 462
- new-instance v1, Lcom/classdojo/android/databinding/FragmentStudentCaptureStudentListItemBinding;
-
- invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/FragmentStudentCaptureStudentListItemBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
- return-object v1
-
- .line 464
- :cond_18c9
- new-instance v1, Ljava/lang/IllegalArgumentException;
-
- new-instance v2, Ljava/lang/StringBuilder;
-
- invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
- const-string v3, "The tag for fragment_student_capture_student_list_item is invalid. Received: "
-
- invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
- move-result-object v2
-
- invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 1332
- .end local v0 # "tag":Ljava/lang/Object;
- :pswitch_18e0
- invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
- move-result-object v0
-
- .line 1333
- .restart local v0 # "tag":Ljava/lang/Object;
- if-nez v0, :cond_18ef
-
- new-instance v1, Ljava/lang/RuntimeException;
-
- const-string v2, "view must have a tag"
-
- invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 1334
- :cond_18ef
- const-string v1, "layout/fragment_student_capture_student_list_home_item_0"
-
- invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v1
-
- if-eqz v1, :cond_18fd
-
- .line 1335
- new-instance v1, Lcom/classdojo/android/databinding/FragmentStudentCaptureStudentListHomeItemBinding;
-
- invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/FragmentStudentCaptureStudentListHomeItemBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
- return-object v1
-
- .line 1337
- :cond_18fd
- new-instance v1, Ljava/lang/IllegalArgumentException;
-
- new-instance v2, Ljava/lang/StringBuilder;
-
- invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
- const-string v3, "The tag for fragment_student_capture_student_list_home_item is invalid. Received: "
-
- invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
- move-result-object v2
-
- invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 2631
- .end local v0 # "tag":Ljava/lang/Object;
- :pswitch_1914
- invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
- move-result-object v0
-
- .line 2632
- .restart local v0 # "tag":Ljava/lang/Object;
- if-nez v0, :cond_1923
-
- new-instance v1, Ljava/lang/RuntimeException;
-
- const-string v2, "view must have a tag"
-
- invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 2633
- :cond_1923
- const-string v1, "layout/fragment_student_capture_story_feed_item_participant_0"
-
- invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v1
-
- if-eqz v1, :cond_1931
-
- .line 2634
- new-instance v1, Lcom/classdojo/android/databinding/FragmentStudentCaptureStoryFeedItemParticipantBinding;
-
- invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/FragmentStudentCaptureStoryFeedItemParticipantBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
- return-object v1
-
- .line 2636
- :cond_1931
- new-instance v1, Ljava/lang/IllegalArgumentException;
-
- new-instance v2, Ljava/lang/StringBuilder;
-
- invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
- const-string v3, "The tag for fragment_student_capture_story_feed_item_participant is invalid. Received: "
-
- invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
- move-result-object v2
-
- invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 1188
- .end local v0 # "tag":Ljava/lang/Object;
- :pswitch_1948
- invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
- move-result-object v0
-
- .line 1189
- .restart local v0 # "tag":Ljava/lang/Object;
- if-nez v0, :cond_1957
-
- new-instance v1, Ljava/lang/RuntimeException;
-
- const-string v2, "view must have a tag"
-
- invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 1190
- :cond_1957
- const-string v1, "layout/fragment_student_capture_story_feed_item_content_0"
-
- invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v1
-
- if-eqz v1, :cond_1965
-
- .line 1191
- new-instance v1, Lcom/classdojo/android/databinding/FragmentStudentCaptureStoryFeedItemContentBinding;
-
- invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/FragmentStudentCaptureStoryFeedItemContentBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
- return-object v1
-
- .line 1193
- :cond_1965
- new-instance v1, Ljava/lang/IllegalArgumentException;
-
- new-instance v2, Ljava/lang/StringBuilder;
-
- invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
- const-string v3, "The tag for fragment_student_capture_story_feed_item_content is invalid. Received: "
-
- invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
- move-result-object v2
-
- invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 693
- .end local v0 # "tag":Ljava/lang/Object;
- :pswitch_197c
- invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
- move-result-object v0
-
- .line 694
- .restart local v0 # "tag":Ljava/lang/Object;
- if-nez v0, :cond_198b
-
- new-instance v1, Ljava/lang/RuntimeException;
-
- const-string v2, "view must have a tag"
-
- invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 695
- :cond_198b
- const-string v1, "layout-sw600dp-land/fragment_student_capture_story_feed_item_0"
-
- invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v1
-
- if-eqz v1, :cond_1999
-
- .line 696
- new-instance v1, Lcom/classdojo/android/databinding/FragmentStudentCaptureStoryFeedItemBindingSw600dpLandImpl;
-
- invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/FragmentStudentCaptureStoryFeedItemBindingSw600dpLandImpl;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
- return-object v1
-
- .line 698
- :cond_1999
- const-string v1, "layout/fragment_student_capture_story_feed_item_0"
-
- invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v1
-
- if-eqz v1, :cond_19a7
-
- .line 699
- new-instance v1, Lcom/classdojo/android/databinding/FragmentStudentCaptureStoryFeedItemBindingImpl;
-
- invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/FragmentStudentCaptureStoryFeedItemBindingImpl;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
- return-object v1
-
- .line 701
- :cond_19a7
- new-instance v1, Ljava/lang/IllegalArgumentException;
-
- new-instance v2, Ljava/lang/StringBuilder;
-
- invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
- const-string v3, "The tag for fragment_student_capture_story_feed_item is invalid. Received: "
-
- invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
- move-result-object v2
-
- invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 120
- .end local v0 # "tag":Ljava/lang/Object;
- :pswitch_19be
- invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
- move-result-object v0
-
- .line 121
- .restart local v0 # "tag":Ljava/lang/Object;
- if-nez v0, :cond_19cd
-
- new-instance v1, Ljava/lang/RuntimeException;
-
- const-string v2, "view must have a tag"
-
- invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 122
- :cond_19cd
- const-string v1, "layout-sw600dp/fragment_student_capture_preview_0"
-
- invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v1
-
- if-eqz v1, :cond_19db
-
- .line 123
- new-instance v1, Lcom/classdojo/android/databinding/FragmentStudentCapturePreviewBindingSw600dpImpl;
-
- invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/FragmentStudentCapturePreviewBindingSw600dpImpl;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
- return-object v1
-
- .line 125
- :cond_19db
- const-string v1, "layout/fragment_student_capture_preview_0"
-
- invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v1
-
- if-eqz v1, :cond_19e9
-
- .line 126
- new-instance v1, Lcom/classdojo/android/databinding/FragmentStudentCapturePreviewBindingImpl;
-
- invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/FragmentStudentCapturePreviewBindingImpl;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
- return-object v1
-
- .line 128
- :cond_19e9
- const-string v1, "layout-sw600dp-land/fragment_student_capture_preview_0"
-
- invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v1
-
- if-eqz v1, :cond_19f7
-
- .line 129
- new-instance v1, Lcom/classdojo/android/databinding/FragmentStudentCapturePreviewBindingSw600dpLandImpl;
-
- invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/FragmentStudentCapturePreviewBindingSw600dpLandImpl;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
- return-object v1
-
- .line 131
- :cond_19f7
- new-instance v1, Ljava/lang/IllegalArgumentException;
-
- new-instance v2, Ljava/lang/StringBuilder;
-
- invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
- const-string v3, "The tag for fragment_student_capture_preview is invalid. Received: "
-
- invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
- move-result-object v2
-
- invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 423
- .end local v0 # "tag":Ljava/lang/Object;
- :pswitch_1a0e
- invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
- move-result-object v0
-
- .line 424
- .restart local v0 # "tag":Ljava/lang/Object;
- if-nez v0, :cond_1a1d
-
- new-instance v1, Ljava/lang/RuntimeException;
-
- const-string v2, "view must have a tag"
-
- invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 425
- :cond_1a1d
- const-string v1, "layout/fragment_student_capture_mark_students_marked_item_0"
-
- invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v1
-
- if-eqz v1, :cond_1a2b
-
- .line 426
- new-instance v1, Lcom/classdojo/android/databinding/FragmentStudentCaptureMarkStudentsMarkedItemBinding;
-
- invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/FragmentStudentCaptureMarkStudentsMarkedItemBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
- return-object v1
-
- .line 428
- :cond_1a2b
- new-instance v1, Ljava/lang/IllegalArgumentException;
-
- new-instance v2, Ljava/lang/StringBuilder;
-
- invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
- const-string v3, "The tag for fragment_student_capture_mark_students_marked_item is invalid. Received: "
-
- invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
- move-result-object v2
-
- invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 297
- .end local v0 # "tag":Ljava/lang/Object;
- :pswitch_1a42
- invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
- move-result-object v0
-
- .line 298
- .restart local v0 # "tag":Ljava/lang/Object;
- if-nez v0, :cond_1a51
-
- new-instance v1, Ljava/lang/RuntimeException;
-
- const-string v2, "view must have a tag"
-
- invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 299
- :cond_1a51
- const-string v1, "layout/fragment_student_capture_mark_students_item_0"
-
- invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v1
-
- if-eqz v1, :cond_1a5f
-
- .line 300
- new-instance v1, Lcom/classdojo/android/databinding/FragmentStudentCaptureMarkStudentsItemBinding;
-
- invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/FragmentStudentCaptureMarkStudentsItemBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
- return-object v1
-
- .line 302
- :cond_1a5f
- new-instance v1, Ljava/lang/IllegalArgumentException;
-
- new-instance v2, Ljava/lang/StringBuilder;
-
- invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
- const-string v3, "The tag for fragment_student_capture_mark_students_item is invalid. Received: "
-
- invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
- move-result-object v2
-
- invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 1671
- .end local v0 # "tag":Ljava/lang/Object;
- :pswitch_1a76
- invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
- move-result-object v0
-
- .line 1672
- .restart local v0 # "tag":Ljava/lang/Object;
- if-nez v0, :cond_1a85
-
- new-instance v1, Ljava/lang/RuntimeException;
-
- const-string v2, "view must have a tag"
-
- invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 1673
- :cond_1a85
- const-string v1, "layout/fragment_student_capture_home_student_list_0"
-
- invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v1
-
- if-eqz v1, :cond_1a93
-
- .line 1674
- new-instance v1, Lcom/classdojo/android/databinding/FragmentStudentCaptureHomeStudentListBinding;
-
- invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/FragmentStudentCaptureHomeStudentListBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
- return-object v1
-
- .line 1676
- :cond_1a93
- new-instance v1, Ljava/lang/IllegalArgumentException;
-
- new-instance v2, Ljava/lang/StringBuilder;
-
- invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
- const-string v3, "The tag for fragment_student_capture_home_student_list is invalid. Received: "
-
- invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
- move-result-object v2
-
- invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 2601
- .end local v0 # "tag":Ljava/lang/Object;
- :pswitch_1aaa
- invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
- move-result-object v0
-
- .line 2602
- .restart local v0 # "tag":Ljava/lang/Object;
- if-nez v0, :cond_1ab9
-
- new-instance v1, Ljava/lang/RuntimeException;
-
- const-string v2, "view must have a tag"
-
- invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 2603
- :cond_1ab9
- const-string v1, "layout/fragment_student_capture_home_story_feed_0"
-
- invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v1
-
- if-eqz v1, :cond_1ac7
-
- .line 2604
- new-instance v1, Lcom/classdojo/android/databinding/FragmentStudentCaptureHomeStoryFeedBinding;
-
- invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/FragmentStudentCaptureHomeStoryFeedBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
- return-object v1
-
- .line 2606
- :cond_1ac7
- new-instance v1, Ljava/lang/IllegalArgumentException;
-
- new-instance v2, Ljava/lang/StringBuilder;
-
- invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
- const-string v3, "The tag for fragment_student_capture_home_story_feed is invalid. Received: "
-
- invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
- move-result-object v2
-
- invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 1854
- .end local v0 # "tag":Ljava/lang/Object;
- :pswitch_1ade
- invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
- move-result-object v0
-
- .line 1855
- .restart local v0 # "tag":Ljava/lang/Object;
- if-nez v0, :cond_1aed
-
- new-instance v1, Ljava/lang/RuntimeException;
-
- const-string v2, "view must have a tag"
-
- invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 1856
- :cond_1aed
- const-string v1, "layout/fragment_student_avatar_editor_0"
-
- invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v1
-
- if-eqz v1, :cond_1afb
-
- .line 1857
- new-instance v1, Lcom/classdojo/android/databinding/FragmentStudentAvatarEditorBinding;
-
- invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/FragmentStudentAvatarEditorBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
- return-object v1
-
- .line 1859
- :cond_1afb
- new-instance v1, Ljava/lang/IllegalArgumentException;
-
- new-instance v2, Ljava/lang/StringBuilder;
-
- invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
- const-string v3, "The tag for fragment_student_avatar_editor is invalid. Received: "
-
- invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
- move-result-object v2
-
- invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 1323
- .end local v0 # "tag":Ljava/lang/Object;
- :pswitch_1b12
- invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
- move-result-object v0
-
- .line 1324
- .restart local v0 # "tag":Ljava/lang/Object;
- if-nez v0, :cond_1b21
-
- new-instance v1, Ljava/lang/RuntimeException;
-
- const-string v2, "view must have a tag"
-
- invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 1325
- :cond_1b21
- const-string v1, "layout/fragment_story_share_to_student_header_item_0"
-
- invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v1
-
- if-eqz v1, :cond_1b2f
-
- .line 1326
- new-instance v1, Lcom/classdojo/android/databinding/FragmentStoryShareToStudentHeaderItemBinding;
-
- invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/FragmentStoryShareToStudentHeaderItemBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
- return-object v1
-
- .line 1328
- :cond_1b2f
- new-instance v1, Ljava/lang/IllegalArgumentException;
-
- new-instance v2, Ljava/lang/StringBuilder;
-
- invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
- const-string v3, "The tag for fragment_story_share_to_student_header_item is invalid. Received: "
-
- invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
- move-result-object v2
-
- invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 252
- .end local v0 # "tag":Ljava/lang/Object;
- :pswitch_1b46
- invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
- move-result-object v0
-
- .line 253
- .restart local v0 # "tag":Ljava/lang/Object;
- if-nez v0, :cond_1b55
-
- new-instance v1, Ljava/lang/RuntimeException;
-
- const-string v2, "view must have a tag"
-
- invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 254
- :cond_1b55
- const-string v1, "layout/fragment_story_share_to_item_0"
-
- invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v1
-
- if-eqz v1, :cond_1b63
-
- .line 255
- new-instance v1, Lcom/classdojo/android/databinding/FragmentStoryShareToItemBinding;
-
- invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/FragmentStoryShareToItemBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
- return-object v1
-
- .line 257
- :cond_1b63
- new-instance v1, Ljava/lang/IllegalArgumentException;
-
- new-instance v2, Ljava/lang/StringBuilder;
-
- invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
- const-string v3, "The tag for fragment_story_share_to_item is invalid. Received: "
-
- invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
- move-result-object v2
-
- invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 1563
- .end local v0 # "tag":Ljava/lang/Object;
- :pswitch_1b7a
- invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
- move-result-object v0
-
- .line 1564
- .restart local v0 # "tag":Ljava/lang/Object;
- if-nez v0, :cond_1b89
-
- new-instance v1, Ljava/lang/RuntimeException;
-
- const-string v2, "view must have a tag"
-
- invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 1565
- :cond_1b89
- const-string v1, "layout/fragment_story_share_to_class_header_item_0"
-
- invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v1
-
- if-eqz v1, :cond_1b97
-
- .line 1566
- new-instance v1, Lcom/classdojo/android/databinding/FragmentStoryShareToClassHeaderItemBinding;
-
- invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/FragmentStoryShareToClassHeaderItemBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
- return-object v1
-
- .line 1568
- :cond_1b97
- new-instance v1, Ljava/lang/IllegalArgumentException;
-
- new-instance v2, Ljava/lang/StringBuilder;
-
- invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
- const-string v3, "The tag for fragment_story_share_to_class_header_item is invalid. Received: "
-
- invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
- move-result-object v2
-
- invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 1491
- .end local v0 # "tag":Ljava/lang/Object;
- :pswitch_1bae
- invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
- move-result-object v0
-
- .line 1492
- .restart local v0 # "tag":Ljava/lang/Object;
- if-nez v0, :cond_1bbd
-
- new-instance v1, Ljava/lang/RuntimeException;
-
- const-string v2, "view must have a tag"
-
- invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 1493
- :cond_1bbd
- const-string v1, "layout/fragment_story_share_to_0"
-
- invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v1
-
- if-eqz v1, :cond_1bcb
-
- .line 1494
- new-instance v1, Lcom/classdojo/android/databinding/FragmentStoryShareToBinding;
-
- invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/FragmentStoryShareToBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
- return-object v1
-
- .line 1496
- :cond_1bcb
- new-instance v1, Ljava/lang/IllegalArgumentException;
-
- new-instance v2, Ljava/lang/StringBuilder;
-
- invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
- const-string v3, "The tag for fragment_story_share_to is invalid. Received: "
-
- invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
- move-result-object v2
-
- invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 576
- .end local v0 # "tag":Ljava/lang/Object;
- :pswitch_1be2
- invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
- move-result-object v0
-
- .line 577
- .restart local v0 # "tag":Ljava/lang/Object;
- if-nez v0, :cond_1bf1
-
- new-instance v1, Ljava/lang/RuntimeException;
-
- const-string v2, "view must have a tag"
-
- invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 578
- :cond_1bf1
- const-string v1, "layout/fragment_single_notification_0"
-
- invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v1
-
- if-eqz v1, :cond_1bff
-
- .line 579
- new-instance v1, Lcom/classdojo/android/databinding/FragmentSingleNotificationBinding;
-
- invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/FragmentSingleNotificationBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
- return-object v1
-
- .line 581
- :cond_1bff
- new-instance v1, Ljava/lang/IllegalArgumentException;
-
- new-instance v2, Ljava/lang/StringBuilder;
-
- invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
- const-string v3, "The tag for fragment_single_notification is invalid. Received: "
-
- invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
- move-result-object v2
-
- invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 1035
- .end local v0 # "tag":Ljava/lang/Object;
- :pswitch_1c16
- invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
- move-result-object v0
-
- .line 1036
- .restart local v0 # "tag":Ljava/lang/Object;
- if-nez v0, :cond_1c25
-
- new-instance v1, Ljava/lang/RuntimeException;
-
- const-string v2, "view must have a tag"
-
- invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 1037
- :cond_1c25
- const-string v1, "layout/fragment_setup_skills_0"
-
- invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v1
-
- if-eqz v1, :cond_1c33
-
- .line 1038
- new-instance v1, Lcom/classdojo/android/databinding/FragmentSetupSkillsBinding;
-
- invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/FragmentSetupSkillsBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
- return-object v1
-
- .line 1040
- :cond_1c33
- new-instance v1, Ljava/lang/IllegalArgumentException;
-
- new-instance v2, Ljava/lang/StringBuilder;
-
- invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
- const-string v3, "The tag for fragment_setup_skills is invalid. Received: "
-
- invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
- move-result-object v2
-
- invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 432
- .end local v0 # "tag":Ljava/lang/Object;
- :pswitch_1c4a
- invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
- move-result-object v0
-
- .line 433
- .restart local v0 # "tag":Ljava/lang/Object;
- if-nez v0, :cond_1c59
-
- new-instance v1, Ljava/lang/RuntimeException;
-
- const-string v2, "view must have a tag"
-
- invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 434
- :cond_1c59
- const-string v1, "layout/fragment_seen_by_item_0"
-
- invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v1
-
- if-eqz v1, :cond_1c67
-
- .line 435
- new-instance v1, Lcom/classdojo/android/databinding/FragmentSeenByItemBinding;
-
- invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/FragmentSeenByItemBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
- return-object v1
-
- .line 437
- :cond_1c67
- new-instance v1, Ljava/lang/IllegalArgumentException;
-
- new-instance v2, Ljava/lang/StringBuilder;
-
- invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
- const-string v3, "The tag for fragment_seen_by_item is invalid. Received: "
-
- invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
- move-result-object v2
-
- invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 1014
- .end local v0 # "tag":Ljava/lang/Object;
- :pswitch_1c7e
- invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
- move-result-object v0
-
- .line 1015
- .restart local v0 # "tag":Ljava/lang/Object;
- if-nez v0, :cond_1c8d
-
- new-instance v1, Ljava/lang/RuntimeException;
-
- const-string v2, "view must have a tag"
-
- invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 1016
- :cond_1c8d
- const-string v1, "layout/fragment_seen_by_0"
-
- invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v1
-
- if-eqz v1, :cond_1c9b
-
- .line 1017
- new-instance v1, Lcom/classdojo/android/databinding/FragmentSeenByBinding;
-
- invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/FragmentSeenByBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
- return-object v1
-
- .line 1019
- :cond_1c9b
- new-instance v1, Ljava/lang/IllegalArgumentException;
-
- new-instance v2, Ljava/lang/StringBuilder;
-
- invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
- const-string v3, "The tag for fragment_seen_by is invalid. Received: "
-
- invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
- move-result-object v2
-
- invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 2196
- .end local v0 # "tag":Ljava/lang/Object;
- :pswitch_1cb2
- invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
- move-result-object v0
-
- .line 2197
- .restart local v0 # "tag":Ljava/lang/Object;
- if-nez v0, :cond_1cc1
-
- new-instance v1, Ljava/lang/RuntimeException;
-
- const-string v2, "view must have a tag"
-
- invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 2198
- :cond_1cc1
- const-string v1, "layout/fragment_school_search_item_0"
-
- invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v1
-
- if-eqz v1, :cond_1ccf
-
- .line 2199
- new-instance v1, Lcom/classdojo/android/databinding/FragmentSchoolSearchItemBinding;
-
- invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/FragmentSchoolSearchItemBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
- return-object v1
-
- .line 2201
- :cond_1ccf
- new-instance v1, Ljava/lang/IllegalArgumentException;
-
- new-instance v2, Ljava/lang/StringBuilder;
-
- invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
- const-string v3, "The tag for fragment_school_search_item is invalid. Received: "
-
- invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
- move-result-object v2
-
- invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 2376
- .end local v0 # "tag":Ljava/lang/Object;
- :pswitch_1ce6
- invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
- move-result-object v0
-
- .line 2377
- .restart local v0 # "tag":Ljava/lang/Object;
- if-nez v0, :cond_1cf5
-
- new-instance v1, Ljava/lang/RuntimeException;
-
- const-string v2, "view must have a tag"
-
- invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 2378
- :cond_1cf5
- const-string v1, "layout/fragment_school_search_adapter_footer_0"
-
- invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v1
-
- if-eqz v1, :cond_1d03
-
- .line 2379
- new-instance v1, Lcom/classdojo/android/databinding/FragmentSchoolSearchAdapterFooterBinding;
-
- invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/FragmentSchoolSearchAdapterFooterBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
- return-object v1
-
- .line 2381
- :cond_1d03
- new-instance v1, Ljava/lang/IllegalArgumentException;
-
- new-instance v2, Ljava/lang/StringBuilder;
-
- invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
- const-string v3, "The tag for fragment_school_search_adapter_footer is invalid. Received: "
-
- invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
- move-result-object v2
-
- invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 144
- .end local v0 # "tag":Ljava/lang/Object;
- :pswitch_1d1a
- invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
- move-result-object v0
-
- .line 145
- .restart local v0 # "tag":Ljava/lang/Object;
- if-nez v0, :cond_1d29
-
- new-instance v1, Ljava/lang/RuntimeException;
-
- const-string v2, "view must have a tag"
-
- invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 146
- :cond_1d29
- const-string v1, "layout/fragment_school_search_0"
-
- invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v1
-
- if-eqz v1, :cond_1d37
-
- .line 147
- new-instance v1, Lcom/classdojo/android/databinding/FragmentSchoolSearchBinding;
-
- invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/FragmentSchoolSearchBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
- return-object v1
-
- .line 149
- :cond_1d37
- new-instance v1, Ljava/lang/IllegalArgumentException;
-
- new-instance v2, Ljava/lang/StringBuilder;
-
- invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
- const-string v3, "The tag for fragment_school_search is invalid. Received: "
-
- invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
- move-result-object v2
-
- invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 414
- .end local v0 # "tag":Ljava/lang/Object;
- :pswitch_1d4e
- invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
- move-result-object v0
-
- .line 415
- .restart local v0 # "tag":Ljava/lang/Object;
- if-nez v0, :cond_1d5d
-
- new-instance v1, Ljava/lang/RuntimeException;
-
- const-string v2, "view must have a tag"
-
- invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 416
- :cond_1d5d
- const-string v1, "layout/fragment_school_null_state_0"
-
- invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v1
-
- if-eqz v1, :cond_1d6b
-
- .line 417
- new-instance v1, Lcom/classdojo/android/databinding/FragmentSchoolNullStateBinding;
-
- invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/FragmentSchoolNullStateBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
- return-object v1
-
- .line 419
- :cond_1d6b
- new-instance v1, Ljava/lang/IllegalArgumentException;
-
- new-instance v2, Ljava/lang/StringBuilder;
-
- invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
- const-string v3, "The tag for fragment_school_null_state is invalid. Received: "
-
- invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
- move-result-object v2
-
- invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 198
- .end local v0 # "tag":Ljava/lang/Object;
- :pswitch_1d82
- invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
- move-result-object v0
-
- .line 199
- .restart local v0 # "tag":Ljava/lang/Object;
- if-nez v0, :cond_1d91
-
- new-instance v1, Ljava/lang/RuntimeException;
-
- const-string v2, "view must have a tag"
-
- invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 200
- :cond_1d91
- const-string v1, "layout/fragment_school_directory_item_welcome_0"
-
- invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v1
-
- if-eqz v1, :cond_1d9f
-
- .line 201
- new-instance v1, Lcom/classdojo/android/databinding/FragmentSchoolDirectoryItemWelcomeBinding;
-
- invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/FragmentSchoolDirectoryItemWelcomeBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
- return-object v1
-
- .line 203
- :cond_1d9f
- new-instance v1, Ljava/lang/IllegalArgumentException;
-
- new-instance v2, Ljava/lang/StringBuilder;
-
- invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
- const-string v3, "The tag for fragment_school_directory_item_welcome is invalid. Received: "
-
- invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
- move-result-object v2
-
- invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 1734
- .end local v0 # "tag":Ljava/lang/Object;
- :pswitch_1db6
- invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
- move-result-object v0
-
- .line 1735
- .restart local v0 # "tag":Ljava/lang/Object;
- if-nez v0, :cond_1dc5
-
- new-instance v1, Ljava/lang/RuntimeException;
-
- const-string v2, "view must have a tag"
-
- invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 1736
- :cond_1dc5
- const-string v1, "layout/fragment_school_directory_item_teacher_request_0"
-
- invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v1
-
- if-eqz v1, :cond_1dd3
-
- .line 1737
- new-instance v1, Lcom/classdojo/android/databinding/FragmentSchoolDirectoryItemTeacherRequestBinding;
-
- invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/FragmentSchoolDirectoryItemTeacherRequestBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
- return-object v1
-
- .line 1739
- :cond_1dd3
- new-instance v1, Ljava/lang/IllegalArgumentException;
-
- new-instance v2, Ljava/lang/StringBuilder;
-
- invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
- const-string v3, "The tag for fragment_school_directory_item_teacher_request is invalid. Received: "
-
- invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
- move-result-object v2
-
- invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 378
- .end local v0 # "tag":Ljava/lang/Object;
- :pswitch_1dea
- invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
- move-result-object v0
-
- .line 379
- .restart local v0 # "tag":Ljava/lang/Object;
- if-nez v0, :cond_1df9
-
- new-instance v1, Ljava/lang/RuntimeException;
-
- const-string v2, "view must have a tag"
-
- invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 380
- :cond_1df9
- const-string v1, "layout/fragment_school_directory_item_teacher_pending_0"
-
- invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v1
-
- if-eqz v1, :cond_1e07
-
- .line 381
- new-instance v1, Lcom/classdojo/android/databinding/FragmentSchoolDirectoryItemTeacherPendingBinding;
-
- invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/FragmentSchoolDirectoryItemTeacherPendingBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
- return-object v1
-
- .line 383
- :cond_1e07
- new-instance v1, Ljava/lang/IllegalArgumentException;
-
- new-instance v2, Ljava/lang/StringBuilder;
-
- invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
- const-string v3, "The tag for fragment_school_directory_item_teacher_pending is invalid. Received: "
-
- invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
- move-result-object v2
-
- invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 2331
- .end local v0 # "tag":Ljava/lang/Object;
- :pswitch_1e1e
- invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
- move-result-object v0
-
- .line 2332
- .restart local v0 # "tag":Ljava/lang/Object;
- if-nez v0, :cond_1e2d
-
- new-instance v1, Ljava/lang/RuntimeException;
-
- const-string v2, "view must have a tag"
-
- invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 2333
- :cond_1e2d
- const-string v1, "layout/fragment_school_directory_item_teacher_0"
-
- invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v1
-
- if-eqz v1, :cond_1e3b
-
- .line 2334
- new-instance v1, Lcom/classdojo/android/databinding/FragmentSchoolDirectoryItemTeacherBinding;
-
- invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/FragmentSchoolDirectoryItemTeacherBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
- return-object v1
-
- .line 2336
- :cond_1e3b
- new-instance v1, Ljava/lang/IllegalArgumentException;
-
- new-instance v2, Ljava/lang/StringBuilder;
-
- invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
- const-string v3, "The tag for fragment_school_directory_item_teacher is invalid. Received: "
-
- invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
- move-result-object v2
-
- invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 2448
- .end local v0 # "tag":Ljava/lang/Object;
- :pswitch_1e52
- invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
- move-result-object v0
-
- .line 2449
- .restart local v0 # "tag":Ljava/lang/Object;
- if-nez v0, :cond_1e61
-
- new-instance v1, Ljava/lang/RuntimeException;
-
- const-string v2, "view must have a tag"
-
- invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 2450
- :cond_1e61
- const-string v1, "layout/fragment_school_directory_item_student_parent_circle_0"
-
- invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v1
-
- if-eqz v1, :cond_1e6f
-
- .line 2451
- new-instance v1, Lcom/classdojo/android/databinding/FragmentSchoolDirectoryItemStudentParentCircleBinding;
-
- invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/FragmentSchoolDirectoryItemStudentParentCircleBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
- return-object v1
-
- .line 2453
- :cond_1e6f
- new-instance v1, Ljava/lang/IllegalArgumentException;
-
- new-instance v2, Ljava/lang/StringBuilder;
-
- invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
- const-string v3, "The tag for fragment_school_directory_item_student_parent_circle is invalid. Received: "
-
- invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
- move-result-object v2
-
- invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 1152
- .end local v0 # "tag":Ljava/lang/Object;
- :pswitch_1e86
- invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
- move-result-object v0
-
- .line 1153
- .restart local v0 # "tag":Ljava/lang/Object;
- if-nez v0, :cond_1e95
-
- new-instance v1, Ljava/lang/RuntimeException;
-
- const-string v2, "view must have a tag"
-
- invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 1154
- :cond_1e95
- const-string v1, "layout/fragment_school_directory_item_student_add_0"
-
- invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v1
-
- if-eqz v1, :cond_1ea3
-
- .line 1155
- new-instance v1, Lcom/classdojo/android/databinding/FragmentSchoolDirectoryItemStudentAddBinding;
-
- invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/FragmentSchoolDirectoryItemStudentAddBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
- return-object v1
-
- .line 1157
- :cond_1ea3
- new-instance v1, Ljava/lang/IllegalArgumentException;
-
- new-instance v2, Ljava/lang/StringBuilder;
-
- invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
- const-string v3, "The tag for fragment_school_directory_item_student_add is invalid. Received: "
-
- invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
- move-result-object v2
-
- invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 2313
- .end local v0 # "tag":Ljava/lang/Object;
- :pswitch_1eba
- invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
- move-result-object v0
-
- .line 2314
- .restart local v0 # "tag":Ljava/lang/Object;
- if-nez v0, :cond_1ec9
-
- new-instance v1, Ljava/lang/RuntimeException;
-
- const-string v2, "view must have a tag"
-
- invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 2315
- :cond_1ec9
- const-string v1, "layout/fragment_school_directory_item_student_0"
-
- invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v1
-
- if-eqz v1, :cond_1ed7
-
- .line 2316
- new-instance v1, Lcom/classdojo/android/databinding/FragmentSchoolDirectoryItemStudentBinding;
-
- invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/FragmentSchoolDirectoryItemStudentBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
- return-object v1
-
- .line 2318
- :cond_1ed7
- new-instance v1, Ljava/lang/IllegalArgumentException;
-
- new-instance v2, Ljava/lang/StringBuilder;
-
- invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
- const-string v3, "The tag for fragment_school_directory_item_student is invalid. Received: "
-
- invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
- move-result-object v2
-
- invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 1716
- .end local v0 # "tag":Ljava/lang/Object;
- :pswitch_1eee
- invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
- move-result-object v0
-
- .line 1717
- .restart local v0 # "tag":Ljava/lang/Object;
- if-nez v0, :cond_1efd
-
- new-instance v1, Ljava/lang/RuntimeException;
-
- const-string v2, "view must have a tag"
-
- invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 1718
- :cond_1efd
- const-string v1, "layout/fragment_school_directory_item_header_0"
-
- invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v1
-
- if-eqz v1, :cond_1f0b
-
- .line 1719
- new-instance v1, Lcom/classdojo/android/databinding/FragmentSchoolDirectoryItemHeaderBinding;
-
- invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/FragmentSchoolDirectoryItemHeaderBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
- return-object v1
-
- .line 1721
- :cond_1f0b
- new-instance v1, Ljava/lang/IllegalArgumentException;
-
- new-instance v2, Ljava/lang/StringBuilder;
-
- invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
- const-string v3, "The tag for fragment_school_directory_item_header is invalid. Received: "
-
- invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
- move-result-object v2
-
- invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 2622
- .end local v0 # "tag":Ljava/lang/Object;
- :pswitch_1f22
- invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
- move-result-object v0
-
- .line 2623
- .restart local v0 # "tag":Ljava/lang/Object;
- if-nez v0, :cond_1f31
-
- new-instance v1, Ljava/lang/RuntimeException;
-
- const-string v2, "view must have a tag"
-
- invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 2624
- :cond_1f31
- const-string v1, "layout/fragment_school_directory_0"
-
- invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v1
-
- if-eqz v1, :cond_1f3f
-
- .line 2625
- new-instance v1, Lcom/classdojo/android/databinding/FragmentSchoolDirectoryBinding;
-
- invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/FragmentSchoolDirectoryBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
- return-object v1
-
- .line 2627
- :cond_1f3f
- new-instance v1, Ljava/lang/IllegalArgumentException;
-
- new-instance v2, Ljava/lang/StringBuilder;
-
- invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
- const-string v3, "The tag for fragment_school_directory is invalid. Received: "
-
- invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
- move-result-object v2
-
- invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 558
- .end local v0 # "tag":Ljava/lang/Object;
- :pswitch_1f56
- invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
- move-result-object v0
-
- .line 559
- .restart local v0 # "tag":Ljava/lang/Object;
- if-nez v0, :cond_1f65
-
- new-instance v1, Ljava/lang/RuntimeException;
-
- const-string v2, "view must have a tag"
-
- invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 560
- :cond_1f65
- const-string v1, "layout/fragment_school_detail_teacher_item_0"
-
- invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v1
-
- if-eqz v1, :cond_1f73
-
- .line 561
- new-instance v1, Lcom/classdojo/android/databinding/FragmentSchoolDetailTeacherItemBinding;
-
- invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/FragmentSchoolDetailTeacherItemBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
- return-object v1
-
- .line 563
- :cond_1f73
- new-instance v1, Ljava/lang/IllegalArgumentException;
-
- new-instance v2, Ljava/lang/StringBuilder;
-
- invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
- const-string v3, "The tag for fragment_school_detail_teacher_item is invalid. Received: "
-
- invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
- move-result-object v2
-
- invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 1134
- .end local v0 # "tag":Ljava/lang/Object;
- :pswitch_1f8a
- invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
- move-result-object v0
-
- .line 1135
- .restart local v0 # "tag":Ljava/lang/Object;
- if-nez v0, :cond_1f99
-
- new-instance v1, Ljava/lang/RuntimeException;
-
- const-string v2, "view must have a tag"
-
- invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 1136
- :cond_1f99
- const-string v1, "layout/fragment_school_detail_header_0"
-
- invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v1
-
- if-eqz v1, :cond_1fa7
-
- .line 1137
- new-instance v1, Lcom/classdojo/android/databinding/FragmentSchoolDetailHeaderBinding;
-
- invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/FragmentSchoolDetailHeaderBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
- return-object v1
-
- .line 1139
- :cond_1fa7
- new-instance v1, Ljava/lang/IllegalArgumentException;
-
- new-instance v2, Ljava/lang/StringBuilder;
-
- invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
- const-string v3, "The tag for fragment_school_detail_header is invalid. Received: "
-
- invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
- move-result-object v2
-
- invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 2142
- .end local v0 # "tag":Ljava/lang/Object;
- :pswitch_1fbe
- invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
- move-result-object v0
-
- .line 2143
- .restart local v0 # "tag":Ljava/lang/Object;
- if-nez v0, :cond_1fcd
-
- new-instance v1, Ljava/lang/RuntimeException;
-
- const-string v2, "view must have a tag"
-
- invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 2144
- :cond_1fcd
- const-string v1, "layout/fragment_scheduled_messages_0"
-
- invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v1
-
- if-eqz v1, :cond_1fdb
-
- .line 2145
- new-instance v1, Lcom/classdojo/android/databinding/FragmentScheduledMessagesBinding;
-
- invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/FragmentScheduledMessagesBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
- return-object v1
-
- .line 2147
- :cond_1fdb
- new-instance v1, Ljava/lang/IllegalArgumentException;
-
- new-instance v2, Ljava/lang/StringBuilder;
-
- invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
- const-string v3, "The tag for fragment_scheduled_messages is invalid. Received: "
-
- invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
- move-result-object v2
-
- invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 2367
- .end local v0 # "tag":Ljava/lang/Object;
- :pswitch_1ff2
- invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
- move-result-object v0
-
- .line 2368
- .restart local v0 # "tag":Ljava/lang/Object;
- if-nez v0, :cond_2001
-
- new-instance v1, Ljava/lang/RuntimeException;
-
- const-string v2, "view must have a tag"
-
- invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 2369
- :cond_2001
- const-string v1, "layout/fragment_scheduled_message_item_0"
-
- invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v1
-
- if-eqz v1, :cond_200f
-
- .line 2370
- new-instance v1, Lcom/classdojo/android/databinding/FragmentScheduledMessageItemBinding;
-
- invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/FragmentScheduledMessageItemBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
- return-object v1
-
- .line 2372
- :cond_200f
- new-instance v1, Ljava/lang/IllegalArgumentException;
-
- new-instance v2, Ljava/lang/StringBuilder;
-
- invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
- const-string v3, "The tag for fragment_scheduled_message_item is invalid. Received: "
-
- invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
- move-result-object v2
-
- invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 2268
- .end local v0 # "tag":Ljava/lang/Object;
- :pswitch_2026
- invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
- move-result-object v0
-
- .line 2269
- .restart local v0 # "tag":Ljava/lang/Object;
- if-nez v0, :cond_2035
-
- new-instance v1, Ljava/lang/RuntimeException;
-
- const-string v2, "view must have a tag"
-
- invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 2270
- :cond_2035
- const-string v1, "layout/fragment_push_notifications_settings_0"
-
- invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v1
-
- if-eqz v1, :cond_2043
-
- .line 2271
- new-instance v1, Lcom/classdojo/android/databinding/FragmentPushNotificationsSettingsBinding;
-
- invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/FragmentPushNotificationsSettingsBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
- return-object v1
-
- .line 2273
- :cond_2043
- new-instance v1, Ljava/lang/IllegalArgumentException;
-
- new-instance v2, Ljava/lang/StringBuilder;
-
- invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
- const-string v3, "The tag for fragment_push_notifications_settings is invalid. Received: "
-
- invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
- move-result-object v2
-
- invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 2439
- .end local v0 # "tag":Ljava/lang/Object;
- :pswitch_205a
- invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
- move-result-object v0
-
- .line 2440
- .restart local v0 # "tag":Ljava/lang/Object;
- if-nez v0, :cond_2069
-
- new-instance v1, Ljava/lang/RuntimeException;
-
- const-string v2, "view must have a tag"
-
- invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 2441
- :cond_2069
- const-string v1, "layout/fragment_push_notifications_quiet_hours_0"
-
- invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v1
-
- if-eqz v1, :cond_2077
-
- .line 2442
- new-instance v1, Lcom/classdojo/android/databinding/FragmentPushNotificationsQuietHoursBinding;
-
- invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/FragmentPushNotificationsQuietHoursBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
- return-object v1
-
- .line 2444
- :cond_2077
- new-instance v1, Ljava/lang/IllegalArgumentException;
-
- new-instance v2, Ljava/lang/StringBuilder;
-
- invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
- const-string v3, "The tag for fragment_push_notifications_quiet_hours is invalid. Received: "
-
- invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
- move-result-object v2
-
- invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 879
- .end local v0 # "tag":Ljava/lang/Object;
- :pswitch_208e
- invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
- move-result-object v0
-
- .line 880
- .restart local v0 # "tag":Ljava/lang/Object;
- if-nez v0, :cond_209d
-
- new-instance v1, Ljava/lang/RuntimeException;
-
- const-string v2, "view must have a tag"
-
- invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 881
- :cond_209d
- const-string v1, "layout/fragment_profile_photo_item_0"
-
- invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v1
-
- if-eqz v1, :cond_20ab
-
- .line 882
- new-instance v1, Lcom/classdojo/android/databinding/FragmentProfilePhotoItemBinding;
-
- invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/FragmentProfilePhotoItemBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
- return-object v1
-
- .line 884
- :cond_20ab
- new-instance v1, Ljava/lang/IllegalArgumentException;
-
- new-instance v2, Ljava/lang/StringBuilder;
-
- invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
- const-string v3, "The tag for fragment_profile_photo_item is invalid. Received: "
-
- invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
- move-result-object v2
-
- invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 861
- .end local v0 # "tag":Ljava/lang/Object;
- :pswitch_20c2
- invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
- move-result-object v0
-
- .line 862
- .restart local v0 # "tag":Ljava/lang/Object;
- if-nez v0, :cond_20d1
-
- new-instance v1, Ljava/lang/RuntimeException;
-
- const-string v2, "view must have a tag"
-
- invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 863
- :cond_20d1
- const-string v1, "layout/fragment_preview_message_0"
-
- invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v1
-
- if-eqz v1, :cond_20df
-
- .line 864
- new-instance v1, Lcom/classdojo/android/databinding/FragmentPreviewMessageBinding;
-
- invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/FragmentPreviewMessageBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
- return-object v1
-
- .line 866
- :cond_20df
- new-instance v1, Ljava/lang/IllegalArgumentException;
-
- new-instance v2, Ljava/lang/StringBuilder;
-
- invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
- const-string v3, "The tag for fragment_preview_message is invalid. Received: "
-
- invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
- move-result-object v2
-
- invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 102
- .end local v0 # "tag":Ljava/lang/Object;
- :pswitch_20f6
- invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
- move-result-object v0
-
- .line 103
- .restart local v0 # "tag":Ljava/lang/Object;
- if-nez v0, :cond_2105
-
- new-instance v1, Ljava/lang/RuntimeException;
-
- const-string v2, "view must have a tag"
-
- invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 104
- :cond_2105
- const-string v1, "layout/fragment_photo_preview_0"
-
- invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v1
-
- if-eqz v1, :cond_2113
-
- .line 105
- new-instance v1, Lcom/classdojo/android/databinding/FragmentPhotoPreviewBinding;
-
- invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/FragmentPhotoPreviewBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
- return-object v1
-
- .line 107
- :cond_2113
- new-instance v1, Ljava/lang/IllegalArgumentException;
-
- new-instance v2, Ljava/lang/StringBuilder;
-
- invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
- const-string v3, "The tag for fragment_photo_preview is invalid. Received: "
-
- invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
- move-result-object v2
-
- invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 162
- .end local v0 # "tag":Ljava/lang/Object;
- :pswitch_212a
- invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
- move-result-object v0
-
- .line 163
- .restart local v0 # "tag":Ljava/lang/Object;
- if-nez v0, :cond_2139
-
- new-instance v1, Ljava/lang/RuntimeException;
-
- const-string v2, "view must have a tag"
-
- invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 164
- :cond_2139
- const-string v1, "layout/fragment_parent_teacher_search_0"
-
- invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v1
-
- if-eqz v1, :cond_2147
-
- .line 165
- new-instance v1, Lcom/classdojo/android/databinding/FragmentParentTeacherSearchBinding;
-
- invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/FragmentParentTeacherSearchBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
- return-object v1
-
- .line 167
- :cond_2147
- new-instance v1, Ljava/lang/IllegalArgumentException;
-
- new-instance v2, Ljava/lang/StringBuilder;
-
- invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
- const-string v3, "The tag for fragment_parent_teacher_search is invalid. Received: "
-
- invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
- move-result-object v2
-
- invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 675
- .end local v0 # "tag":Ljava/lang/Object;
- :pswitch_215e
- invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
- move-result-object v0
-
- .line 676
- .restart local v0 # "tag":Ljava/lang/Object;
- if-nez v0, :cond_216d
-
- new-instance v1, Ljava/lang/RuntimeException;
-
- const-string v2, "view must have a tag"
-
- invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 677
- :cond_216d
- const-string v1, "layout/fragment_parent_sign_up_credentials_0"
-
- invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v1
-
- if-eqz v1, :cond_217b
-
- .line 678
- new-instance v1, Lcom/classdojo/android/databinding/FragmentParentSignUpCredentialsBinding;
-
- invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/FragmentParentSignUpCredentialsBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
- return-object v1
-
- .line 680
- :cond_217b
- new-instance v1, Ljava/lang/IllegalArgumentException;
-
- new-instance v2, Ljava/lang/StringBuilder;
-
- invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
- const-string v3, "The tag for fragment_parent_sign_up_credentials is invalid. Received: "
-
- invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
- move-result-object v2
-
- invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 2058
- .end local v0 # "tag":Ljava/lang/Object;
- :pswitch_2192
- invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
- move-result-object v0
-
- .line 2059
- .restart local v0 # "tag":Ljava/lang/Object;
- if-nez v0, :cond_21a1
-
- new-instance v1, Ljava/lang/RuntimeException;
-
- const-string v2, "view must have a tag"
-
- invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 2060
- :cond_21a1
- const-string v1, "layout/fragment_parent_setup_student_account_qr_0"
-
- invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v1
-
- if-eqz v1, :cond_21af
-
- .line 2061
- new-instance v1, Lcom/classdojo/android/databinding/FragmentParentSetupStudentAccountQrBinding;
-
- invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/FragmentParentSetupStudentAccountQrBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
- return-object v1
-
- .line 2063
- :cond_21af
- new-instance v1, Ljava/lang/IllegalArgumentException;
-
- new-instance v2, Ljava/lang/StringBuilder;
-
- invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
- const-string v3, "The tag for fragment_parent_setup_student_account_qr is invalid. Received: "
-
- invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
- move-result-object v2
-
- invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 2583
- .end local v0 # "tag":Ljava/lang/Object;
- :pswitch_21c6
- invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
- move-result-object v0
-
- .line 2584
- .restart local v0 # "tag":Ljava/lang/Object;
- if-nez v0, :cond_21d5
-
- new-instance v1, Ljava/lang/RuntimeException;
-
- const-string v2, "view must have a tag"
-
- invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 2585
- :cond_21d5
- const-string v1, "layout/fragment_parent_setup_student_account_ack_0"
-
- invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v1
-
- if-eqz v1, :cond_21e3
-
- .line 2586
- new-instance v1, Lcom/classdojo/android/databinding/FragmentParentSetupStudentAccountAckBinding;
-
- invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/FragmentParentSetupStudentAccountAckBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
- return-object v1
-
- .line 2588
- :cond_21e3
- new-instance v1, Ljava/lang/IllegalArgumentException;
-
- new-instance v2, Ljava/lang/StringBuilder;
-
- invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
- const-string v3, "The tag for fragment_parent_setup_student_account_ack is invalid. Received: "
-
- invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
- move-result-object v2
-
- invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 1482
- .end local v0 # "tag":Ljava/lang/Object;
- :pswitch_21fa
- invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
- move-result-object v0
-
- .line 1483
- .restart local v0 # "tag":Ljava/lang/Object;
- if-nez v0, :cond_2209
-
- new-instance v1, Ljava/lang/RuntimeException;
-
- const-string v2, "view must have a tag"
-
- invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 1484
- :cond_2209
- const-string v1, "layout/fragment_parent_school_search_item_0"
-
- invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v1
-
- if-eqz v1, :cond_2217
-
- .line 1485
- new-instance v1, Lcom/classdojo/android/databinding/FragmentParentSchoolSearchItemBinding;
-
- invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/FragmentParentSchoolSearchItemBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
- return-object v1
-
- .line 1487
- :cond_2217
- new-instance v1, Ljava/lang/IllegalArgumentException;
-
- new-instance v2, Ljava/lang/StringBuilder;
-
- invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
- const-string v3, "The tag for fragment_parent_school_search_item is invalid. Received: "
-
- invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
- move-result-object v2
-
- invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 852
- .end local v0 # "tag":Ljava/lang/Object;
- :pswitch_222e
- invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
- move-result-object v0
-
- .line 853
- .restart local v0 # "tag":Ljava/lang/Object;
- if-nez v0, :cond_223d
-
- new-instance v1, Ljava/lang/RuntimeException;
-
- const-string v2, "view must have a tag"
-
- invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 854
- :cond_223d
- const-string v1, "layout/fragment_parent_school_search_0"
-
- invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v1
-
- if-eqz v1, :cond_224b
-
- .line 855
- new-instance v1, Lcom/classdojo/android/databinding/FragmentParentSchoolSearchBinding;
-
- invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/FragmentParentSchoolSearchBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
- return-object v1
-
- .line 857
- :cond_224b
- new-instance v1, Ljava/lang/IllegalArgumentException;
-
- new-instance v2, Ljava/lang/StringBuilder;
-
- invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
- const-string v3, "The tag for fragment_parent_school_search is invalid. Received: "
-
- invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
- move-result-object v2
-
- invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 2340
- .end local v0 # "tag":Ljava/lang/Object;
- :pswitch_2262
- invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
- move-result-object v0
-
- .line 2341
- .restart local v0 # "tag":Ljava/lang/Object;
- if-nez v0, :cond_2271
-
- new-instance v1, Ljava/lang/RuntimeException;
-
- const-string v2, "view must have a tag"
-
- invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 2342
- :cond_2271
- const-string v1, "layout/fragment_parent_connections_0"
-
- invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v1
-
- if-eqz v1, :cond_227f
-
- .line 2343
- new-instance v1, Lcom/classdojo/android/databinding/FragmentParentConnectionsBinding;
-
- invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/FragmentParentConnectionsBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
- return-object v1
-
- .line 2345
- :cond_227f
- new-instance v1, Ljava/lang/IllegalArgumentException;
-
- new-instance v2, Ljava/lang/StringBuilder;
-
- invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
- const-string v3, "The tag for fragment_parent_connections is invalid. Received: "
-
- invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
- move-result-object v2
-
- invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 1269
- .end local v0 # "tag":Ljava/lang/Object;
- :pswitch_2296
- invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
- move-result-object v0
-
- .line 1270
- .restart local v0 # "tag":Ljava/lang/Object;
- if-nez v0, :cond_22a5
-
- new-instance v1, Ljava/lang/RuntimeException;
-
- const-string v2, "view must have a tag"
-
- invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 1271
- :cond_22a5
- const-string v1, "layout/fragment_parent_connection_request_0"
-
- invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v1
-
- if-eqz v1, :cond_22b3
-
- .line 1272
- new-instance v1, Lcom/classdojo/android/databinding/FragmentParentConnectionRequestBinding;
-
- invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/FragmentParentConnectionRequestBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
- return-object v1
-
- .line 1274
- :cond_22b3
- new-instance v1, Ljava/lang/IllegalArgumentException;
-
- new-instance v2, Ljava/lang/StringBuilder;
-
- invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
- const-string v3, "The tag for fragment_parent_connection_request is invalid. Received: "
-
- invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
- move-result-object v2
-
- invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 1053
- .end local v0 # "tag":Ljava/lang/Object;
- :pswitch_22ca
- invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
- move-result-object v0
-
- .line 1054
- .restart local v0 # "tag":Ljava/lang/Object;
- if-nez v0, :cond_22d9
-
- new-instance v1, Ljava/lang/RuntimeException;
-
- const-string v2, "view must have a tag"
-
- invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 1055
- :cond_22d9
- const-string v1, "layout/fragment_parent_checklist_invite_family_item_0"
-
- invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v1
-
- if-eqz v1, :cond_22e7
-
- .line 1056
- new-instance v1, Lcom/classdojo/android/databinding/FragmentParentChecklistInviteFamilyItemBinding;
-
- invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/FragmentParentChecklistInviteFamilyItemBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
- return-object v1
-
- .line 1058
- :cond_22e7
- new-instance v1, Ljava/lang/IllegalArgumentException;
-
- new-instance v2, Ljava/lang/StringBuilder;
-
- invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
- const-string v3, "The tag for fragment_parent_checklist_invite_family_item is invalid. Received: "
-
- invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
- move-result-object v2
-
- invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 531
- .end local v0 # "tag":Ljava/lang/Object;
- :pswitch_22fe
- invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
- move-result-object v0
-
- .line 532
- .restart local v0 # "tag":Ljava/lang/Object;
- if-nez v0, :cond_230d
-
- new-instance v1, Ljava/lang/RuntimeException;
-
- const-string v2, "view must have a tag"
-
- invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 533
- :cond_230d
- const-string v1, "layout/fragment_parent_checklist_birthday_capture_item_0"
-
- invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v1
-
- if-eqz v1, :cond_231b
-
- .line 534
- new-instance v1, Lcom/classdojo/android/databinding/FragmentParentChecklistBirthdayCaptureItemBinding;
-
- invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/FragmentParentChecklistBirthdayCaptureItemBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
- return-object v1
-
- .line 536
- :cond_231b
- new-instance v1, Ljava/lang/IllegalArgumentException;
-
- new-instance v2, Ljava/lang/StringBuilder;
-
- invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
- const-string v3, "The tag for fragment_parent_checklist_birthday_capture_item is invalid. Received: "
-
- invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
- move-result-object v2
-
- invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 2169
- .end local v0 # "tag":Ljava/lang/Object;
- :pswitch_2332
- invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
- move-result-object v0
-
- .line 2170
- .restart local v0 # "tag":Ljava/lang/Object;
- if-nez v0, :cond_2341
-
- new-instance v1, Ljava/lang/RuntimeException;
-
- const-string v2, "view must have a tag"
-
- invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 2171
- :cond_2341
- const-string v1, "layout/fragment_parent_channel_list_0"
-
- invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v1
-
- if-eqz v1, :cond_234f
-
- .line 2172
- new-instance v1, Lcom/classdojo/android/databinding/FragmentParentChannelListBinding;
-
- invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/FragmentParentChannelListBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
- return-object v1
-
- .line 2174
- :cond_234f
- new-instance v1, Ljava/lang/IllegalArgumentException;
-
- new-instance v2, Ljava/lang/StringBuilder;
-
- invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
- const-string v3, "The tag for fragment_parent_channel_list is invalid. Received: "
-
- invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
- move-result-object v2
-
- invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 1437
- .end local v0 # "tag":Ljava/lang/Object;
- :pswitch_2366
- invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
- move-result-object v0
-
- .line 1438
- .restart local v0 # "tag":Ljava/lang/Object;
- if-nez v0, :cond_2375
-
- new-instance v1, Ljava/lang/RuntimeException;
-
- const-string v2, "view must have a tag"
-
- invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 1439
- :cond_2375
- const-string v1, "layout/fragment_parent_add_class_0"
-
- invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v1
-
- if-eqz v1, :cond_2383
-
- .line 1440
- new-instance v1, Lcom/classdojo/android/databinding/FragmentParentAddClassBinding;
-
- invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/FragmentParentAddClassBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
- return-object v1
-
- .line 1442
- :cond_2383
- new-instance v1, Ljava/lang/IllegalArgumentException;
-
- new-instance v2, Ljava/lang/StringBuilder;
-
- invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
- const-string v3, "The tag for fragment_parent_add_class is invalid. Received: "
-
- invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
- move-result-object v2
-
- invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 2079
- .end local v0 # "tag":Ljava/lang/Object;
- :pswitch_239a
- invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
- move-result-object v0
-
- .line 2080
- .restart local v0 # "tag":Ljava/lang/Object;
- if-nez v0, :cond_23a9
-
- new-instance v1, Ljava/lang/RuntimeException;
-
- const-string v2, "view must have a tag"
-
- invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 2081
- :cond_23a9
- const-string v1, "layout/fragment_parent_account_0"
-
- invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v1
-
- if-eqz v1, :cond_23b7
-
- .line 2082
- new-instance v1, Lcom/classdojo/android/databinding/FragmentParentAccountBinding;
-
- invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/FragmentParentAccountBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
- return-object v1
-
- .line 2084
- :cond_23b7
- new-instance v1, Ljava/lang/IllegalArgumentException;
-
- new-instance v2, Ljava/lang/StringBuilder;
-
- invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
- const-string v3, "The tag for fragment_parent_account is invalid. Received: "
-
- invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
- move-result-object v2
-
- invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 2457
- .end local v0 # "tag":Ljava/lang/Object;
- :pswitch_23ce
- invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
- move-result-object v0
-
- .line 2458
- .restart local v0 # "tag":Ljava/lang/Object;
- if-nez v0, :cond_23dd
-
- new-instance v1, Ljava/lang/RuntimeException;
-
- const-string v2, "view must have a tag"
-
- invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 2459
- :cond_23dd
- const-string v1, "layout/fragment_onboarding_student_avatar_editor_0"
-
- invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v1
-
- if-eqz v1, :cond_23eb
-
- .line 2460
- new-instance v1, Lcom/classdojo/android/databinding/FragmentOnboardingStudentAvatarEditorBinding;
-
- invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/FragmentOnboardingStudentAvatarEditorBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
- return-object v1
-
- .line 2462
- :cond_23eb
- new-instance v1, Ljava/lang/IllegalArgumentException;
-
- new-instance v2, Ljava/lang/StringBuilder;
-
- invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
- const-string v3, "The tag for fragment_onboarding_student_avatar_editor is invalid. Received: "
-
- invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
- move-result-object v2
-
- invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 342
- .end local v0 # "tag":Ljava/lang/Object;
- :pswitch_2402
- invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
- move-result-object v0
-
- .line 343
- .restart local v0 # "tag":Ljava/lang/Object;
- if-nez v0, :cond_2411
-
- new-instance v1, Ljava/lang/RuntimeException;
-
- const-string v2, "view must have a tag"
-
- invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 344
- :cond_2411
- const-string v1, "layout/fragment_onboarding_splash_user_role_0"
-
- invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v1
-
- if-eqz v1, :cond_241f
-
- .line 345
- new-instance v1, Lcom/classdojo/android/databinding/FragmentOnboardingSplashUserRoleBinding;
-
- invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/FragmentOnboardingSplashUserRoleBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
- return-object v1
-
- .line 347
- :cond_241f
- new-instance v1, Ljava/lang/IllegalArgumentException;
-
- new-instance v2, Ljava/lang/StringBuilder;
-
- invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
- const-string v3, "The tag for fragment_onboarding_splash_user_role is invalid. Received: "
-
- invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
- move-result-object v2
-
- invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 2115
- .end local v0 # "tag":Ljava/lang/Object;
- :pswitch_2436
- invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
- move-result-object v0
-
- .line 2116
- .restart local v0 # "tag":Ljava/lang/Object;
- if-nez v0, :cond_2445
-
- new-instance v1, Ljava/lang/RuntimeException;
-
- const-string v2, "view must have a tag"
-
- invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 2117
- :cond_2445
- const-string v1, "layout/fragment_onboarding_sign_up_title_0"
-
- invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v1
-
- if-eqz v1, :cond_2453
-
- .line 2118
- new-instance v1, Lcom/classdojo/android/databinding/FragmentOnboardingSignUpTitleBinding;
-
- invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/FragmentOnboardingSignUpTitleBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
- return-object v1
-
- .line 2120
- :cond_2453
- new-instance v1, Ljava/lang/IllegalArgumentException;
-
- new-instance v2, Ljava/lang/StringBuilder;
-
- invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
- const-string v3, "The tag for fragment_onboarding_sign_up_title is invalid. Received: "
-
- invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
- move-result-object v2
-
- invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 1464
- .end local v0 # "tag":Ljava/lang/Object;
- :pswitch_246a
- invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
- move-result-object v0
-
- .line 1465
- .restart local v0 # "tag":Ljava/lang/Object;
- if-nez v0, :cond_2479
-
- new-instance v1, Ljava/lang/RuntimeException;
-
- const-string v2, "view must have a tag"
-
- invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 1466
- :cond_2479
- const-string v1, "layout/fragment_onboarding_sign_up_parent_anti_abuse_0"
-
- invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v1
-
- if-eqz v1, :cond_2487
-
- .line 1467
- new-instance v1, Lcom/classdojo/android/databinding/FragmentOnboardingSignUpParentAntiAbuseBinding;
-
- invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/FragmentOnboardingSignUpParentAntiAbuseBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
- return-object v1
-
- .line 1469
- :cond_2487
- new-instance v1, Ljava/lang/IllegalArgumentException;
-
- new-instance v2, Ljava/lang/StringBuilder;
-
- invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
- const-string v3, "The tag for fragment_onboarding_sign_up_parent_anti_abuse is invalid. Received: "
-
- invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
- move-result-object v2
-
- invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 759
- .end local v0 # "tag":Ljava/lang/Object;
- :pswitch_249e
- invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
- move-result-object v0
-
- .line 760
- .restart local v0 # "tag":Ljava/lang/Object;
- if-nez v0, :cond_24ad
-
- new-instance v1, Ljava/lang/RuntimeException;
-
- const-string v2, "view must have a tag"
-
- invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 761
- :cond_24ad
- const-string v1, "layout/fragment_onboarding_sign_up_email_0"
-
- invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v1
-
- if-eqz v1, :cond_24bb
-
- .line 762
- new-instance v1, Lcom/classdojo/android/databinding/FragmentOnboardingSignUpEmailBinding;
-
- invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/FragmentOnboardingSignUpEmailBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
- return-object v1
-
- .line 764
- :cond_24bb
- new-instance v1, Ljava/lang/IllegalArgumentException;
-
- new-instance v2, Ljava/lang/StringBuilder;
-
- invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
- const-string v3, "The tag for fragment_onboarding_sign_up_email is invalid. Received: "
-
- invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
- move-result-object v2
-
- invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 111
- .end local v0 # "tag":Ljava/lang/Object;
- :pswitch_24d2
- invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
- move-result-object v0
-
- .line 112
- .restart local v0 # "tag":Ljava/lang/Object;
- if-nez v0, :cond_24e1
-
- new-instance v1, Ljava/lang/RuntimeException;
-
- const-string v2, "view must have a tag"
-
- invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 113
- :cond_24e1
- const-string v1, "layout/fragment_onboarding_sign_up_details_0"
-
- invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v1
-
- if-eqz v1, :cond_24ef
-
- .line 114
- new-instance v1, Lcom/classdojo/android/databinding/FragmentOnboardingSignUpDetailsBinding;
-
- invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/FragmentOnboardingSignUpDetailsBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
- return-object v1
-
- .line 116
- :cond_24ef
- new-instance v1, Ljava/lang/IllegalArgumentException;
-
- new-instance v2, Ljava/lang/StringBuilder;
-
- invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
- const-string v3, "The tag for fragment_onboarding_sign_up_details is invalid. Received: "
-
- invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
- move-result-object v2
-
- invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 477
- .end local v0 # "tag":Ljava/lang/Object;
- :pswitch_2506
- invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
- move-result-object v0
-
- .line 478
- .restart local v0 # "tag":Ljava/lang/Object;
- if-nez v0, :cond_2515
-
- new-instance v1, Ljava/lang/RuntimeException;
-
- const-string v2, "view must have a tag"
-
- invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 479
- :cond_2515
- const-string v1, "layout/fragment_onboarding_enter_code_0"
-
- invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v1
-
- if-eqz v1, :cond_2523
-
- .line 480
- new-instance v1, Lcom/classdojo/android/databinding/FragmentOnboardingEnterCodeBinding;
-
- invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/FragmentOnboardingEnterCodeBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
- return-object v1
-
- .line 482
- :cond_2523
- new-instance v1, Ljava/lang/IllegalArgumentException;
-
- new-instance v2, Ljava/lang/StringBuilder;
-
- invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
- const-string v3, "The tag for fragment_onboarding_enter_code is invalid. Received: "
-
- invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
- move-result-object v2
-
- invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 1608
- .end local v0 # "tag":Ljava/lang/Object;
- :pswitch_253a
- invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
- move-result-object v0
-
- .line 1609
- .restart local v0 # "tag":Ljava/lang/Object;
- if-nez v0, :cond_2549
-
- new-instance v1, Ljava/lang/RuntimeException;
-
- const-string v2, "view must have a tag"
-
- invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 1610
- :cond_2549
- const-string v1, "layout/fragment_onboarding_enable_camera_primer_0"
-
- invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v1
-
- if-eqz v1, :cond_2557
-
- .line 1611
- new-instance v1, Lcom/classdojo/android/databinding/FragmentOnboardingEnableCameraPrimerBinding;
-
- invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/FragmentOnboardingEnableCameraPrimerBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
- return-object v1
-
- .line 1613
- :cond_2557
- new-instance v1, Ljava/lang/IllegalArgumentException;
-
- new-instance v2, Ljava/lang/StringBuilder;
-
- invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
- const-string v3, "The tag for fragment_onboarding_enable_camera_primer is invalid. Received: "
-
- invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
- move-result-object v2
-
- invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 612
- .end local v0 # "tag":Ljava/lang/Object;
- :pswitch_256e
- invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
- move-result-object v0
-
- .line 613
- .restart local v0 # "tag":Ljava/lang/Object;
- if-nez v0, :cond_257d
-
- new-instance v1, Ljava/lang/RuntimeException;
-
- const-string v2, "view must have a tag"
-
- invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 614
- :cond_257d
- const-string v1, "layout/fragment_message_recipients_0"
-
- invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v1
-
- if-eqz v1, :cond_258b
-
- .line 615
- new-instance v1, Lcom/classdojo/android/databinding/FragmentMessageRecipientsBinding;
-
- invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/FragmentMessageRecipientsBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
- return-object v1
-
- .line 617
- :cond_258b
- new-instance v1, Ljava/lang/IllegalArgumentException;
-
- new-instance v2, Ljava/lang/StringBuilder;
-
- invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
- const-string v3, "The tag for fragment_message_recipients is invalid. Received: "
-
- invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
- move-result-object v2
-
- invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 2205
- .end local v0 # "tag":Ljava/lang/Object;
- :pswitch_25a2
- invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
- move-result-object v0
-
- .line 2206
- .restart local v0 # "tag":Ljava/lang/Object;
- if-nez v0, :cond_25b1
-
- new-instance v1, Ljava/lang/RuntimeException;
-
- const-string v2, "view must have a tag"
-
- invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 2207
- :cond_25b1
- const-string v1, "layout/fragment_meet_teacher_item_0"
-
- invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v1
-
- if-eqz v1, :cond_25bf
-
- .line 2208
- new-instance v1, Lcom/classdojo/android/databinding/FragmentMeetTeacherItemBinding;
-
- invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/FragmentMeetTeacherItemBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
- return-object v1
-
- .line 2210
- :cond_25bf
- new-instance v1, Ljava/lang/IllegalArgumentException;
-
- new-instance v2, Ljava/lang/StringBuilder;
-
- invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
- const-string v3, "The tag for fragment_meet_teacher_item is invalid. Received: "
-
- invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
- move-result-object v2
-
- invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 1023
- .end local v0 # "tag":Ljava/lang/Object;
- :pswitch_25d6
- invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
- move-result-object v0
-
- .line 1024
- .restart local v0 # "tag":Ljava/lang/Object;
- if-nez v0, :cond_25e5
-
- new-instance v1, Ljava/lang/RuntimeException;
-
- const-string v2, "view must have a tag"
-
- invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 1025
- :cond_25e5
- const-string v1, "layout-sw600dp/fragment_mark_students_0"
-
- invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v1
-
- if-eqz v1, :cond_25f3
-
- .line 1026
- new-instance v1, Lcom/classdojo/android/databinding/FragmentMarkStudentsBindingSw600dpImpl;
-
- invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/FragmentMarkStudentsBindingSw600dpImpl;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
- return-object v1
-
- .line 1028
- :cond_25f3
- const-string v1, "layout/fragment_mark_students_0"
-
- invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v1
-
- if-eqz v1, :cond_2601
-
- .line 1029
- new-instance v1, Lcom/classdojo/android/databinding/FragmentMarkStudentsBindingImpl;
-
- invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/FragmentMarkStudentsBindingImpl;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
- return-object v1
-
- .line 1031
- :cond_2601
- new-instance v1, Ljava/lang/IllegalArgumentException;
-
- new-instance v2, Ljava/lang/StringBuilder;
-
- invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
- const-string v3, "The tag for fragment_mark_students is invalid. Received: "
-
- invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
- move-result-object v2
-
- invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 189
- .end local v0 # "tag":Ljava/lang/Object;
- :pswitch_2618
- invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
- move-result-object v0
-
- .line 190
- .restart local v0 # "tag":Ljava/lang/Object;
- if-nez v0, :cond_2627
-
- new-instance v1, Ljava/lang/RuntimeException;
-
- const-string v2, "view must have a tag"
-
- invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 191
- :cond_2627
- const-string v1, "layout/fragment_login_0"
-
- invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v1
-
- if-eqz v1, :cond_2635
-
- .line 192
- new-instance v1, Lcom/classdojo/android/databinding/FragmentLoginBinding;
-
- invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/FragmentLoginBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
- return-object v1
-
- .line 194
- :cond_2635
- new-instance v1, Ljava/lang/IllegalArgumentException;
-
- new-instance v2, Ljava/lang/StringBuilder;
-
- invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
- const-string v3, "The tag for fragment_login is invalid. Received: "
-
- invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
- move-result-object v2
-
- invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 2277
- .end local v0 # "tag":Ljava/lang/Object;
- :pswitch_264c
- invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
- move-result-object v0
-
- .line 2278
- .restart local v0 # "tag":Ljava/lang/Object;
- if-nez v0, :cond_265b
-
- new-instance v1, Ljava/lang/RuntimeException;
-
- const-string v2, "view must have a tag"
-
- invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 2279
- :cond_265b
- const-string v1, "layout/fragment_leader_sign_up_role_0"
-
- invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v1
-
- if-eqz v1, :cond_2669
-
- .line 2280
- new-instance v1, Lcom/classdojo/android/databinding/FragmentLeaderSignUpRoleBinding;
-
- invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/FragmentLeaderSignUpRoleBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
- return-object v1
-
- .line 2282
- :cond_2669
- new-instance v1, Ljava/lang/IllegalArgumentException;
-
- new-instance v2, Ljava/lang/StringBuilder;
-
- invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
- const-string v3, "The tag for fragment_leader_sign_up_role is invalid. Received: "
-
- invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
- move-result-object v2
-
- invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 1626
- .end local v0 # "tag":Ljava/lang/Object;
- :pswitch_2680
- invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
- move-result-object v0
-
- .line 1627
- .restart local v0 # "tag":Ljava/lang/Object;
- if-nez v0, :cond_268f
-
- new-instance v1, Ljava/lang/RuntimeException;
-
- const-string v2, "view must have a tag"
-
- invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 1628
- :cond_268f
- const-string v1, "layout/fragment_kids_list_0"
-
- invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v1
-
- if-eqz v1, :cond_269d
-
- .line 1629
- new-instance v1, Lcom/classdojo/android/databinding/FragmentKidsListBinding;
-
- invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/FragmentKidsListBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
- return-object v1
-
- .line 1631
- :cond_269d
- new-instance v1, Ljava/lang/IllegalArgumentException;
-
- new-instance v2, Ljava/lang/StringBuilder;
-
- invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
- const-string v3, "The tag for fragment_kids_list is invalid. Received: "
-
- invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
- move-result-object v2
-
- invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 2232
- .end local v0 # "tag":Ljava/lang/Object;
- :pswitch_26b4
- invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
- move-result-object v0
-
- .line 2233
- .restart local v0 # "tag":Ljava/lang/Object;
- if-nez v0, :cond_26c3
-
- new-instance v1, Ljava/lang/RuntimeException;
-
- const-string v2, "view must have a tag"
-
- invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 2234
- :cond_26c3
- const-string v1, "layout/fragment_invite_item_header_0"
-
- invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v1
-
- if-eqz v1, :cond_26d1
-
- .line 2235
- new-instance v1, Lcom/classdojo/android/databinding/FragmentInviteItemHeaderBinding;
-
- invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/FragmentInviteItemHeaderBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
- return-object v1
-
- .line 2237
- :cond_26d1
- new-instance v1, Ljava/lang/IllegalArgumentException;
-
- new-instance v2, Ljava/lang/StringBuilder;
-
- invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
- const-string v3, "The tag for fragment_invite_item_header is invalid. Received: "
-
- invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
- move-result-object v2
-
- invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 897
- .end local v0 # "tag":Ljava/lang/Object;
- :pswitch_26e8
- invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
- move-result-object v0
-
- .line 898
- .restart local v0 # "tag":Ljava/lang/Object;
- if-nez v0, :cond_26f7
-
- new-instance v1, Ljava/lang/RuntimeException;
-
- const-string v2, "view must have a tag"
-
- invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 899
- :cond_26f7
- const-string v1, "layout/fragment_hold_tight_item_0"
-
- invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v1
-
- if-eqz v1, :cond_2705
-
- .line 900
- new-instance v1, Lcom/classdojo/android/databinding/FragmentHoldTightItemBinding;
-
- invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/FragmentHoldTightItemBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
- return-object v1
-
- .line 902
- :cond_2705
- new-instance v1, Ljava/lang/IllegalArgumentException;
-
- new-instance v2, Ljava/lang/StringBuilder;
-
- invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
- const-string v3, "The tag for fragment_hold_tight_item is invalid. Received: "
-
- invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
- move-result-object v2
-
- invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 2403
- .end local v0 # "tag":Ljava/lang/Object;
- :pswitch_271c
- invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
- move-result-object v0
-
- .line 2404
- .restart local v0 # "tag":Ljava/lang/Object;
- if-nez v0, :cond_272b
-
- new-instance v1, Ljava/lang/RuntimeException;
-
- const-string v2, "view must have a tag"
-
- invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 2405
- :cond_272b
- const-string v1, "layout/fragment_forgot_password_0"
-
- invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v1
-
- if-eqz v1, :cond_2739
-
- .line 2406
- new-instance v1, Lcom/classdojo/android/databinding/FragmentForgotPasswordBinding;
-
- invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/FragmentForgotPasswordBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
- return-object v1
-
- .line 2408
- :cond_2739
- new-instance v1, Ljava/lang/IllegalArgumentException;
-
- new-instance v2, Ljava/lang/StringBuilder;
-
- invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
- const-string v3, "The tag for fragment_forgot_password is invalid. Received: "
-
- invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
- move-result-object v2
-
- invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 2565
- .end local v0 # "tag":Ljava/lang/Object;
- :pswitch_2750
- invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
- move-result-object v0
-
- .line 2566
- .restart local v0 # "tag":Ljava/lang/Object;
- if-nez v0, :cond_275f
-
- new-instance v1, Ljava/lang/RuntimeException;
-
- const-string v2, "view must have a tag"
-
- invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 2567
- :cond_275f
- const-string v1, "layout/fragment_enter_student_mode_qr_0"
-
- invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v1
-
- if-eqz v1, :cond_276d
-
- .line 2568
- new-instance v1, Lcom/classdojo/android/databinding/FragmentEnterStudentModeQrBinding;
-
- invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/FragmentEnterStudentModeQrBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
- return-object v1
-
- .line 2570
- :cond_276d
- new-instance v1, Ljava/lang/IllegalArgumentException;
-
- new-instance v2, Ljava/lang/StringBuilder;
-
- invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
- const-string v3, "The tag for fragment_enter_student_mode_qr is invalid. Received: "
-
- invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
- move-result-object v2
-
- invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 1107
- .end local v0 # "tag":Ljava/lang/Object;
- :pswitch_2784
- invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
- move-result-object v0
-
- .line 1108
- .restart local v0 # "tag":Ljava/lang/Object;
- if-nez v0, :cond_2793
-
- new-instance v1, Ljava/lang/RuntimeException;
-
- const-string v2, "view must have a tag"
-
- invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 1109
- :cond_2793
- const-string v1, "layout/fragment_edit_students_item_0"
-
- invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v1
-
- if-eqz v1, :cond_27a1
-
- .line 1110
- new-instance v1, Lcom/classdojo/android/databinding/FragmentEditStudentsItemBinding;
-
- invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/FragmentEditStudentsItemBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
- return-object v1
-
- .line 1112
- :cond_27a1
- new-instance v1, Ljava/lang/IllegalArgumentException;
-
- new-instance v2, Ljava/lang/StringBuilder;
-
- invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
- const-string v3, "The tag for fragment_edit_students_item is invalid. Received: "
-
- invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
- move-result-object v2
-
- invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 1725
- .end local v0 # "tag":Ljava/lang/Object;
- :pswitch_27b8
- invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
- move-result-object v0
-
- .line 1726
- .restart local v0 # "tag":Ljava/lang/Object;
- if-nez v0, :cond_27c7
-
- new-instance v1, Ljava/lang/RuntimeException;
-
- const-string v2, "view must have a tag"
-
- invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 1727
- :cond_27c7
- const-string v1, "layout/fragment_edit_students_0"
-
- invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v1
-
- if-eqz v1, :cond_27d5
-
- .line 1728
- new-instance v1, Lcom/classdojo/android/databinding/FragmentEditStudentsBinding;
-
- invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/FragmentEditStudentsBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
- return-object v1
-
- .line 1730
- :cond_27d5
- new-instance v1, Ljava/lang/IllegalArgumentException;
-
- new-instance v2, Ljava/lang/StringBuilder;
-
- invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
- const-string v3, "The tag for fragment_edit_students is invalid. Received: "
-
- invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
- move-result-object v2
-
- invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 1350
- .end local v0 # "tag":Ljava/lang/Object;
- :pswitch_27ec
- invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
- move-result-object v0
-
- .line 1351
- .restart local v0 # "tag":Ljava/lang/Object;
- if-nez v0, :cond_27fb
-
- new-instance v1, Ljava/lang/RuntimeException;
-
- const-string v2, "view must have a tag"
-
- invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 1352
- :cond_27fb
- const-string v1, "layout/fragment_edit_behaviours_0"
-
- invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v1
-
- if-eqz v1, :cond_2809
-
- .line 1353
- new-instance v1, Lcom/classdojo/android/databinding/FragmentEditBehavioursBinding;
-
- invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/FragmentEditBehavioursBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
- return-object v1
-
- .line 1355
- :cond_2809
- new-instance v1, Ljava/lang/IllegalArgumentException;
-
- new-instance v2, Ljava/lang/StringBuilder;
-
- invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
- const-string v3, "The tag for fragment_edit_behaviours is invalid. Received: "
-
- invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
- move-result-object v2
-
- invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 1089
- .end local v0 # "tag":Ljava/lang/Object;
- :pswitch_2820
- invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
- move-result-object v0
-
- .line 1090
- .restart local v0 # "tag":Ljava/lang/Object;
- if-nez v0, :cond_282f
-
- new-instance v1, Ljava/lang/RuntimeException;
-
- const-string v2, "view must have a tag"
-
- invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 1091
- :cond_282f
- const-string v1, "layout/fragment_dojo_photo_preview_0"
-
- invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v1
-
- if-eqz v1, :cond_283d
-
- .line 1092
- new-instance v1, Lcom/classdojo/android/databinding/FragmentDojoPhotoPreviewBinding;
-
- invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/FragmentDojoPhotoPreviewBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
- return-object v1
-
- .line 1094
- :cond_283d
- new-instance v1, Ljava/lang/IllegalArgumentException;
-
- new-instance v2, Ljava/lang/StringBuilder;
-
- invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
- const-string v3, "The tag for fragment_dojo_photo_preview is invalid. Received: "
-
- invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
- move-result-object v2
-
- invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 171
- .end local v0 # "tag":Ljava/lang/Object;
- :pswitch_2854
- invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
- move-result-object v0
-
- .line 172
- .restart local v0 # "tag":Ljava/lang/Object;
- if-nez v0, :cond_2863
-
- new-instance v1, Ljava/lang/RuntimeException;
-
- const-string v2, "view must have a tag"
-
- invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 173
- :cond_2863
- const-string v1, "layout/fragment_dojo_camera_tooltip_0"
-
- invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v1
-
- if-eqz v1, :cond_2871
-
- .line 174
- new-instance v1, Lcom/classdojo/android/databinding/FragmentDojoCameraTooltipBinding;
-
- invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/FragmentDojoCameraTooltipBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
- return-object v1
-
- .line 176
- :cond_2871
- new-instance v1, Ljava/lang/IllegalArgumentException;
-
- new-instance v2, Ljava/lang/StringBuilder;
-
- invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
- const-string v3, "The tag for fragment_dojo_camera_tooltip is invalid. Received: "
-
- invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
- move-result-object v2
-
- invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 360
- .end local v0 # "tag":Ljava/lang/Object;
- :pswitch_2888
- invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
- move-result-object v0
-
- .line 361
- .restart local v0 # "tag":Ljava/lang/Object;
- if-nez v0, :cond_2897
-
- new-instance v1, Ljava/lang/RuntimeException;
-
- const-string v2, "view must have a tag"
-
- invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 362
- :cond_2897
- const-string v1, "layout-sw600dp/fragment_dojo_camera_controls_90_0"
-
- invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v1
-
- if-eqz v1, :cond_28a5
-
- .line 363
- new-instance v1, Lcom/classdojo/android/databinding/FragmentDojoCameraControls90Binding;
-
- invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/FragmentDojoCameraControls90Binding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
- return-object v1
-
- .line 365
- :cond_28a5
- new-instance v1, Ljava/lang/IllegalArgumentException;
-
- new-instance v2, Ljava/lang/StringBuilder;
-
- invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
- const-string v3, "The tag for fragment_dojo_camera_controls_90 is invalid. Received: "
-
- invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
- move-result-object v2
-
- invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 1179
- .end local v0 # "tag":Ljava/lang/Object;
- :pswitch_28bc
- invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
- move-result-object v0
-
- .line 1180
- .restart local v0 # "tag":Ljava/lang/Object;
- if-nez v0, :cond_28cb
-
- new-instance v1, Ljava/lang/RuntimeException;
-
- const-string v2, "view must have a tag"
-
- invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 1181
- :cond_28cb
- const-string v1, "layout-sw600dp/fragment_dojo_camera_controls_270_0"
-
- invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v1
-
- if-eqz v1, :cond_28d9
-
- .line 1182
- new-instance v1, Lcom/classdojo/android/databinding/FragmentDojoCameraControls270Binding;
-
- invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/FragmentDojoCameraControls270Binding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
- return-object v1
-
- .line 1184
- :cond_28d9
- new-instance v1, Ljava/lang/IllegalArgumentException;
-
- new-instance v2, Ljava/lang/StringBuilder;
-
- invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
- const-string v3, "The tag for fragment_dojo_camera_controls_270 is invalid. Received: "
-
- invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
- move-result-object v2
-
- invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 1956
- .end local v0 # "tag":Ljava/lang/Object;
- :pswitch_28f0
- invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
- move-result-object v0
-
- .line 1957
- .restart local v0 # "tag":Ljava/lang/Object;
- if-nez v0, :cond_28ff
-
- new-instance v1, Ljava/lang/RuntimeException;
-
- const-string v2, "view must have a tag"
-
- invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 1958
- :cond_28ff
- const-string v1, "layout-sw600dp/fragment_dojo_camera_controls_180_0"
-
- invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v1
-
- if-eqz v1, :cond_290d
-
- .line 1959
- new-instance v1, Lcom/classdojo/android/databinding/FragmentDojoCameraControls180Binding;
-
- invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/FragmentDojoCameraControls180Binding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
- return-object v1
-
- .line 1961
- :cond_290d
- new-instance v1, Ljava/lang/IllegalArgumentException;
-
- new-instance v2, Ljava/lang/StringBuilder;
-
- invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
- const-string v3, "The tag for fragment_dojo_camera_controls_180 is invalid. Received: "
-
- invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
- move-result-object v2
-
- invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 2001
- .end local v0 # "tag":Ljava/lang/Object;
- :pswitch_2924
- invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
- move-result-object v0
-
- .line 2002
- .restart local v0 # "tag":Ljava/lang/Object;
- if-nez v0, :cond_2933
-
- new-instance v1, Ljava/lang/RuntimeException;
-
- const-string v2, "view must have a tag"
-
- invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 2003
- :cond_2933
- const-string v1, "layout-sw600dp/fragment_dojo_camera_controls_0_0"
-
- invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v1
-
- if-eqz v1, :cond_2941
-
- .line 2004
- new-instance v1, Lcom/classdojo/android/databinding/FragmentDojoCameraControls0BindingSw600dpImpl;
-
- invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/FragmentDojoCameraControls0BindingSw600dpImpl;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
- return-object v1
-
- .line 2006
- :cond_2941
- const-string v1, "layout/fragment_dojo_camera_controls_0_0"
-
- invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v1
-
- if-eqz v1, :cond_294f
-
- .line 2007
- new-instance v1, Lcom/classdojo/android/databinding/FragmentDojoCameraControls0BindingImpl;
-
- invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/FragmentDojoCameraControls0BindingImpl;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
- return-object v1
-
- .line 2009
- :cond_294f
- new-instance v1, Ljava/lang/IllegalArgumentException;
-
- new-instance v2, Ljava/lang/StringBuilder;
-
- invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
- const-string v3, "The tag for fragment_dojo_camera_controls_0 is invalid. Received: "
-
- invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
- move-result-object v2
-
- invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 2040
- .end local v0 # "tag":Ljava/lang/Object;
- :pswitch_2966
- invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
- move-result-object v0
-
- .line 2041
- .restart local v0 # "tag":Ljava/lang/Object;
- if-nez v0, :cond_2975
-
- new-instance v1, Ljava/lang/RuntimeException;
-
- const-string v2, "view must have a tag"
-
- invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 2042
- :cond_2975
- const-string v1, "layout/fragment_dojo_camera_0"
-
- invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v1
-
- if-eqz v1, :cond_2983
-
- .line 2043
- new-instance v1, Lcom/classdojo/android/databinding/FragmentDojoCameraBinding;
-
- invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/FragmentDojoCameraBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
- return-object v1
-
- .line 2045
- :cond_2983
- new-instance v1, Ljava/lang/IllegalArgumentException;
-
- new-instance v2, Ljava/lang/StringBuilder;
-
- invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
- const-string v3, "The tag for fragment_dojo_camera is invalid. Received: "
-
- invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
- move-result-object v2
-
- invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 2160
- .end local v0 # "tag":Ljava/lang/Object;
- :pswitch_299a
- invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
- move-result-object v0
-
- .line 2161
- .restart local v0 # "tag":Ljava/lang/Object;
- if-nez v0, :cond_29a9
-
- new-instance v1, Ljava/lang/RuntimeException;
-
- const-string v2, "view must have a tag"
-
- invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 2162
- :cond_29a9
- const-string v1, "layout/fragment_create_school_0"
-
- invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v1
-
- if-eqz v1, :cond_29b7
-
- .line 2163
- new-instance v1, Lcom/classdojo/android/databinding/FragmentCreateSchoolBinding;
-
- invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/FragmentCreateSchoolBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
- return-object v1
-
- .line 2165
- :cond_29b7
- new-instance v1, Ljava/lang/IllegalArgumentException;
-
- new-instance v2, Ljava/lang/StringBuilder;
-
- invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
- const-string v3, "The tag for fragment_create_school is invalid. Received: "
-
- invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
- move-result-object v2
-
- invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 1992
- .end local v0 # "tag":Ljava/lang/Object;
- :pswitch_29ce
- invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
- move-result-object v0
-
- .line 1993
- .restart local v0 # "tag":Ljava/lang/Object;
- if-nez v0, :cond_29dd
-
- new-instance v1, Ljava/lang/RuntimeException;
-
- const-string v2, "view must have a tag"
-
- invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 1994
- :cond_29dd
- const-string v1, "layout/fragment_create_account_splash_0"
-
- invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v1
-
- if-eqz v1, :cond_29eb
-
- .line 1995
- new-instance v1, Lcom/classdojo/android/databinding/FragmentCreateAccountSplashBinding;
-
- invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/FragmentCreateAccountSplashBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
- return-object v1
-
- .line 1997
- :cond_29eb
- new-instance v1, Ljava/lang/IllegalArgumentException;
-
- new-instance v2, Ljava/lang/StringBuilder;
-
- invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
- const-string v3, "The tag for fragment_create_account_splash is invalid. Received: "
-
- invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
- move-result-object v2
-
- invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 39
- .end local v0 # "tag":Ljava/lang/Object;
- :pswitch_2a02
- invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
- move-result-object v0
-
- .line 40
- .restart local v0 # "tag":Ljava/lang/Object;
- if-nez v0, :cond_2a11
-
- new-instance v1, Ljava/lang/RuntimeException;
-
- const-string v2, "view must have a tag"
-
- invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 41
- :cond_2a11
- const-string v1, "layout/fragment_combined_fullscreen_photo_preview_0"
-
- invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v1
-
- if-eqz v1, :cond_2a1f
-
- .line 42
- new-instance v1, Lcom/classdojo/android/databinding/FragmentCombinedFullscreenPhotoPreviewBinding;
-
- invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/FragmentCombinedFullscreenPhotoPreviewBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
- return-object v1
-
- .line 44
- :cond_2a1f
- new-instance v1, Ljava/lang/IllegalArgumentException;
-
- new-instance v2, Ljava/lang/StringBuilder;
-
- invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
- const-string v3, "The tag for fragment_combined_fullscreen_photo_preview is invalid. Received: "
-
- invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
- move-result-object v2
-
- invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 870
- .end local v0 # "tag":Ljava/lang/Object;
- :pswitch_2a36
- invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
- move-result-object v0
-
- .line 871
- .restart local v0 # "tag":Ljava/lang/Object;
- if-nez v0, :cond_2a45
-
- new-instance v1, Ljava/lang/RuntimeException;
-
- const-string v2, "view must have a tag"
-
- invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 872
- :cond_2a45
- const-string v1, "layout/fragment_combined_drawing_0"
-
- invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v1
-
- if-eqz v1, :cond_2a53
-
- .line 873
- new-instance v1, Lcom/classdojo/android/databinding/FragmentCombinedDrawingBinding;
-
- invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/FragmentCombinedDrawingBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
- return-object v1
-
- .line 875
- :cond_2a53
- new-instance v1, Ljava/lang/IllegalArgumentException;
-
- new-instance v2, Ljava/lang/StringBuilder;
-
- invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
- const-string v3, "The tag for fragment_combined_drawing is invalid. Received: "
-
- invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
- move-result-object v2
-
- invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 1590
- .end local v0 # "tag":Ljava/lang/Object;
- :pswitch_2a6a
- invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
- move-result-object v0
-
- .line 1591
- .restart local v0 # "tag":Ljava/lang/Object;
- if-nez v0, :cond_2a79
-
- new-instance v1, Ljava/lang/RuntimeException;
-
- const-string v2, "view must have a tag"
-
- invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 1592
- :cond_2a79
- const-string v1, "layout/fragment_combined_camera_preview_0"
-
- invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v1
-
- if-eqz v1, :cond_2a87
-
- .line 1593
- new-instance v1, Lcom/classdojo/android/databinding/FragmentCombinedCameraPreviewBinding;
-
- invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/FragmentCombinedCameraPreviewBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
- return-object v1
-
- .line 1595
- :cond_2a87
- new-instance v1, Ljava/lang/IllegalArgumentException;
-
- new-instance v2, Ljava/lang/StringBuilder;
-
- invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
- const-string v3, "The tag for fragment_combined_camera_preview is invalid. Received: "
-
- invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
- move-result-object v2
-
- invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 732
- .end local v0 # "tag":Ljava/lang/Object;
- :pswitch_2a9e
- invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
- move-result-object v0
-
- .line 733
- .restart local v0 # "tag":Ljava/lang/Object;
- if-nez v0, :cond_2aad
-
- new-instance v1, Ljava/lang/RuntimeException;
-
- const-string v2, "view must have a tag"
-
- invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 734
- :cond_2aad
- const-string v1, "layout/fragment_combined_camera_controls_0"
-
- invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v1
-
- if-eqz v1, :cond_2abb
-
- .line 735
- new-instance v1, Lcom/classdojo/android/databinding/FragmentCombinedCameraControlsBinding;
-
- invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/FragmentCombinedCameraControlsBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
- return-object v1
-
- .line 737
- :cond_2abb
- new-instance v1, Ljava/lang/IllegalArgumentException;
-
- new-instance v2, Ljava/lang/StringBuilder;
-
- invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
- const-string v3, "The tag for fragment_combined_camera_controls is invalid. Received: "
-
- invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
- move-result-object v2
-
- invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 933
- .end local v0 # "tag":Ljava/lang/Object;
- :pswitch_2ad2
- invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
- move-result-object v0
-
- .line 934
- .restart local v0 # "tag":Ljava/lang/Object;
- if-nez v0, :cond_2ae1
-
- new-instance v1, Ljava/lang/RuntimeException;
-
- const-string v2, "view must have a tag"
-
- invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 935
- :cond_2ae1
- const-string v1, "layout/fragment_combined_camera_compose_0"
-
- invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v1
-
- if-eqz v1, :cond_2aef
-
- .line 936
- new-instance v1, Lcom/classdojo/android/databinding/FragmentCombinedCameraComposeBinding;
-
- invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/FragmentCombinedCameraComposeBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
- return-object v1
-
- .line 938
- :cond_2aef
- new-instance v1, Ljava/lang/IllegalArgumentException;
-
- new-instance v2, Ljava/lang/StringBuilder;
-
- invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
- const-string v3, "The tag for fragment_combined_camera_compose is invalid. Received: "
-
- invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
- move-result-object v2
-
- invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 1761
- .end local v0 # "tag":Ljava/lang/Object;
- :pswitch_2b06
- invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
- move-result-object v0
-
- .line 1762
- .restart local v0 # "tag":Ljava/lang/Object;
- if-nez v0, :cond_2b15
-
- new-instance v1, Ljava/lang/RuntimeException;
-
- const-string v2, "view must have a tag"
-
- invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 1763
- :cond_2b15
- const-string v1, "layout/fragment_combined_camera_0"
-
- invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v1
-
- if-eqz v1, :cond_2b23
-
- .line 1764
- new-instance v1, Lcom/classdojo/android/databinding/FragmentCombinedCameraBinding;
-
- invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/FragmentCombinedCameraBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
- return-object v1
-
- .line 1766
- :cond_2b23
- new-instance v1, Ljava/lang/IllegalArgumentException;
-
- new-instance v2, Ljava/lang/StringBuilder;
-
- invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
- const-string v3, "The tag for fragment_combined_camera is invalid. Received: "
-
- invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
- move-result-object v2
-
- invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 66
- .end local v0 # "tag":Ljava/lang/Object;
- :pswitch_2b3a
- invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
- move-result-object v0
-
- .line 67
- .restart local v0 # "tag":Ljava/lang/Object;
- if-nez v0, :cond_2b49
-
- new-instance v1, Ljava/lang/RuntimeException;
-
- const-string v2, "view must have a tag"
-
- invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 68
- :cond_2b49
- const-string v1, "layout/fragment_classroom_0"
-
- invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v1
-
- if-eqz v1, :cond_2b57
-
- .line 69
- new-instance v1, Lcom/classdojo/android/databinding/FragmentClassroomBinding;
-
- invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/FragmentClassroomBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
- return-object v1
-
- .line 71
- :cond_2b57
- new-instance v1, Ljava/lang/IllegalArgumentException;
-
- new-instance v2, Ljava/lang/StringBuilder;
-
- invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
- const-string v3, "The tag for fragment_classroom is invalid. Received: "
-
- invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
- move-result-object v2
-
- invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 21
- .end local v0 # "tag":Ljava/lang/Object;
- :pswitch_2b6e
- invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
- move-result-object v0
-
- .line 22
- .restart local v0 # "tag":Ljava/lang/Object;
- if-nez v0, :cond_2b7d
-
- new-instance v1, Ljava/lang/RuntimeException;
-
- const-string v2, "view must have a tag"
-
- invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 23
- :cond_2b7d
- const-string v1, "layout/fragment_class_wall_settings_0"
-
- invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v1
-
- if-eqz v1, :cond_2b8b
-
- .line 24
- new-instance v1, Lcom/classdojo/android/databinding/FragmentClassWallSettingsBinding;
-
- invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/FragmentClassWallSettingsBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
- return-object v1
-
- .line 26
- :cond_2b8b
- new-instance v1, Ljava/lang/IllegalArgumentException;
-
- new-instance v2, Ljava/lang/StringBuilder;
-
- invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
- const-string v3, "The tag for fragment_class_wall_settings is invalid. Received: "
-
- invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
- move-result-object v2
-
- invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 666
- .end local v0 # "tag":Ljava/lang/Object;
- :pswitch_2ba2
- invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
- move-result-object v0
-
- .line 667
- .restart local v0 # "tag":Ljava/lang/Object;
- if-nez v0, :cond_2bb1
-
- new-instance v1, Ljava/lang/RuntimeException;
-
- const-string v2, "view must have a tag"
-
- invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 668
- :cond_2bb1
- const-string v1, "layout/fragment_class_wall_compose_0"
-
- invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v1
-
- if-eqz v1, :cond_2bbf
-
- .line 669
- new-instance v1, Lcom/classdojo/android/databinding/FragmentClassWallComposeBinding;
-
- invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/FragmentClassWallComposeBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
- return-object v1
-
- .line 671
- :cond_2bbf
- new-instance v1, Ljava/lang/IllegalArgumentException;
-
- new-instance v2, Ljava/lang/StringBuilder;
-
- invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
- const-string v3, "The tag for fragment_class_wall_compose is invalid. Received: "
-
- invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
- move-result-object v2
-
- invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 1404
- .end local v0 # "tag":Ljava/lang/Object;
- :pswitch_2bd6
- invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
- move-result-object v0
-
- .line 1405
- .restart local v0 # "tag":Ljava/lang/Object;
- if-nez v0, :cond_2be5
-
- new-instance v1, Ljava/lang/RuntimeException;
-
- const-string v2, "view must have a tag"
-
- invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 1406
- :cond_2be5
- const-string v1, "layout/fragment_class_list_item_teacher_0"
-
- invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v1
-
- if-eqz v1, :cond_2bf3
-
- .line 1407
- new-instance v1, Lcom/classdojo/android/databinding/FragmentClassListItemTeacherBinding;
-
- invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/FragmentClassListItemTeacherBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
- return-object v1
-
- .line 1409
- :cond_2bf3
- new-instance v1, Ljava/lang/IllegalArgumentException;
-
- new-instance v2, Ljava/lang/StringBuilder;
-
- invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
- const-string v3, "The tag for fragment_class_list_item_teacher is invalid. Received: "
-
- invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
- move-result-object v2
-
- invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 1653
- .end local v0 # "tag":Ljava/lang/Object;
- :pswitch_2c0a
- invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
- move-result-object v0
-
- .line 1654
- .restart local v0 # "tag":Ljava/lang/Object;
- if-nez v0, :cond_2c19
-
- new-instance v1, Ljava/lang/RuntimeException;
-
- const-string v2, "view must have a tag"
-
- invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 1655
- :cond_2c19
- const-string v1, "layout/fragment_class_list_item_school_0"
-
- invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v1
-
- if-eqz v1, :cond_2c27
-
- .line 1656
- new-instance v1, Lcom/classdojo/android/databinding/FragmentClassListItemSchoolBinding;
-
- invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/FragmentClassListItemSchoolBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
- return-object v1
-
- .line 1658
- :cond_2c27
- new-instance v1, Ljava/lang/IllegalArgumentException;
-
- new-instance v2, Ljava/lang/StringBuilder;
-
- invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
- const-string v3, "The tag for fragment_class_list_item_school is invalid. Received: "
-
- invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
- move-result-object v2
-
- invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 135
- .end local v0 # "tag":Ljava/lang/Object;
- :pswitch_2c3e
- invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
- move-result-object v0
-
- .line 136
- .restart local v0 # "tag":Ljava/lang/Object;
- if-nez v0, :cond_2c4d
-
- new-instance v1, Ljava/lang/RuntimeException;
-
- const-string v2, "view must have a tag"
-
- invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 137
- :cond_2c4d
- const-string v1, "layout/fragment_class_list_item_class_0"
-
- invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v1
-
- if-eqz v1, :cond_2c5b
-
- .line 138
- new-instance v1, Lcom/classdojo/android/databinding/FragmentClassListItemClassBinding;
-
- invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/FragmentClassListItemClassBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
- return-object v1
-
- .line 140
- :cond_2c5b
- new-instance v1, Ljava/lang/IllegalArgumentException;
-
- new-instance v2, Ljava/lang/StringBuilder;
-
- invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
- const-string v3, "The tag for fragment_class_list_item_class is invalid. Received: "
-
- invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
- move-result-object v2
-
- invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 1947
- .end local v0 # "tag":Ljava/lang/Object;
- :pswitch_2c72
- invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
- move-result-object v0
-
- .line 1948
- .restart local v0 # "tag":Ljava/lang/Object;
- if-nez v0, :cond_2c81
-
- new-instance v1, Ljava/lang/RuntimeException;
-
- const-string v2, "view must have a tag"
-
- invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 1949
- :cond_2c81
- const-string v1, "layout/fragment_class_list_item_add_class_0"
-
- invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v1
-
- if-eqz v1, :cond_2c8f
-
- .line 1950
- new-instance v1, Lcom/classdojo/android/databinding/FragmentClassListItemAddClassBinding;
-
- invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/FragmentClassListItemAddClassBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
- return-object v1
-
- .line 1952
- :cond_2c8f
- new-instance v1, Ljava/lang/IllegalArgumentException;
-
- new-instance v2, Ljava/lang/StringBuilder;
-
- invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
- const-string v3, "The tag for fragment_class_list_item_add_class is invalid. Received: "
-
- invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
- move-result-object v2
-
- invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 234
- .end local v0 # "tag":Ljava/lang/Object;
- :pswitch_2ca6
- invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
- move-result-object v0
-
- .line 235
- .restart local v0 # "tag":Ljava/lang/Object;
- if-nez v0, :cond_2cb5
-
- new-instance v1, Ljava/lang/RuntimeException;
-
- const-string v2, "view must have a tag"
-
- invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 236
- :cond_2cb5
- const-string v1, "layout/fragment_class_code_student_select_0"
-
- invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v1
-
- if-eqz v1, :cond_2cc3
-
- .line 237
- new-instance v1, Lcom/classdojo/android/databinding/FragmentClassCodeStudentSelectBinding;
-
- invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/FragmentClassCodeStudentSelectBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
- return-object v1
-
- .line 239
- :cond_2cc3
- new-instance v1, Ljava/lang/IllegalArgumentException;
-
- new-instance v2, Ljava/lang/StringBuilder;
-
- invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
- const-string v3, "The tag for fragment_class_code_student_select is invalid. Received: "
-
- invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
- move-result-object v2
-
- invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 2547
- .end local v0 # "tag":Ljava/lang/Object;
- :pswitch_2cda
- invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
- move-result-object v0
-
- .line 2548
- .restart local v0 # "tag":Ljava/lang/Object;
- if-nez v0, :cond_2ce9
-
- new-instance v1, Ljava/lang/RuntimeException;
-
- const-string v2, "view must have a tag"
-
- invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 2549
- :cond_2ce9
- const-string v1, "layout/fragment_chat_item_sticker_0"
-
- invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v1
-
- if-eqz v1, :cond_2cf7
-
- .line 2550
- new-instance v1, Lcom/classdojo/android/databinding/FragmentChatItemStickerBinding;
-
- invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/FragmentChatItemStickerBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
- return-object v1
-
- .line 2552
- :cond_2cf7
- new-instance v1, Ljava/lang/IllegalArgumentException;
-
- new-instance v2, Ljava/lang/StringBuilder;
-
- invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
- const-string v3, "The tag for fragment_chat_item_sticker is invalid. Received: "
-
- invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
- move-result-object v2
-
- invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 1080
- .end local v0 # "tag":Ljava/lang/Object;
- :pswitch_2d0e
- invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
- move-result-object v0
-
- .line 1081
- .restart local v0 # "tag":Ljava/lang/Object;
- if-nez v0, :cond_2d1d
-
- new-instance v1, Ljava/lang/RuntimeException;
-
- const-string v2, "view must have a tag"
-
- invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 1082
- :cond_2d1d
- const-string v1, "layout/fragment_chat_empty_0"
-
- invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v1
-
- if-eqz v1, :cond_2d2b
-
- .line 1083
- new-instance v1, Lcom/classdojo/android/databinding/FragmentChatEmptyBinding;
-
- invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/FragmentChatEmptyBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
- return-object v1
-
- .line 1085
- :cond_2d2b
- new-instance v1, Ljava/lang/IllegalArgumentException;
-
- new-instance v2, Ljava/lang/StringBuilder;
-
- invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
- const-string v3, "The tag for fragment_chat_empty is invalid. Received: "
-
- invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
- move-result-object v2
-
- invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 1536
- .end local v0 # "tag":Ljava/lang/Object;
- :pswitch_2d42
- invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
- move-result-object v0
-
- .line 1537
- .restart local v0 # "tag":Ljava/lang/Object;
- if-nez v0, :cond_2d51
-
- new-instance v1, Ljava/lang/RuntimeException;
-
- const-string v2, "view must have a tag"
-
- invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 1538
- :cond_2d51
- const-string v1, "layout/fragment_chat_0"
-
- invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v1
-
- if-eqz v1, :cond_2d5f
-
- .line 1539
- new-instance v1, Lcom/classdojo/android/databinding/FragmentChatBinding;
-
- invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/FragmentChatBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
- return-object v1
-
- .line 1541
- :cond_2d5f
- new-instance v1, Ljava/lang/IllegalArgumentException;
-
- new-instance v2, Ljava/lang/StringBuilder;
-
- invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
- const-string v3, "The tag for fragment_chat is invalid. Received: "
-
- invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
- move-result-object v2
-
- invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 1278
- .end local v0 # "tag":Ljava/lang/Object;
- :pswitch_2d76
- invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
- move-result-object v0
-
- .line 1279
- .restart local v0 # "tag":Ljava/lang/Object;
- if-nez v0, :cond_2d85
-
- new-instance v1, Ljava/lang/RuntimeException;
-
- const-string v2, "view must have a tag"
-
- invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 1280
- :cond_2d85
- const-string v1, "layout/fragment_change_password_0"
-
- invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v1
-
- if-eqz v1, :cond_2d93
-
- .line 1281
- new-instance v1, Lcom/classdojo/android/databinding/FragmentChangePasswordBinding;
-
- invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/FragmentChangePasswordBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
- return-object v1
-
- .line 1283
- :cond_2d93
- new-instance v1, Ljava/lang/IllegalArgumentException;
-
- new-instance v2, Ljava/lang/StringBuilder;
-
- invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
- const-string v3, "The tag for fragment_change_password is invalid. Received: "
-
- invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
- move-result-object v2
-
- invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 2394
- .end local v0 # "tag":Ljava/lang/Object;
- :pswitch_2daa
- invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
- move-result-object v0
-
- .line 2395
- .restart local v0 # "tag":Ljava/lang/Object;
- if-nez v0, :cond_2db9
-
- new-instance v1, Ljava/lang/RuntimeException;
-
- const-string v2, "view must have a tag"
-
- invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 2396
- :cond_2db9
- const-string v1, "layout/fragment_award_pager_dialog_0"
-
- invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v1
-
- if-eqz v1, :cond_2dc7
-
- .line 2397
- new-instance v1, Lcom/classdojo/android/databinding/FragmentAwardPagerDialogBinding;
-
- invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/FragmentAwardPagerDialogBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
- return-object v1
-
- .line 2399
- :cond_2dc7
- new-instance v1, Ljava/lang/IllegalArgumentException;
-
- new-instance v2, Ljava/lang/StringBuilder;
-
- invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
- const-string v3, "The tag for fragment_award_pager_dialog is invalid. Received: "
-
- invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
- move-result-object v2
-
- invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 969
- .end local v0 # "tag":Ljava/lang/Object;
- :pswitch_2dde
- invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
- move-result-object v0
-
- .line 970
- .restart local v0 # "tag":Ljava/lang/Object;
- if-nez v0, :cond_2ded
-
- new-instance v1, Ljava/lang/RuntimeException;
-
- const-string v2, "view must have a tag"
-
- invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 971
- :cond_2ded
- const-string v1, "layout/fragment_award_grid_item_0"
-
- invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v1
-
- if-eqz v1, :cond_2dfb
-
- .line 972
- new-instance v1, Lcom/classdojo/android/databinding/FragmentAwardGridItemBinding;
-
- invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/FragmentAwardGridItemBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
- return-object v1
-
- .line 974
- :cond_2dfb
- new-instance v1, Ljava/lang/IllegalArgumentException;
-
- new-instance v2, Ljava/lang/StringBuilder;
-
- invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
- const-string v3, "The tag for fragment_award_grid_item is invalid. Received: "
-
- invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
- move-result-object v2
-
- invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 1662
- .end local v0 # "tag":Ljava/lang/Object;
- :pswitch_2e12
- invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
- move-result-object v0
-
- .line 1663
- .restart local v0 # "tag":Ljava/lang/Object;
- if-nez v0, :cond_2e21
-
- new-instance v1, Ljava/lang/RuntimeException;
-
- const-string v2, "view must have a tag"
-
- invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 1664
- :cond_2e21
- const-string v1, "layout/fragment_award_grid_0"
-
- invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v1
-
- if-eqz v1, :cond_2e2f
-
- .line 1665
- new-instance v1, Lcom/classdojo/android/databinding/FragmentAwardGridBinding;
-
- invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/FragmentAwardGridBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
- return-object v1
-
- .line 1667
- :cond_2e2f
- new-instance v1, Ljava/lang/IllegalArgumentException;
-
- new-instance v2, Ljava/lang/StringBuilder;
-
- invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
- const-string v3, "The tag for fragment_award_grid is invalid. Received: "
-
- invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
- move-result-object v2
-
- invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 1500
- .end local v0 # "tag":Ljava/lang/Object;
- :pswitch_2e46
- invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
- move-result-object v0
-
- .line 1501
- .restart local v0 # "tag":Ljava/lang/Object;
- if-nez v0, :cond_2e55
-
- new-instance v1, Ljava/lang/RuntimeException;
-
- const-string v2, "view must have a tag"
-
- invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 1502
- :cond_2e55
- const-string v1, "layout/fragment_audience_selector_item_0"
-
- invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v1
-
- if-eqz v1, :cond_2e63
-
- .line 1503
- new-instance v1, Lcom/classdojo/android/databinding/FragmentAudienceSelectorItemBinding;
-
- invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/FragmentAudienceSelectorItemBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
- return-object v1
-
- .line 1505
- :cond_2e63
- new-instance v1, Ljava/lang/IllegalArgumentException;
-
- new-instance v2, Ljava/lang/StringBuilder;
-
- invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
- const-string v3, "The tag for fragment_audience_selector_item is invalid. Received: "
-
- invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
- move-result-object v2
-
- invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 2430
- .end local v0 # "tag":Ljava/lang/Object;
- :pswitch_2e7a
- invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
- move-result-object v0
-
- .line 2431
- .restart local v0 # "tag":Ljava/lang/Object;
- if-nez v0, :cond_2e89
-
- new-instance v1, Ljava/lang/RuntimeException;
-
- const-string v2, "view must have a tag"
-
- invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 2432
- :cond_2e89
- const-string v1, "layout/fragment_attendance_item_0"
-
- invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v1
-
- if-eqz v1, :cond_2e97
-
- .line 2433
- new-instance v1, Lcom/classdojo/android/databinding/FragmentAttendanceItemBinding;
-
- invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/FragmentAttendanceItemBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
- return-object v1
-
- .line 2435
- :cond_2e97
- new-instance v1, Ljava/lang/IllegalArgumentException;
-
- new-instance v2, Ljava/lang/StringBuilder;
-
- invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
- const-string v3, "The tag for fragment_attendance_item is invalid. Received: "
-
- invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
- move-result-object v2
-
- invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 996
- .end local v0 # "tag":Ljava/lang/Object;
- :pswitch_2eae
- invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
- move-result-object v0
-
- .line 997
- .restart local v0 # "tag":Ljava/lang/Object;
- if-nez v0, :cond_2ebd
-
- new-instance v1, Ljava/lang/RuntimeException;
-
- const-string v2, "view must have a tag"
-
- invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 998
- :cond_2ebd
- const-string v1, "layout/fragment_attendance_0"
-
- invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v1
-
- if-eqz v1, :cond_2ecb
-
- .line 999
- new-instance v1, Lcom/classdojo/android/databinding/FragmentAttendanceBinding;
-
- invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/FragmentAttendanceBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
- return-object v1
-
- .line 1001
- :cond_2ecb
- new-instance v1, Ljava/lang/IllegalArgumentException;
-
- new-instance v2, Ljava/lang/StringBuilder;
-
- invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
- const-string v3, "The tag for fragment_attendance is invalid. Received: "
-
- invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
- move-result-object v2
-
- invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 75
- .end local v0 # "tag":Ljava/lang/Object;
- :pswitch_2ee2
- invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
- move-result-object v0
-
- .line 76
- .restart local v0 # "tag":Ljava/lang/Object;
- if-nez v0, :cond_2ef1
-
- new-instance v1, Ljava/lang/RuntimeException;
-
- const-string v2, "view must have a tag"
-
- invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 77
- :cond_2ef1
- const-string v1, "layout/fragment_add_school_student_0"
-
- invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v1
-
- if-eqz v1, :cond_2eff
-
- .line 78
- new-instance v1, Lcom/classdojo/android/databinding/FragmentAddSchoolStudentBinding;
-
- invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/FragmentAddSchoolStudentBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
- return-object v1
-
- .line 80
- :cond_2eff
- new-instance v1, Ljava/lang/IllegalArgumentException;
-
- new-instance v2, Ljava/lang/StringBuilder;
-
- invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
- const-string v3, "The tag for fragment_add_school_student is invalid. Received: "
-
- invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
- move-result-object v2
-
- invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 2295
- .end local v0 # "tag":Ljava/lang/Object;
- :pswitch_2f16
- invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
- move-result-object v0
-
- .line 2296
- .restart local v0 # "tag":Ljava/lang/Object;
- if-nez v0, :cond_2f25
-
- new-instance v1, Ljava/lang/RuntimeException;
-
- const-string v2, "view must have a tag"
-
- invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 2297
- :cond_2f25
- const-string v1, "layout/fragment_add_edit_student_0"
-
- invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v1
-
- if-eqz v1, :cond_2f33
-
- .line 2298
- new-instance v1, Lcom/classdojo/android/databinding/FragmentAddEditStudentBinding;
-
- invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/FragmentAddEditStudentBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
- return-object v1
-
- .line 2300
- :cond_2f33
- new-instance v1, Ljava/lang/IllegalArgumentException;
-
- new-instance v2, Ljava/lang/StringBuilder;
-
- invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
- const-string v3, "The tag for fragment_add_edit_student is invalid. Received: "
-
- invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
- move-result-object v2
-
- invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 2556
- .end local v0 # "tag":Ljava/lang/Object;
- :pswitch_2f4a
- invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
- move-result-object v0
-
- .line 2557
- .restart local v0 # "tag":Ljava/lang/Object;
- if-nez v0, :cond_2f59
-
- new-instance v1, Ljava/lang/RuntimeException;
-
- const-string v2, "view must have a tag"
-
- invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 2558
- :cond_2f59
- const-string v1, "layout/fragment_add_edit_group_0"
-
- invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v1
-
- if-eqz v1, :cond_2f67
-
- .line 2559
- new-instance v1, Lcom/classdojo/android/databinding/FragmentAddEditGroupBinding;
-
- invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/FragmentAddEditGroupBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
- return-object v1
-
- .line 2561
- :cond_2f67
- new-instance v1, Ljava/lang/IllegalArgumentException;
-
- new-instance v2, Ljava/lang/StringBuilder;
-
- invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
- const-string v3, "The tag for fragment_add_edit_group is invalid. Received: "
-
- invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
- move-result-object v2
-
- invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 1005
- .end local v0 # "tag":Ljava/lang/Object;
- :pswitch_2f7e
- invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
- move-result-object v0
-
- .line 1006
- .restart local v0 # "tag":Ljava/lang/Object;
- if-nez v0, :cond_2f8d
-
- new-instance v1, Ljava/lang/RuntimeException;
-
- const-string v2, "view must have a tag"
-
- invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 1007
- :cond_2f8d
- const-string v1, "layout/fragment_add_edit_class_0"
-
- invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v1
-
- if-eqz v1, :cond_2f9b
-
- .line 1008
- new-instance v1, Lcom/classdojo/android/databinding/FragmentAddEditClassBinding;
-
- invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/FragmentAddEditClassBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
- return-object v1
-
- .line 1010
- :cond_2f9b
- new-instance v1, Ljava/lang/IllegalArgumentException;
-
- new-instance v2, Ljava/lang/StringBuilder;
-
- invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
- const-string v3, "The tag for fragment_add_edit_class is invalid. Received: "
-
- invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
- move-result-object v2
-
- invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 243
- .end local v0 # "tag":Ljava/lang/Object;
- :pswitch_2fb2
- invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
- move-result-object v0
-
- .line 244
- .restart local v0 # "tag":Ljava/lang/Object;
- if-nez v0, :cond_2fc1
-
- new-instance v1, Ljava/lang/RuntimeException;
-
- const-string v2, "view must have a tag"
-
- invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 245
- :cond_2fc1
- const-string v1, "layout/fragment_add_edit_behaviours_0"
-
- invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v1
-
- if-eqz v1, :cond_2fcf
-
- .line 246
- new-instance v1, Lcom/classdojo/android/databinding/FragmentAddEditBehavioursBinding;
-
- invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/FragmentAddEditBehavioursBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
- return-object v1
-
- .line 248
- :cond_2fcf
- new-instance v1, Ljava/lang/IllegalArgumentException;
-
- new-instance v2, Ljava/lang/StringBuilder;
-
- invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
- const-string v3, "The tag for fragment_add_edit_behaviours is invalid. Received: "
-
- invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
- move-result-object v2
-
- invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 834
- .end local v0 # "tag":Ljava/lang/Object;
- :pswitch_2fe6
- invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
- move-result-object v0
-
- .line 835
- .restart local v0 # "tag":Ljava/lang/Object;
- if-nez v0, :cond_2ff5
-
- new-instance v1, Ljava/lang/RuntimeException;
-
- const-string v2, "view must have a tag"
-
- invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 836
- :cond_2ff5
- const-string v1, "layout/fragment_add_coteacher_0"
-
- invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v1
-
- if-eqz v1, :cond_3003
-
- .line 837
- new-instance v1, Lcom/classdojo/android/databinding/FragmentAddCoteacherBinding;
-
- invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/FragmentAddCoteacherBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
- return-object v1
-
- .line 839
- :cond_3003
- new-instance v1, Ljava/lang/IllegalArgumentException;
-
- new-instance v2, Ljava/lang/StringBuilder;
-
- invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
- const-string v3, "The tag for fragment_add_coteacher is invalid. Received: "
-
- invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
- move-result-object v2
-
- invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 1413
- .end local v0 # "tag":Ljava/lang/Object;
- :pswitch_301a
- invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
- move-result-object v0
-
- .line 1414
- .restart local v0 # "tag":Ljava/lang/Object;
- if-nez v0, :cond_3029
-
- new-instance v1, Ljava/lang/RuntimeException;
-
- const-string v2, "view must have a tag"
-
- invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 1415
- :cond_3029
- const-string v1, "layout-land/fragment_add_class_poster_0"
-
- invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v1
-
- if-eqz v1, :cond_3037
-
- .line 1416
- new-instance v1, Lcom/classdojo/android/databinding/FragmentAddClassPosterBindingLandImpl;
-
- invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/FragmentAddClassPosterBindingLandImpl;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
- return-object v1
-
- .line 1418
- :cond_3037
- const-string v1, "layout/fragment_add_class_poster_0"
-
- invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v1
-
- if-eqz v1, :cond_3045
-
- .line 1419
- new-instance v1, Lcom/classdojo/android/databinding/FragmentAddClassPosterBindingImpl;
-
- invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/FragmentAddClassPosterBindingImpl;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
- return-object v1
-
- .line 1421
- :cond_3045
- new-instance v1, Ljava/lang/IllegalArgumentException;
-
- new-instance v2, Ljava/lang/StringBuilder;
-
- invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
- const-string v3, "The tag for fragment_add_class_poster is invalid. Received: "
-
- invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
- move-result-object v2
-
- invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 1116
- .end local v0 # "tag":Ljava/lang/Object;
- :pswitch_305c
- invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
- move-result-object v0
-
- .line 1117
- .restart local v0 # "tag":Ljava/lang/Object;
- if-nez v0, :cond_306b
-
- new-instance v1, Ljava/lang/RuntimeException;
-
- const-string v2, "view must have a tag"
-
- invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 1118
- :cond_306b
- const-string v1, "layout/fragment_add_class_invite_code_0"
-
- invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v1
-
- if-eqz v1, :cond_3079
-
- .line 1119
- new-instance v1, Lcom/classdojo/android/databinding/FragmentAddClassInviteCodeBinding;
-
- invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/FragmentAddClassInviteCodeBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
- return-object v1
-
- .line 1121
- :cond_3079
- new-instance v1, Ljava/lang/IllegalArgumentException;
-
- new-instance v2, Ljava/lang/StringBuilder;
-
- invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
- const-string v3, "The tag for fragment_add_class_invite_code is invalid. Received: "
-
- invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
- move-result-object v2
-
- invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 1983
- .end local v0 # "tag":Ljava/lang/Object;
- :pswitch_3090
- invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
- move-result-object v0
-
- .line 1984
- .restart local v0 # "tag":Ljava/lang/Object;
- if-nez v0, :cond_309f
-
- new-instance v1, Ljava/lang/RuntimeException;
-
- const-string v2, "view must have a tag"
-
- invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 1985
- :cond_309f
- const-string v1, "layout/fragment_add_class_invite_0"
-
- invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v1
-
- if-eqz v1, :cond_30ad
-
- .line 1986
- new-instance v1, Lcom/classdojo/android/databinding/FragmentAddClassInviteBinding;
-
- invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/FragmentAddClassInviteBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
- return-object v1
-
- .line 1988
- :cond_30ad
- new-instance v1, Ljava/lang/IllegalArgumentException;
-
- new-instance v2, Ljava/lang/StringBuilder;
-
- invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
- const-string v3, "The tag for fragment_add_class_invite is invalid. Received: "
-
- invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
- move-result-object v2
-
- invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 2592
- .end local v0 # "tag":Ljava/lang/Object;
- :pswitch_30c4
- invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
- move-result-object v0
-
- .line 2593
- .restart local v0 # "tag":Ljava/lang/Object;
- if-nez v0, :cond_30d3
-
- new-instance v1, Ljava/lang/RuntimeException;
-
- const-string v2, "view must have a tag"
-
- invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 2594
- :cond_30d3
- const-string v1, "layout/fragment_account_switcher_item_0"
-
- invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v1
-
- if-eqz v1, :cond_30e1
-
- .line 2595
- new-instance v1, Lcom/classdojo/android/databinding/FragmentAccountSwitcherItemBinding;
-
- invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/FragmentAccountSwitcherItemBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
- return-object v1
-
- .line 2597
- :cond_30e1
- new-instance v1, Ljava/lang/IllegalArgumentException;
-
- new-instance v2, Ljava/lang/StringBuilder;
-
- invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
- const-string v3, "The tag for fragment_account_switcher_item is invalid. Received: "
-
- invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
- move-result-object v2
-
- invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 2031
- .end local v0 # "tag":Ljava/lang/Object;
- :pswitch_30f8
- invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
- move-result-object v0
-
- .line 2032
- .restart local v0 # "tag":Ljava/lang/Object;
- if-nez v0, :cond_3107
-
- new-instance v1, Ljava/lang/RuntimeException;
-
- const-string v2, "view must have a tag"
-
- invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 2033
- :cond_3107
- const-string v1, "layout/dialog_unsupported_class_code_0"
-
- invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v1
-
- if-eqz v1, :cond_3115
-
- .line 2034
- new-instance v1, Lcom/classdojo/android/databinding/DialogUnsupportedClassCodeBinding;
-
- invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/DialogUnsupportedClassCodeBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
- return-object v1
-
- .line 2036
- :cond_3115
- new-instance v1, Ljava/lang/IllegalArgumentException;
-
- new-instance v2, Ljava/lang/StringBuilder;
-
- invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
- const-string v3, "The tag for dialog_unsupported_class_code is invalid. Received: "
-
- invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
- move-result-object v2
-
- invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 387
- .end local v0 # "tag":Ljava/lang/Object;
- :pswitch_312c
- invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
- move-result-object v0
-
- .line 388
- .restart local v0 # "tag":Ljava/lang/Object;
- if-nez v0, :cond_313b
-
- new-instance v1, Ljava/lang/RuntimeException;
-
- const-string v2, "view must have a tag"
-
- invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 389
- :cond_313b
- const-string v1, "layout/dialog_turn_on_password_lock_0"
-
- invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v1
-
- if-eqz v1, :cond_3149
-
- .line 390
- new-instance v1, Lcom/classdojo/android/databinding/DialogTurnOnPasswordLockBinding;
-
- invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/DialogTurnOnPasswordLockBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
- return-object v1
-
- .line 392
- :cond_3149
- new-instance v1, Ljava/lang/IllegalArgumentException;
-
- new-instance v2, Ljava/lang/StringBuilder;
-
- invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
- const-string v3, "The tag for dialog_turn_on_password_lock is invalid. Received: "
-
- invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
- move-result-object v2
-
- invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 513
- .end local v0 # "tag":Ljava/lang/Object;
- :pswitch_3160
- invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
- move-result-object v0
-
- .line 514
- .restart local v0 # "tag":Ljava/lang/Object;
- if-nez v0, :cond_316f
-
- new-instance v1, Ljava/lang/RuntimeException;
-
- const-string v2, "view must have a tag"
-
- invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 515
- :cond_316f
- const-string v1, "layout/dialog_teacher_student_consent_0"
-
- invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v1
-
- if-eqz v1, :cond_317d
-
- .line 516
- new-instance v1, Lcom/classdojo/android/databinding/DialogTeacherStudentConsentBinding;
-
- invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/DialogTeacherStudentConsentBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
- return-object v1
-
- .line 518
- :cond_317d
- new-instance v1, Ljava/lang/IllegalArgumentException;
-
- new-instance v2, Ljava/lang/StringBuilder;
-
- invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
- const-string v3, "The tag for dialog_teacher_student_consent is invalid. Received: "
-
- invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
- move-result-object v2
-
- invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 1341
- .end local v0 # "tag":Ljava/lang/Object;
- :pswitch_3194
- invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
- move-result-object v0
-
- .line 1342
- .restart local v0 # "tag":Ljava/lang/Object;
- if-nez v0, :cond_31a3
-
- new-instance v1, Ljava/lang/RuntimeException;
-
- const-string v2, "view must have a tag"
-
- invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 1343
- :cond_31a3
- const-string v1, "layout/dialog_teacher_new_class_success_0"
-
- invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v1
-
- if-eqz v1, :cond_31b1
-
- .line 1344
- new-instance v1, Lcom/classdojo/android/databinding/DialogTeacherNewClassSuccessBinding;
-
- invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/DialogTeacherNewClassSuccessBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
- return-object v1
-
- .line 1346
- :cond_31b1
- new-instance v1, Ljava/lang/IllegalArgumentException;
-
- new-instance v2, Ljava/lang/StringBuilder;
-
- invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
- const-string v3, "The tag for dialog_teacher_new_class_success is invalid. Received: "
-
- invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
- move-result-object v2
-
- invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 2322
- .end local v0 # "tag":Ljava/lang/Object;
- :pswitch_31c8
- invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
- move-result-object v0
-
- .line 2323
- .restart local v0 # "tag":Ljava/lang/Object;
- if-nez v0, :cond_31d7
-
- new-instance v1, Ljava/lang/RuntimeException;
-
- const-string v2, "view must have a tag"
-
- invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 2324
- :cond_31d7
- const-string v1, "layout/dialog_teacher_invitation_0"
-
- invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v1
-
- if-eqz v1, :cond_31e5
-
- .line 2325
- new-instance v1, Lcom/classdojo/android/databinding/DialogTeacherInvitationBinding;
-
- invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/DialogTeacherInvitationBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
- return-object v1
-
- .line 2327
- :cond_31e5
- new-instance v1, Ljava/lang/IllegalArgumentException;
-
- new-instance v2, Ljava/lang/StringBuilder;
-
- invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
- const-string v3, "The tag for dialog_teacher_invitation is invalid. Received: "
-
- invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
- move-result-object v2
-
- invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 2133
- .end local v0 # "tag":Ljava/lang/Object;
- :pswitch_31fc
- invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
- move-result-object v0
-
- .line 2134
- .restart local v0 # "tag":Ljava/lang/Object;
- if-nez v0, :cond_320b
-
- new-instance v1, Ljava/lang/RuntimeException;
-
- const-string v2, "view must have a tag"
-
- invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 2135
- :cond_320b
- const-string v1, "layout/dialog_student_list_0"
-
- invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v1
-
- if-eqz v1, :cond_3219
-
- .line 2136
- new-instance v1, Lcom/classdojo/android/databinding/DialogStudentListBinding;
-
- invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/DialogStudentListBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
- return-object v1
-
- .line 2138
- :cond_3219
- new-instance v1, Ljava/lang/IllegalArgumentException;
-
- new-instance v2, Ljava/lang/StringBuilder;
-
- invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
- const-string v3, "The tag for dialog_student_list is invalid. Received: "
-
- invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
- move-result-object v2
-
- invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 84
- .end local v0 # "tag":Ljava/lang/Object;
- :pswitch_3230
- invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
- move-result-object v0
-
- .line 85
- .restart local v0 # "tag":Ljava/lang/Object;
- if-nez v0, :cond_323f
-
- new-instance v1, Ljava/lang/RuntimeException;
-
- const-string v2, "view must have a tag"
-
- invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 86
- :cond_323f
- const-string v1, "layout/dialog_student_capture_student_list_item_0"
-
- invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v1
-
- if-eqz v1, :cond_324d
-
- .line 87
- new-instance v1, Lcom/classdojo/android/databinding/DialogStudentCaptureStudentListItemBinding;
-
- invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/DialogStudentCaptureStudentListItemBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
- return-object v1
-
- .line 89
- :cond_324d
- new-instance v1, Ljava/lang/IllegalArgumentException;
-
- new-instance v2, Ljava/lang/StringBuilder;
-
- invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
- const-string v3, "The tag for dialog_student_capture_student_list_item is invalid. Received: "
-
- invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
- move-result-object v2
-
- invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 225
- .end local v0 # "tag":Ljava/lang/Object;
- :pswitch_3264
- invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
- move-result-object v0
-
- .line 226
- .restart local v0 # "tag":Ljava/lang/Object;
- if-nez v0, :cond_3273
-
- new-instance v1, Ljava/lang/RuntimeException;
-
- const-string v2, "view must have a tag"
-
- invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 227
- :cond_3273
- const-string v1, "layout/dialog_student_age_0"
-
- invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v1
-
- if-eqz v1, :cond_3281
-
- .line 228
- new-instance v1, Lcom/classdojo/android/databinding/DialogStudentAgeBinding;
-
- invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/DialogStudentAgeBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
- return-object v1
-
- .line 230
- :cond_3281
- new-instance v1, Ljava/lang/IllegalArgumentException;
-
- new-instance v2, Ljava/lang/StringBuilder;
-
- invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
- const-string v3, "The tag for dialog_student_age is invalid. Received: "
-
- invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
- move-result-object v2
-
- invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 1359
- .end local v0 # "tag":Ljava/lang/Object;
- :pswitch_3298
- invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
- move-result-object v0
-
- .line 1360
- .restart local v0 # "tag":Ljava/lang/Object;
- if-nez v0, :cond_32a7
-
- new-instance v1, Ljava/lang/RuntimeException;
-
- const-string v2, "view must have a tag"
-
- invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 1361
- :cond_32a7
- const-string v1, "layout/dialog_schedule_message_time_0"
-
- invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v1
-
- if-eqz v1, :cond_32b5
-
- .line 1362
- new-instance v1, Lcom/classdojo/android/databinding/DialogScheduleMessageTimeBinding;
-
- invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/DialogScheduleMessageTimeBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
- return-object v1
-
- .line 1364
- :cond_32b5
- new-instance v1, Ljava/lang/IllegalArgumentException;
-
- new-instance v2, Ljava/lang/StringBuilder;
-
- invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
- const-string v3, "The tag for dialog_schedule_message_time is invalid. Received: "
-
- invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
- move-result-object v2
-
- invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 630
- .end local v0 # "tag":Ljava/lang/Object;
- :pswitch_32cc
- invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
- move-result-object v0
-
- .line 631
- .restart local v0 # "tag":Ljava/lang/Object;
- if-nez v0, :cond_32db
-
- new-instance v1, Ljava/lang/RuntimeException;
-
- const-string v2, "view must have a tag"
-
- invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 632
- :cond_32db
- const-string v1, "layout/dialog_password_changed_0"
-
- invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v1
-
- if-eqz v1, :cond_32e9
-
- .line 633
- new-instance v1, Lcom/classdojo/android/databinding/DialogPasswordChangedBinding;
-
- invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/DialogPasswordChangedBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
- return-object v1
-
- .line 635
- :cond_32e9
- new-instance v1, Ljava/lang/IllegalArgumentException;
-
- new-instance v2, Ljava/lang/StringBuilder;
-
- invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
- const-string v3, "The tag for dialog_password_changed is invalid. Received: "
-
- invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
- move-result-object v2
-
- invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 1296
- .end local v0 # "tag":Ljava/lang/Object;
- :pswitch_3300
- invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
- move-result-object v0
-
- .line 1297
- .restart local v0 # "tag":Ljava/lang/Object;
- if-nez v0, :cond_330f
-
- new-instance v1, Ljava/lang/RuntimeException;
-
- const-string v2, "view must have a tag"
-
- invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 1298
- :cond_330f
- const-string v1, "layout/dialog_parent_teacher_invitation_0"
-
- invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v1
-
- if-eqz v1, :cond_331d
-
- .line 1299
- new-instance v1, Lcom/classdojo/android/databinding/DialogParentTeacherInvitationBinding;
-
- invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/DialogParentTeacherInvitationBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
- return-object v1
-
- .line 1301
- :cond_331d
- new-instance v1, Ljava/lang/IllegalArgumentException;
-
- new-instance v2, Ljava/lang/StringBuilder;
-
- invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
- const-string v3, "The tag for dialog_parent_teacher_invitation is invalid. Received: "
-
- invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
- move-result-object v2
-
- invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 2187
- .end local v0 # "tag":Ljava/lang/Object;
- :pswitch_3334
- invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
- move-result-object v0
-
- .line 2188
- .restart local v0 # "tag":Ljava/lang/Object;
- if-nez v0, :cond_3343
-
- new-instance v1, Ljava/lang/RuntimeException;
-
- const-string v2, "view must have a tag"
-
- invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 2189
- :cond_3343
- const-string v1, "layout/dialog_parent_invitation_0"
-
- invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v1
-
- if-eqz v1, :cond_3351
-
- .line 2190
- new-instance v1, Lcom/classdojo/android/databinding/DialogParentInvitationBinding;
-
- invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/DialogParentInvitationBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
- return-object v1
-
- .line 2192
- :cond_3351
- new-instance v1, Ljava/lang/IllegalArgumentException;
-
- new-instance v2, Ljava/lang/StringBuilder;
-
- invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
- const-string v3, "The tag for dialog_parent_invitation is invalid. Received: "
-
- invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
- move-result-object v2
-
- invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 1881
- .end local v0 # "tag":Ljava/lang/Object;
- :pswitch_3368
- invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
- move-result-object v0
-
- .line 1882
- .restart local v0 # "tag":Ljava/lang/Object;
- if-nez v0, :cond_3377
-
- new-instance v1, Ljava/lang/RuntimeException;
-
- const-string v2, "view must have a tag"
-
- invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 1883
- :cond_3377
- const-string v1, "layout/dialog_parent_delete_connection_request_0"
-
- invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v1
-
- if-eqz v1, :cond_3385
-
- .line 1884
- new-instance v1, Lcom/classdojo/android/databinding/DialogParentDeleteConnectionRequestBinding;
-
- invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/DialogParentDeleteConnectionRequestBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
- return-object v1
-
- .line 1886
- :cond_3385
- new-instance v1, Ljava/lang/IllegalArgumentException;
-
- new-instance v2, Ljava/lang/StringBuilder;
-
- invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
- const-string v3, "The tag for dialog_parent_delete_connection_request is invalid. Received: "
-
- invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
- move-result-object v2
-
- invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 2097
- .end local v0 # "tag":Ljava/lang/Object;
- :pswitch_339c
- invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
- move-result-object v0
-
- .line 2098
- .restart local v0 # "tag":Ljava/lang/Object;
- if-nez v0, :cond_33ab
-
- new-instance v1, Ljava/lang/RuntimeException;
-
- const-string v2, "view must have a tag"
-
- invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 2099
- :cond_33ab
- const-string v1, "layout/dialog_invite_student_code_0"
-
- invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v1
-
- if-eqz v1, :cond_33b9
-
- .line 2100
- new-instance v1, Lcom/classdojo/android/databinding/DialogInviteStudentCodeBinding;
-
- invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/DialogInviteStudentCodeBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
- return-object v1
-
- .line 2102
- :cond_33b9
- new-instance v1, Ljava/lang/IllegalArgumentException;
-
- new-instance v2, Ljava/lang/StringBuilder;
-
- invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
- const-string v3, "The tag for dialog_invite_student_code is invalid. Received: "
-
- invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
- move-result-object v2
-
- invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 2304
- .end local v0 # "tag":Ljava/lang/Object;
- :pswitch_33d0
- invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
- move-result-object v0
-
- .line 2305
- .restart local v0 # "tag":Ljava/lang/Object;
- if-nez v0, :cond_33df
-
- new-instance v1, Ljava/lang/RuntimeException;
-
- const-string v2, "view must have a tag"
-
- invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 2306
- :cond_33df
- const-string v1, "layout/dialog_exit_student_mode_password_0"
-
- invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v1
-
- if-eqz v1, :cond_33ed
-
- .line 2307
- new-instance v1, Lcom/classdojo/android/databinding/DialogExitStudentModePasswordBinding;
-
- invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/DialogExitStudentModePasswordBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
- return-object v1
-
- .line 2309
- :cond_33ed
- new-instance v1, Ljava/lang/IllegalArgumentException;
-
- new-instance v2, Ljava/lang/StringBuilder;
-
- invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
- const-string v3, "The tag for dialog_exit_student_mode_password is invalid. Received: "
-
- invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
- move-result-object v2
-
- invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 549
- .end local v0 # "tag":Ljava/lang/Object;
- :pswitch_3404
- invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
- move-result-object v0
-
- .line 550
- .restart local v0 # "tag":Ljava/lang/Object;
- if-nez v0, :cond_3413
-
- new-instance v1, Ljava/lang/RuntimeException;
-
- const-string v2, "view must have a tag"
-
- invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 551
- :cond_3413
- const-string v1, "layout/dialog_enter_student_mode_0"
-
- invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v1
-
- if-eqz v1, :cond_3421
-
- .line 552
- new-instance v1, Lcom/classdojo/android/databinding/DialogEnterStudentModeBinding;
-
- invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/DialogEnterStudentModeBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
- return-object v1
-
- .line 554
- :cond_3421
- new-instance v1, Ljava/lang/IllegalArgumentException;
-
- new-instance v2, Ljava/lang/StringBuilder;
-
- invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
- const-string v3, "The tag for dialog_enter_student_mode is invalid. Received: "
-
- invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
- move-result-object v2
-
- invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 2022
- .end local v0 # "tag":Ljava/lang/Object;
- :pswitch_3438
- invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
- move-result-object v0
-
- .line 2023
- .restart local v0 # "tag":Ljava/lang/Object;
- if-nez v0, :cond_3447
-
- new-instance v1, Ljava/lang/RuntimeException;
-
- const-string v2, "view must have a tag"
-
- invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 2024
- :cond_3447
- const-string v1, "layout/dialog_disconnect_student_0"
-
- invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v1
-
- if-eqz v1, :cond_3455
-
- .line 2025
- new-instance v1, Lcom/classdojo/android/databinding/DialogDisconnectStudentBinding;
-
- invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/DialogDisconnectStudentBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
- return-object v1
-
- .line 2027
- :cond_3455
- new-instance v1, Ljava/lang/IllegalArgumentException;
-
- new-instance v2, Ljava/lang/StringBuilder;
-
- invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
- const-string v3, "The tag for dialog_disconnect_student is invalid. Received: "
-
- invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
- move-result-object v2
-
- invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 1071
- .end local v0 # "tag":Ljava/lang/Object;
- :pswitch_346c
- invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
- move-result-object v0
-
- .line 1072
- .restart local v0 # "tag":Ljava/lang/Object;
- if-nez v0, :cond_347b
-
- new-instance v1, Ljava/lang/RuntimeException;
-
- const-string v2, "view must have a tag"
-
- invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 1073
- :cond_347b
- const-string v1, "layout/dialog_class_code_student_select_0"
-
- invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v1
-
- if-eqz v1, :cond_3489
-
- .line 1074
- new-instance v1, Lcom/classdojo/android/databinding/DialogClassCodeStudentSelectBinding;
-
- invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/DialogClassCodeStudentSelectBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
- return-object v1
-
- .line 1076
- :cond_3489
- new-instance v1, Ljava/lang/IllegalArgumentException;
-
- new-instance v2, Ljava/lang/StringBuilder;
-
- invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
- const-string v3, "The tag for dialog_class_code_student_select is invalid. Received: "
-
- invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
- move-result-object v2
-
- invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 1917
- .end local v0 # "tag":Ljava/lang/Object;
- :pswitch_34a0
- invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
- move-result-object v0
-
- .line 1918
- .restart local v0 # "tag":Ljava/lang/Object;
- if-nez v0, :cond_34af
-
- new-instance v1, Ljava/lang/RuntimeException;
-
- const-string v2, "view must have a tag"
-
- invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 1919
- :cond_34af
- const-string v1, "layout/dialog_class_code_student_blocker_0"
-
- invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v1
-
- if-eqz v1, :cond_34bd
-
- .line 1920
- new-instance v1, Lcom/classdojo/android/databinding/DialogClassCodeStudentBlockerBinding;
-
- invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/DialogClassCodeStudentBlockerBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
- return-object v1
-
- .line 1922
- :cond_34bd
- new-instance v1, Ljava/lang/IllegalArgumentException;
-
- new-instance v2, Ljava/lang/StringBuilder;
-
- invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
- const-string v3, "The tag for dialog_class_code_student_blocker is invalid. Received: "
-
- invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
- move-result-object v2
-
- invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 1314
- .end local v0 # "tag":Ljava/lang/Object;
- :pswitch_34d4
- invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
- move-result-object v0
-
- .line 1315
- .restart local v0 # "tag":Ljava/lang/Object;
- if-nez v0, :cond_34e3
-
- new-instance v1, Ljava/lang/RuntimeException;
-
- const-string v2, "view must have a tag"
-
- invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 1316
- :cond_34e3
- const-string v1, "layout/dialog_change_name_0"
-
- invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v1
-
- if-eqz v1, :cond_34f1
-
- .line 1317
- new-instance v1, Lcom/classdojo/android/databinding/DialogChangeNameBinding;
-
- invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/DialogChangeNameBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
- return-object v1
-
- .line 1319
- :cond_34f1
- new-instance v1, Ljava/lang/IllegalArgumentException;
-
- new-instance v2, Ljava/lang/StringBuilder;
-
- invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
- const-string v3, "The tag for dialog_change_name is invalid. Received: "
-
- invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
- move-result-object v2
-
- invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 639
- .end local v0 # "tag":Ljava/lang/Object;
- :pswitch_3508
- invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
- move-result-object v0
-
- .line 640
- .restart local v0 # "tag":Ljava/lang/Object;
- if-nez v0, :cond_3517
-
- new-instance v1, Ljava/lang/RuntimeException;
-
- const-string v2, "view must have a tag"
-
- invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 641
- :cond_3517
- const-string v1, "layout/dialog_base_layout_0"
-
- invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v1
-
- if-eqz v1, :cond_3525
-
- .line 642
- new-instance v1, Lcom/classdojo/android/databinding/DialogBaseLayoutBinding;
-
- invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/DialogBaseLayoutBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
- return-object v1
-
- .line 644
- :cond_3525
- new-instance v1, Ljava/lang/IllegalArgumentException;
-
- new-instance v2, Ljava/lang/StringBuilder;
-
- invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
- const-string v3, "The tag for dialog_base_layout is invalid. Received: "
-
- invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
- move-result-object v2
-
- invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 12
- .end local v0 # "tag":Ljava/lang/Object;
- :pswitch_353c
- invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
- move-result-object v0
-
- .line 13
- .restart local v0 # "tag":Ljava/lang/Object;
- if-nez v0, :cond_354b
-
- new-instance v1, Ljava/lang/RuntimeException;
-
- const-string v2, "view must have a tag"
-
- invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 14
- :cond_354b
- const-string v1, "layout/dialog_avatar_grid_0"
-
- invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v1
-
- if-eqz v1, :cond_3559
-
- .line 15
- new-instance v1, Lcom/classdojo/android/databinding/DialogAvatarGridBinding;
-
- invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/DialogAvatarGridBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
- return-object v1
-
- .line 17
- :cond_3559
- new-instance v1, Ljava/lang/IllegalArgumentException;
-
- new-instance v2, Ljava/lang/StringBuilder;
-
- invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
- const-string v3, "The tag for dialog_avatar_grid is invalid. Received: "
-
- invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
- move-result-object v2
-
- invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 1233
- .end local v0 # "tag":Ljava/lang/Object;
- :pswitch_3570
- invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
- move-result-object v0
-
- .line 1234
- .restart local v0 # "tag":Ljava/lang/Object;
- if-nez v0, :cond_357f
-
- new-instance v1, Ljava/lang/RuntimeException;
-
- const-string v2, "view must have a tag"
-
- invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 1235
- :cond_357f
- const-string v1, "layout/dialog_add_student_find_teacher_0"
-
- invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v1
-
- if-eqz v1, :cond_358d
-
- .line 1236
- new-instance v1, Lcom/classdojo/android/databinding/DialogAddStudentFindTeacherBinding;
-
- invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/DialogAddStudentFindTeacherBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
- return-object v1
-
- .line 1238
- :cond_358d
- new-instance v1, Ljava/lang/IllegalArgumentException;
-
- new-instance v2, Ljava/lang/StringBuilder;
-
- invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
- const-string v3, "The tag for dialog_add_student_find_teacher is invalid. Received: "
-
- invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
- move-result-object v2
-
- invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 1788
- .end local v0 # "tag":Ljava/lang/Object;
- :pswitch_35a4
- invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
- move-result-object v0
-
- .line 1789
- .restart local v0 # "tag":Ljava/lang/Object;
- if-nez v0, :cond_35b3
-
- new-instance v1, Ljava/lang/RuntimeException;
-
- const-string v2, "view must have a tag"
-
- invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 1790
- :cond_35b3
- const-string v1, "layout/dialog_add_note_0"
-
- invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v1
-
- if-eqz v1, :cond_35c1
-
- .line 1791
- new-instance v1, Lcom/classdojo/android/databinding/DialogAddNoteBinding;
-
- invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/DialogAddNoteBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
- return-object v1
-
- .line 1793
- :cond_35c1
- new-instance v1, Ljava/lang/IllegalArgumentException;
-
- new-instance v2, Ljava/lang/StringBuilder;
-
- invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
- const-string v3, "The tag for dialog_add_note is invalid. Received: "
-
- invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
- move-result-object v2
-
- invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 2412
- .end local v0 # "tag":Ljava/lang/Object;
- :pswitch_35d8
- invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
- move-result-object v0
-
- .line 2413
- .restart local v0 # "tag":Ljava/lang/Object;
- if-nez v0, :cond_35e7
-
- new-instance v1, Ljava/lang/RuntimeException;
-
- const-string v2, "view must have a tag"
-
- invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 2414
- :cond_35e7
- const-string v1, "layout/connection_type_header_item_0"
-
- invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v1
-
- if-eqz v1, :cond_35f5
-
- .line 2415
- new-instance v1, Lcom/classdojo/android/databinding/ConnectionTypeHeaderItemBinding;
-
- invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/ConnectionTypeHeaderItemBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
- return-object v1
-
- .line 2417
- :cond_35f5
- new-instance v1, Ljava/lang/IllegalArgumentException;
-
- new-instance v2, Ljava/lang/StringBuilder;
-
- invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
- const-string v3, "The tag for connection_type_header_item is invalid. Received: "
-
- invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
- move-result-object v2
-
- invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 705
- .end local v0 # "tag":Ljava/lang/Object;
- :pswitch_360c
- invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
- move-result-object v0
-
- .line 706
- .restart local v0 # "tag":Ljava/lang/Object;
- if-nez v0, :cond_361b
-
- new-instance v1, Ljava/lang/RuntimeException;
-
- const-string v2, "view must have a tag"
-
- invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 707
- :cond_361b
- const-string v1, "layout/combined_compose_audience_student_item_0"
-
- invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v1
-
- if-eqz v1, :cond_3629
-
- .line 708
- new-instance v1, Lcom/classdojo/android/databinding/CombinedComposeAudienceStudentItemBinding;
-
- invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/CombinedComposeAudienceStudentItemBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
- return-object v1
-
- .line 710
- :cond_3629
- new-instance v1, Ljava/lang/IllegalArgumentException;
-
- new-instance v2, Ljava/lang/StringBuilder;
-
- invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
- const-string v3, "The tag for combined_compose_audience_student_item is invalid. Received: "
-
- invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
- move-result-object v2
-
- invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 1206
- .end local v0 # "tag":Ljava/lang/Object;
- :pswitch_3640
- invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
- move-result-object v0
-
- .line 1207
- .restart local v0 # "tag":Ljava/lang/Object;
- if-nez v0, :cond_364f
-
- new-instance v1, Ljava/lang/RuntimeException;
-
- const-string v2, "view must have a tag"
-
- invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 1208
- :cond_364f
- const-string v1, "layout/combined_compose_audience_group_item_0"
-
- invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v1
-
- if-eqz v1, :cond_365d
-
- .line 1209
- new-instance v1, Lcom/classdojo/android/databinding/CombinedComposeAudienceGroupItemBinding;
-
- invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/CombinedComposeAudienceGroupItemBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
- return-object v1
-
- .line 1211
- :cond_365d
- new-instance v1, Ljava/lang/IllegalArgumentException;
-
- new-instance v2, Ljava/lang/StringBuilder;
-
- invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
- const-string v3, "The tag for combined_compose_audience_group_item is invalid. Received: "
-
- invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
- move-result-object v2
-
- invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 1062
- .end local v0 # "tag":Ljava/lang/Object;
- :pswitch_3674
- invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
- move-result-object v0
-
- .line 1063
- .restart local v0 # "tag":Ljava/lang/Object;
- if-nez v0, :cond_3683
-
- new-instance v1, Ljava/lang/RuntimeException;
-
- const-string v2, "view must have a tag"
-
- invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 1064
- :cond_3683
- const-string v1, "layout/class_students_item_header_0"
-
- invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v1
-
- if-eqz v1, :cond_3691
-
- .line 1065
- new-instance v1, Lcom/classdojo/android/databinding/ClassStudentsItemHeaderBinding;
-
- invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/ClassStudentsItemHeaderBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
- return-object v1
-
- .line 1067
- :cond_3691
- new-instance v1, Ljava/lang/IllegalArgumentException;
-
- new-instance v2, Ljava/lang/StringBuilder;
-
- invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
- const-string v3, "The tag for class_students_item_header is invalid. Received: "
-
- invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
- move-result-object v2
-
- invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 987
- .end local v0 # "tag":Ljava/lang/Object;
- :pswitch_36a8
- invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
- move-result-object v0
-
- .line 988
- .restart local v0 # "tag":Ljava/lang/Object;
- if-nez v0, :cond_36b7
-
- new-instance v1, Ljava/lang/RuntimeException;
-
- const-string v2, "view must have a tag"
-
- invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 989
- :cond_36b7
- const-string v1, "layout/class_students_item_0"
-
- invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v1
-
- if-eqz v1, :cond_36c5
-
- .line 990
- new-instance v1, Lcom/classdojo/android/databinding/ClassStudentsItemBinding;
-
- invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/ClassStudentsItemBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
- return-object v1
-
- .line 992
- :cond_36c5
- new-instance v1, Ljava/lang/IllegalArgumentException;
-
- new-instance v2, Ljava/lang/StringBuilder;
-
- invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
- const-string v3, "The tag for class_students_item is invalid. Received: "
-
- invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
- move-result-object v2
-
- invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 396
- .end local v0 # "tag":Ljava/lang/Object;
- :pswitch_36dc
- invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
- move-result-object v0
-
- .line 397
- .restart local v0 # "tag":Ljava/lang/Object;
- if-nez v0, :cond_36eb
-
- new-instance v1, Ljava/lang/RuntimeException;
-
- const-string v2, "view must have a tag"
-
- invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 398
- :cond_36eb
- const-string v1, "layout/binding_variable_placeholder_0"
-
- invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v1
-
- if-eqz v1, :cond_36f9
-
- .line 399
- new-instance v1, Lcz/kinst/jakub/viewmodelbinding/databinding/BindingVariablePlaceholderBinding;
-
- invoke-direct {v1, p1, p2}, Lcz/kinst/jakub/viewmodelbinding/databinding/BindingVariablePlaceholderBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
- return-object v1
-
- .line 401
- :cond_36f9
- new-instance v1, Ljava/lang/IllegalArgumentException;
-
- new-instance v2, Ljava/lang/StringBuilder;
-
- invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
- const-string v3, "The tag for binding_variable_placeholder is invalid. Received: "
-
- invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
- move-result-object v2
-
- invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 621
- .end local v0 # "tag":Ljava/lang/Object;
- :pswitch_3710
- invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
- move-result-object v0
-
- .line 622
- .restart local v0 # "tag":Ljava/lang/Object;
- if-nez v0, :cond_371f
-
- new-instance v1, Ljava/lang/RuntimeException;
-
- const-string v2, "view must have a tag"
-
- invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 623
- :cond_371f
- const-string v1, "layout/add_note_undo_popup_0"
-
- invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v1
-
- if-eqz v1, :cond_372d
-
- .line 624
- new-instance v1, Lcom/classdojo/android/databinding/AddNoteUndoPopupBinding;
-
- invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/AddNoteUndoPopupBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
- return-object v1
-
- .line 626
- :cond_372d
- new-instance v1, Ljava/lang/IllegalArgumentException;
-
- new-instance v2, Ljava/lang/StringBuilder;
-
- invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
- const-string v3, "The tag for add_note_undo_popup is invalid. Received: "
-
- invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
- move-result-object v2
-
- invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 657
- .end local v0 # "tag":Ljava/lang/Object;
- :pswitch_3744
- invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
- move-result-object v0
-
- .line 658
- .restart local v0 # "tag":Ljava/lang/Object;
- if-nez v0, :cond_3753
-
- new-instance v1, Ljava/lang/RuntimeException;
-
- const-string v2, "view must have a tag"
-
- invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 659
- :cond_3753
- const-string v1, "layout/activity_teacher_onboarding_check_email_0"
-
- invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v1
-
- if-eqz v1, :cond_3761
-
- .line 660
- new-instance v1, Lcom/classdojo/android/databinding/ActivityTeacherOnboardingCheckEmailBinding;
-
- invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/ActivityTeacherOnboardingCheckEmailBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
- return-object v1
-
- .line 662
- :cond_3761
- new-instance v1, Ljava/lang/IllegalArgumentException;
-
- new-instance v2, Ljava/lang/StringBuilder;
-
- invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
- const-string v3, "The tag for activity_teacher_onboarding_check_email is invalid. Received: "
-
- invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
- move-result-object v2
-
- invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 1872
- .end local v0 # "tag":Ljava/lang/Object;
- :pswitch_3778
- invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
- move-result-object v0
-
- .line 1873
- .restart local v0 # "tag":Ljava/lang/Object;
- if-nez v0, :cond_3787
-
- new-instance v1, Ljava/lang/RuntimeException;
-
- const-string v2, "view must have a tag"
-
- invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 1874
- :cond_3787
- const-string v1, "layout/activity_teacher_home_null_state_0"
-
- invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v1
-
- if-eqz v1, :cond_3795
-
- .line 1875
- new-instance v1, Lcom/classdojo/android/databinding/ActivityTeacherHomeNullStateBinding;
-
- invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/ActivityTeacherHomeNullStateBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
- return-object v1
-
- .line 1877
- :cond_3795
- new-instance v1, Ljava/lang/IllegalArgumentException;
-
- new-instance v2, Ljava/lang/StringBuilder;
-
- invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
- const-string v3, "The tag for activity_teacher_home_null_state is invalid. Received: "
-
- invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
- move-result-object v2
-
- invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 777
- .end local v0 # "tag":Ljava/lang/Object;
- :pswitch_37ac
- invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
- move-result-object v0
-
- .line 778
- .restart local v0 # "tag":Ljava/lang/Object;
- if-nez v0, :cond_37bb
-
- new-instance v1, Ljava/lang/RuntimeException;
-
- const-string v2, "view must have a tag"
-
- invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 779
- :cond_37bb
- const-string v1, "layout/activity_teacher_home_drawer_header_light_0"
-
- invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v1
-
- if-eqz v1, :cond_37c9
-
- .line 780
- new-instance v1, Lcom/classdojo/android/databinding/ActivityTeacherHomeDrawerHeaderLightBinding;
-
- invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/ActivityTeacherHomeDrawerHeaderLightBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
- return-object v1
-
- .line 782
- :cond_37c9
- new-instance v1, Ljava/lang/IllegalArgumentException;
-
- new-instance v2, Ljava/lang/StringBuilder;
-
- invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
- const-string v3, "The tag for activity_teacher_home_drawer_header_light is invalid. Received: "
-
- invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
- move-result-object v2
-
- invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 369
- .end local v0 # "tag":Ljava/lang/Object;
- :pswitch_37e0
- invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
- move-result-object v0
-
- .line 370
- .restart local v0 # "tag":Ljava/lang/Object;
- if-nez v0, :cond_37ef
-
- new-instance v1, Ljava/lang/RuntimeException;
-
- const-string v2, "view must have a tag"
-
- invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 371
- :cond_37ef
- const-string v1, "layout/activity_teacher_home_drawer_header_dark_0"
-
- invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v1
-
- if-eqz v1, :cond_37fd
-
- .line 372
- new-instance v1, Lcom/classdojo/android/databinding/ActivityTeacherHomeDrawerHeaderDarkBinding;
-
- invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/ActivityTeacherHomeDrawerHeaderDarkBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
- return-object v1
-
- .line 374
- :cond_37fd
- new-instance v1, Ljava/lang/IllegalArgumentException;
-
- new-instance v2, Ljava/lang/StringBuilder;
-
- invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
- const-string v3, "The tag for activity_teacher_home_drawer_header_dark is invalid. Received: "
-
- invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
- move-result-object v2
-
- invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 813
- .end local v0 # "tag":Ljava/lang/Object;
- :pswitch_3814
- invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
- move-result-object v0
-
- .line 814
- .restart local v0 # "tag":Ljava/lang/Object;
- if-nez v0, :cond_3823
-
- new-instance v1, Ljava/lang/RuntimeException;
-
- const-string v2, "view must have a tag"
-
- invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 815
- :cond_3823
- const-string v1, "layout-sw600dp-land/activity_teacher_home_0"
-
- invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v1
-
- if-eqz v1, :cond_3831
-
- .line 816
- new-instance v1, Lcom/classdojo/android/databinding/ActivityTeacherHomeBindingSw600dpLandImpl;
-
- invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/ActivityTeacherHomeBindingSw600dpLandImpl;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
- return-object v1
-
- .line 818
- :cond_3831
- const-string v1, "layout/activity_teacher_home_0"
-
- invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v1
-
- if-eqz v1, :cond_383f
-
- .line 819
- new-instance v1, Lcom/classdojo/android/databinding/ActivityTeacherHomeBindingImpl;
-
- invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/ActivityTeacherHomeBindingImpl;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
- return-object v1
-
- .line 821
- :cond_383f
- new-instance v1, Ljava/lang/IllegalArgumentException;
-
- new-instance v2, Ljava/lang/StringBuilder;
-
- invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
- const-string v3, "The tag for activity_teacher_home is invalid. Received: "
-
- invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
- move-result-object v2
-
- invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 1125
- .end local v0 # "tag":Ljava/lang/Object;
- :pswitch_3856
- invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
- move-result-object v0
-
- .line 1126
- .restart local v0 # "tag":Ljava/lang/Object;
- if-nez v0, :cond_3865
-
- new-instance v1, Ljava/lang/RuntimeException;
-
- const-string v2, "view must have a tag"
-
- invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 1127
- :cond_3865
- const-string v1, "layout/activity_teacher_behavior_controller_0"
-
- invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v1
-
- if-eqz v1, :cond_3873
-
- .line 1128
- new-instance v1, Lcom/classdojo/android/databinding/ActivityTeacherBehaviorControllerBinding;
-
- invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/ActivityTeacherBehaviorControllerBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
- return-object v1
-
- .line 1130
- :cond_3873
- new-instance v1, Ljava/lang/IllegalArgumentException;
-
- new-instance v2, Ljava/lang/StringBuilder;
-
- invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
- const-string v3, "The tag for activity_teacher_behavior_controller is invalid. Received: "
-
- invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
- move-result-object v2
-
- invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 741
- .end local v0 # "tag":Ljava/lang/Object;
- :pswitch_388a
- invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
- move-result-object v0
-
- .line 742
- .restart local v0 # "tag":Ljava/lang/Object;
- if-nez v0, :cond_3899
-
- new-instance v1, Ljava/lang/RuntimeException;
-
- const-string v2, "view must have a tag"
-
- invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 743
- :cond_3899
- const-string v1, "layout/activity_student_settings_0"
-
- invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v1
-
- if-eqz v1, :cond_38a7
-
- .line 744
- new-instance v1, Lcom/classdojo/android/databinding/ActivityStudentSettingsBinding;
-
- invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/ActivityStudentSettingsBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
- return-object v1
-
- .line 746
- :cond_38a7
- new-instance v1, Ljava/lang/IllegalArgumentException;
-
- new-instance v2, Ljava/lang/StringBuilder;
-
- invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
- const-string v3, "The tag for activity_student_settings is invalid. Received: "
-
- invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
- move-result-object v2
-
- invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 1527
- .end local v0 # "tag":Ljava/lang/Object;
- :pswitch_38be
- invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
- move-result-object v0
-
- .line 1528
- .restart local v0 # "tag":Ljava/lang/Object;
- if-nez v0, :cond_38cd
-
- new-instance v1, Ljava/lang/RuntimeException;
-
- const-string v2, "view must have a tag"
-
- invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 1529
- :cond_38cd
- const-string v1, "layout/activity_student_search_0"
-
- invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v1
-
- if-eqz v1, :cond_38db
-
- .line 1530
- new-instance v1, Lcom/classdojo/android/databinding/ActivityStudentSearchBinding;
-
- invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/ActivityStudentSearchBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
- return-object v1
-
- .line 1532
- :cond_38db
- new-instance v1, Ljava/lang/IllegalArgumentException;
-
- new-instance v2, Ljava/lang/StringBuilder;
-
- invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
- const-string v3, "The tag for activity_student_search is invalid. Received: "
-
- invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
- move-result-object v2
-
- invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 1305
- .end local v0 # "tag":Ljava/lang/Object;
- :pswitch_38f2
- invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
- move-result-object v0
-
- .line 1306
- .restart local v0 # "tag":Ljava/lang/Object;
- if-nez v0, :cond_3901
-
- new-instance v1, Ljava/lang/RuntimeException;
-
- const-string v2, "view must have a tag"
-
- invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 1307
- :cond_3901
- const-string v1, "layout/activity_share_media_content_0"
-
- invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v1
-
- if-eqz v1, :cond_390f
-
- .line 1308
- new-instance v1, Lcom/classdojo/android/databinding/ActivityShareMediaContentBinding;
-
- invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/ActivityShareMediaContentBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
- return-object v1
-
- .line 1310
- :cond_390f
- new-instance v1, Ljava/lang/IllegalArgumentException;
-
- new-instance v2, Ljava/lang/StringBuilder;
-
- invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
- const-string v3, "The tag for activity_share_media_content is invalid. Received: "
-
- invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
- move-result-object v2
-
- invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 768
- .end local v0 # "tag":Ljava/lang/Object;
- :pswitch_3926
- invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
- move-result-object v0
-
- .line 769
- .restart local v0 # "tag":Ljava/lang/Object;
- if-nez v0, :cond_3935
-
- new-instance v1, Ljava/lang/RuntimeException;
-
- const-string v2, "view must have a tag"
-
- invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 770
- :cond_3935
- const-string v1, "layout/activity_share_media_audience_selector_0"
-
- invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v1
-
- if-eqz v1, :cond_3943
-
- .line 771
- new-instance v1, Lcom/classdojo/android/databinding/ActivityShareMediaAudienceSelectorBinding;
-
- invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/ActivityShareMediaAudienceSelectorBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
- return-object v1
-
- .line 773
- :cond_3943
- new-instance v1, Ljava/lang/IllegalArgumentException;
-
- new-instance v2, Ljava/lang/StringBuilder;
-
- invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
- const-string v3, "The tag for activity_share_media_audience_selector is invalid. Received: "
-
- invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
- move-result-object v2
-
- invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 279
- .end local v0 # "tag":Ljava/lang/Object;
- :pswitch_395a
- invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
- move-result-object v0
-
- .line 280
- .restart local v0 # "tag":Ljava/lang/Object;
- if-nez v0, :cond_3969
-
- new-instance v1, Ljava/lang/RuntimeException;
-
- const-string v2, "view must have a tag"
-
- invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 281
- :cond_3969
- const-string v1, "layout/activity_share_media_0"
-
- invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v1
-
- if-eqz v1, :cond_3977
-
- .line 282
- new-instance v1, Lcom/classdojo/android/databinding/ActivityShareMediaBinding;
-
- invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/ActivityShareMediaBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
- return-object v1
-
- .line 284
- :cond_3977
- new-instance v1, Ljava/lang/IllegalArgumentException;
-
- new-instance v2, Ljava/lang/StringBuilder;
-
- invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
- const-string v3, "The tag for activity_share_media is invalid. Received: "
-
- invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
- move-result-object v2
-
- invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 2151
- .end local v0 # "tag":Ljava/lang/Object;
- :pswitch_398e
- invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
- move-result-object v0
-
- .line 2152
- .restart local v0 # "tag":Ljava/lang/Object;
- if-nez v0, :cond_399d
-
- new-instance v1, Ljava/lang/RuntimeException;
-
- const-string v2, "view must have a tag"
-
- invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 2153
- :cond_399d
- const-string v1, "layout/activity_setup_skills_sharing_0"
-
- invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v1
-
- if-eqz v1, :cond_39ab
-
- .line 2154
- new-instance v1, Lcom/classdojo/android/databinding/ActivitySetupSkillsSharingBinding;
-
- invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/ActivitySetupSkillsSharingBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
- return-object v1
-
- .line 2156
- :cond_39ab
- new-instance v1, Ljava/lang/IllegalArgumentException;
-
- new-instance v2, Ljava/lang/StringBuilder;
-
- invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
- const-string v3, "The tag for activity_setup_skills_sharing is invalid. Received: "
-
- invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
- move-result-object v2
-
- invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 48
- .end local v0 # "tag":Ljava/lang/Object;
- :pswitch_39c2
- invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
- move-result-object v0
-
- .line 49
- .restart local v0 # "tag":Ljava/lang/Object;
- if-nez v0, :cond_39d1
-
- new-instance v1, Ljava/lang/RuntimeException;
-
- const-string v2, "view must have a tag"
-
- invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 50
- :cond_39d1
- const-string v1, "layout/activity_setup_skills_0"
-
- invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v1
-
- if-eqz v1, :cond_39df
-
- .line 51
- new-instance v1, Lcom/classdojo/android/databinding/ActivitySetupSkillsBinding;
-
- invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/ActivitySetupSkillsBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
- return-object v1
-
- .line 53
- :cond_39df
- new-instance v1, Ljava/lang/IllegalArgumentException;
-
- new-instance v2, Ljava/lang/StringBuilder;
-
- invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
- const-string v3, "The tag for activity_setup_skills is invalid. Received: "
-
- invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
- move-result-object v2
-
- invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 906
- .end local v0 # "tag":Ljava/lang/Object;
- :pswitch_39f6
- invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
- move-result-object v0
-
- .line 907
- .restart local v0 # "tag":Ljava/lang/Object;
- if-nez v0, :cond_3a05
-
- new-instance v1, Ljava/lang/RuntimeException;
-
- const-string v2, "view must have a tag"
-
- invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 908
- :cond_3a05
- const-string v1, "layout/activity_onboarding_teacher_sign_up_flow_0"
-
- invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v1
-
- if-eqz v1, :cond_3a13
-
- .line 909
- new-instance v1, Lcom/classdojo/android/databinding/ActivityOnboardingTeacherSignUpFlowBinding;
-
- invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/ActivityOnboardingTeacherSignUpFlowBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
- return-object v1
-
- .line 911
- :cond_3a13
- new-instance v1, Ljava/lang/IllegalArgumentException;
-
- new-instance v2, Ljava/lang/StringBuilder;
-
- invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
- const-string v3, "The tag for activity_onboarding_teacher_sign_up_flow is invalid. Received: "
-
- invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
- move-result-object v2
-
- invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 2466
- .end local v0 # "tag":Ljava/lang/Object;
- :pswitch_3a2a
- invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
- move-result-object v0
-
- .line 2467
- .restart local v0 # "tag":Ljava/lang/Object;
- if-nez v0, :cond_3a39
-
- new-instance v1, Ljava/lang/RuntimeException;
-
- const-string v2, "view must have a tag"
-
- invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 2468
- :cond_3a39
- const-string v1, "layout/activity_onboarding_parent_sign_up_flow_0"
-
- invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v1
-
- if-eqz v1, :cond_3a47
-
- .line 2469
- new-instance v1, Lcom/classdojo/android/databinding/ActivityOnboardingParentSignUpFlowBinding;
-
- invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/ActivityOnboardingParentSignUpFlowBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
- return-object v1
-
- .line 2471
- :cond_3a47
- new-instance v1, Ljava/lang/IllegalArgumentException;
-
- new-instance v2, Ljava/lang/StringBuilder;
-
- invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
- const-string v3, "The tag for activity_onboarding_parent_sign_up_flow is invalid. Received: "
-
- invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
- move-result-object v2
-
- invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 915
- .end local v0 # "tag":Ljava/lang/Object;
- :pswitch_3a5e
- invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
- move-result-object v0
-
- .line 916
- .restart local v0 # "tag":Ljava/lang/Object;
- if-nez v0, :cond_3a6d
-
- new-instance v1, Ljava/lang/RuntimeException;
-
- const-string v2, "view must have a tag"
-
- invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 917
- :cond_3a6d
- const-string v1, "layout/activity_dojo_camera_0"
-
- invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v1
-
- if-eqz v1, :cond_3a7b
-
- .line 918
- new-instance v1, Lcom/classdojo/android/databinding/ActivityDojoCameraBinding;
-
- invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/ActivityDojoCameraBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
- return-object v1
-
- .line 920
- :cond_3a7b
- new-instance v1, Ljava/lang/IllegalArgumentException;
-
- new-instance v2, Ljava/lang/StringBuilder;
-
- invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
- const-string v3, "The tag for activity_dojo_camera is invalid. Received: "
-
- invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
- move-result-object v2
-
- invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 1242
- .end local v0 # "tag":Ljava/lang/Object;
- :pswitch_3a92
- invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
- move-result-object v0
-
- .line 1243
- .restart local v0 # "tag":Ljava/lang/Object;
- if-nez v0, :cond_3aa1
-
- new-instance v1, Ljava/lang/RuntimeException;
-
- const-string v2, "view must have a tag"
-
- invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 1244
- :cond_3aa1
- const-string v1, "layout/activity_debug_urls_0"
-
- invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v1
-
- if-eqz v1, :cond_3aaf
-
- .line 1245
- new-instance v1, Lcom/classdojo/android/databinding/ActivityDebugUrlsBinding;
-
- invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/ActivityDebugUrlsBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
- return-object v1
-
- .line 1247
- :cond_3aaf
- new-instance v1, Ljava/lang/IllegalArgumentException;
-
- new-instance v2, Ljava/lang/StringBuilder;
-
- invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
- const-string v3, "The tag for activity_debug_urls is invalid. Received: "
-
- invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
- move-result-object v2
-
- invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 951
- .end local v0 # "tag":Ljava/lang/Object;
- :pswitch_3ac6
- invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
- move-result-object v0
-
- .line 952
- .restart local v0 # "tag":Ljava/lang/Object;
- if-nez v0, :cond_3ad5
-
- new-instance v1, Ljava/lang/RuntimeException;
-
- const-string v2, "view must have a tag"
-
- invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 953
- :cond_3ad5
- const-string v1, "layout/activity_debug_deeplinks_0"
-
- invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v1
-
- if-eqz v1, :cond_3ae3
-
- .line 954
- new-instance v1, Lcom/classdojo/android/databinding/ActivityDebugDeeplinksBinding;
-
- invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/ActivityDebugDeeplinksBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
- return-object v1
-
- .line 956
- :cond_3ae3
- new-instance v1, Ljava/lang/IllegalArgumentException;
-
- new-instance v2, Ljava/lang/StringBuilder;
-
- invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
- const-string v3, "The tag for activity_debug_deeplinks is invalid. Received: "
-
- invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
- move-result-object v2
-
- invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 2223
- .end local v0 # "tag":Ljava/lang/Object;
- :pswitch_3afa
- invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
- move-result-object v0
-
- .line 2224
- .restart local v0 # "tag":Ljava/lang/Object;
- if-nez v0, :cond_3b09
-
- new-instance v1, Ljava/lang/RuntimeException;
-
- const-string v2, "view must have a tag"
-
- invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 2225
- :cond_3b09
- const-string v1, "layout/activity_debug_0"
-
- invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v1
-
- if-eqz v1, :cond_3b17
-
- .line 2226
- new-instance v1, Lcom/classdojo/android/databinding/ActivityDebugBinding;
-
- invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/ActivityDebugBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
- return-object v1
-
- .line 2228
- :cond_3b17
- new-instance v1, Ljava/lang/IllegalArgumentException;
-
- new-instance v2, Ljava/lang/StringBuilder;
-
- invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
- const-string v3, "The tag for activity_debug is invalid. Received: "
-
- invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
- move-result-object v2
-
- invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 306
- .end local v0 # "tag":Ljava/lang/Object;
- :pswitch_3b2e
- invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
- move-result-object v0
-
- .line 307
- .restart local v0 # "tag":Ljava/lang/Object;
- if-nez v0, :cond_3b3d
-
- new-instance v1, Ljava/lang/RuntimeException;
-
- const-string v2, "view must have a tag"
-
- invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 308
- :cond_3b3d
- const-string v1, "layout/activity_connection_requests_0"
-
- invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v1
-
- if-eqz v1, :cond_3b4b
-
- .line 309
- new-instance v1, Lcom/classdojo/android/databinding/ActivityConnectionRequestsBinding;
-
- invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/ActivityConnectionRequestsBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
- return-object v1
-
- .line 311
- :cond_3b4b
- new-instance v1, Ljava/lang/IllegalArgumentException;
-
- new-instance v2, Ljava/lang/StringBuilder;
-
- invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
- const-string v3, "The tag for activity_connection_requests is invalid. Received: "
-
- invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
- move-result-object v2
-
- invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 486
- .end local v0 # "tag":Ljava/lang/Object;
- :pswitch_3b62
- invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
- move-result-object v0
-
- .line 487
- .restart local v0 # "tag":Ljava/lang/Object;
- if-nez v0, :cond_3b71
-
- new-instance v1, Ljava/lang/RuntimeException;
-
- const-string v2, "view must have a tag"
-
- invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 488
- :cond_3b71
- const-string v1, "layout/activity_connection_reqeusts_item_0"
-
- invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v1
-
- if-eqz v1, :cond_3b7f
-
- .line 489
- new-instance v1, Lcom/classdojo/android/databinding/ActivityConnectionReqeustsItemBinding;
-
- invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/ActivityConnectionReqeustsItemBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
- return-object v1
-
- .line 491
- :cond_3b7f
- new-instance v1, Ljava/lang/IllegalArgumentException;
-
- new-instance v2, Ljava/lang/StringBuilder;
-
- invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
- const-string v3, "The tag for activity_connection_reqeusts_item is invalid. Received: "
-
- invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
- move-result-object v2
-
- invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 1974
- .end local v0 # "tag":Ljava/lang/Object;
- :pswitch_3b96
- invoke-virtual {p2}, Landroid/view/View;->getTag()Ljava/lang/Object;
-
- move-result-object v0
-
- .line 1975
- .restart local v0 # "tag":Ljava/lang/Object;
- if-nez v0, :cond_3ba5
-
- new-instance v1, Ljava/lang/RuntimeException;
-
- const-string v2, "view must have a tag"
-
- invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- .line 1976
- :cond_3ba5
- const-string v1, "layout/activity_combined_camera_text_post_0"
-
- invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v1
-
- if-eqz v1, :cond_3bb3
-
- .line 1977
- new-instance v1, Lcom/classdojo/android/databinding/ActivityCombinedCameraTextPostBinding;
-
- invoke-direct {v1, p1, p2}, Lcom/classdojo/android/databinding/ActivityCombinedCameraTextPostBinding;-><init>(Landroid/databinding/DataBindingComponent;Landroid/view/View;)V
-
- return-object v1
-
- .line 1979
- :cond_3bb3
- new-instance v1, Ljava/lang/IllegalArgumentException;
-
- new-instance v2, Ljava/lang/StringBuilder;
-
- invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
-
- const-string v3, "The tag for activity_combined_camera_text_post is invalid. Received: "
-
- invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
-
- invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
-
- move-result-object v2
-
- invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
-
- throw v1
-
- nop
-
- :pswitch_data_3bcc
- .packed-switch 0x7f0c002a
- :pswitch_3b96
- :pswitch_3b62
- :pswitch_3b2e
- .end packed-switch
-
- :pswitch_data_3bd6
- .packed-switch 0x7f0c0031
- :pswitch_3afa
- :pswitch_3ac6
- :pswitch_3a92
- :pswitch_3a5e
- .end packed-switch
-
- :pswitch_data_3be2
- .packed-switch 0x7f0c0041
- :pswitch_3a2a
- :pswitch_39f6
- .end packed-switch
-
- :pswitch_data_3bea
- .packed-switch 0x7f0c0057
- :pswitch_39c2
- :pswitch_398e
- :pswitch_395a
- :pswitch_3926
- :pswitch_38f2
- .end packed-switch
-
- :pswitch_data_3bf8
- .packed-switch 0x7f0c0067
- :pswitch_38be
- :pswitch_388a
- .end packed-switch
-
- :pswitch_data_3c00
- .packed-switch 0x7f0c006a
- :pswitch_3856
- :pswitch_3814
- :pswitch_37e0
- :pswitch_37ac
- :pswitch_3778
- :pswitch_3744
- .end packed-switch
-
- :pswitch_data_3c10
- .packed-switch 0x7f0c0076
- :pswitch_3710
- :pswitch_36dc
- .end packed-switch
-
- :pswitch_data_3c18
- .packed-switch 0x7f0c0084
- :pswitch_36a8
- :pswitch_3674
- :pswitch_3640
- .end packed-switch
-
- :pswitch_data_3c22
- .packed-switch 0x7f0c0088
- :pswitch_360c
- :pswitch_35d8
- .end packed-switch
-
- :pswitch_data_3c2a
- .packed-switch 0x7f0c00a3
- :pswitch_35a4
- :pswitch_3570
- .end packed-switch
-
- :pswitch_data_3c32
- .packed-switch 0x7f0c00a6
- :pswitch_353c
- :pswitch_3508
- :pswitch_34d4
- :pswitch_34a0
- :pswitch_346c
- .end packed-switch
-
- :pswitch_data_3c40
- .packed-switch 0x7f0c00ac
- :pswitch_3438
- :pswitch_3404
- :pswitch_33d0
- :pswitch_339c
- .end packed-switch
-
- :pswitch_data_3c4c
- .packed-switch 0x7f0c00b1
- :pswitch_3368
- :pswitch_3334
- :pswitch_3300
- :pswitch_32cc
- .end packed-switch
-
- :pswitch_data_3c58
- .packed-switch 0x7f0c00b8
- :pswitch_3298
- :pswitch_3264
- :pswitch_3230
- .end packed-switch
-
- :pswitch_data_3c62
- .packed-switch 0x7f0c00bc
- :pswitch_31fc
- :pswitch_31c8
- :pswitch_3194
- :pswitch_3160
- :pswitch_312c
- :pswitch_30f8
- .end packed-switch
-
- :pswitch_data_3c72
- .packed-switch 0x7f0c00cb
- :pswitch_30c4
- :pswitch_3090
- :pswitch_305c
- :pswitch_301a
- :pswitch_2fe6
- :pswitch_2fb2
- :pswitch_2f7e
- :pswitch_2f4a
- :pswitch_2f16
- :pswitch_2ee2
- .end packed-switch
-
- :pswitch_data_3c8a
- .packed-switch 0x7f0c00d6
- :pswitch_2eae
- :pswitch_2e7a
- :pswitch_2e46
- :pswitch_2e12
- :pswitch_2dde
- :pswitch_2daa
- :pswitch_2d76
- :pswitch_2d42
- :pswitch_2d0e
- :pswitch_2cda
- :pswitch_2ca6
- :pswitch_2c72
- :pswitch_2c3e
- :pswitch_2c0a
- :pswitch_2bd6
- :pswitch_2ba2
- :pswitch_2b6e
- :pswitch_2b3a
- :pswitch_2b06
- :pswitch_2ad2
- :pswitch_2a9e
- :pswitch_2a6a
- :pswitch_2a36
- :pswitch_2a02
- :pswitch_29ce
- :pswitch_299a
- :pswitch_2966
- :pswitch_2924
- :pswitch_28f0
- :pswitch_28bc
- :pswitch_2888
- :pswitch_2854
- :pswitch_2820
- :pswitch_27ec
- .end packed-switch
-
- :pswitch_data_3cd2
- .packed-switch 0x7f0c00f9
- :pswitch_27b8
- :pswitch_2784
- :pswitch_2750
- :pswitch_271c
- .end packed-switch
-
- :pswitch_data_3cde
- .packed-switch 0x7f0c0100
- :pswitch_26e8
- :pswitch_26b4
- :pswitch_2680
- :pswitch_264c
- :pswitch_2618
- :pswitch_25d6
- :pswitch_25a2
- :pswitch_256e
- :pswitch_253a
- :pswitch_2506
- :pswitch_24d2
- :pswitch_249e
- :pswitch_246a
- :pswitch_2436
- :pswitch_2402
- :pswitch_23ce
- :pswitch_239a
- :pswitch_2366
- :pswitch_2332
- :pswitch_22fe
- :pswitch_22ca
- :pswitch_2296
- :pswitch_2262
- :pswitch_222e
- :pswitch_21fa
- :pswitch_21c6
- :pswitch_2192
- :pswitch_215e
- :pswitch_212a
- :pswitch_20f6
- :pswitch_20c2
- :pswitch_208e
- :pswitch_205a
- :pswitch_2026
- :pswitch_1ff2
- :pswitch_1fbe
- .end packed-switch
-
- :pswitch_data_3d2a
- .packed-switch 0x7f0c0127
- :pswitch_1f8a
- :pswitch_1f56
- :pswitch_1f22
- :pswitch_1eee
- :pswitch_1eba
- :pswitch_1e86
- :pswitch_1e52
- :pswitch_1e1e
- :pswitch_1dea
- :pswitch_1db6
- :pswitch_1d82
- :pswitch_1d4e
- :pswitch_1d1a
- :pswitch_1ce6
- :pswitch_1cb2
- :pswitch_1c7e
- :pswitch_1c4a
- :pswitch_1c16
- :pswitch_1be2
- :pswitch_1bae
- :pswitch_1b7a
- :pswitch_1b46
- :pswitch_1b12
- :pswitch_1ade
- :pswitch_1aaa
- :pswitch_1a76
- :pswitch_1a42
- :pswitch_1a0e
- :pswitch_19be
- :pswitch_197c
- :pswitch_1948
- :pswitch_1914
- :pswitch_18e0
- :pswitch_18ac
- :pswitch_1878
- :pswitch_1844
- :pswitch_1810
- :pswitch_17dc
- :pswitch_17a8
- :pswitch_1766
- :pswitch_1732
- :pswitch_16fe
- :pswitch_16ca
- :pswitch_1696
- :pswitch_1662
- :pswitch_162e
- :pswitch_15fa
- :pswitch_15c6
- :pswitch_1592
- :pswitch_155e
- .end packed-switch
-
- :pswitch_data_3d92
- .packed-switch 0x7f0c015f
- :pswitch_152a
- :pswitch_14f6
- .end packed-switch
-
- :pswitch_data_3d9a
- .packed-switch 0x7f0c0162
- :pswitch_14c2
- :pswitch_148e
- :pswitch_145a
- :pswitch_1426
- :pswitch_13f2
- .end packed-switch
-
- :pswitch_data_3da8
- .packed-switch 0x7f0c016e
- :pswitch_13be
- :pswitch_138a
- :pswitch_1356
- .end packed-switch
-
- :pswitch_data_3db2
- .packed-switch 0x7f0c0174
- :pswitch_1322
- :pswitch_12ee
- :pswitch_12ba
- :pswitch_1286
- :pswitch_1252
- :pswitch_121e
- :pswitch_11dc
- :pswitch_11a8
- :pswitch_1174
- :pswitch_1140
- :pswitch_110c
- :pswitch_10d8
- :pswitch_10a4
- :pswitch_1070
- .end packed-switch
-
- :pswitch_data_3dd2
- .packed-switch 0x7f0c0183
- :pswitch_103c
- :pswitch_1008
- :pswitch_fd4
- :pswitch_fa0
- :pswitch_f6c
- :pswitch_f38
- :pswitch_f04
- :pswitch_ed0
- .end packed-switch
-
- :pswitch_data_3de6
- .packed-switch 0x7f0c018f
- :pswitch_e9c
- :pswitch_e68
- :pswitch_e34
- :pswitch_e00
- .end packed-switch
-
- :pswitch_data_3df2
- .packed-switch 0x7f0c019b
- :pswitch_dcc
- :pswitch_d98
- :pswitch_d64
- .end packed-switch
-
- :pswitch_data_3dfc
- .packed-switch 0x7f0c01a6
- :pswitch_d30
- :pswitch_cfc
- :pswitch_cc8
- :pswitch_c94
- .end packed-switch
-
- :pswitch_data_3e08
- .packed-switch 0x7f0c01ab
- :pswitch_c60
- :pswitch_c2c
- :pswitch_bf8
- .end packed-switch
-
- :pswitch_data_3e12
- .packed-switch 0x7f0c01af
- :pswitch_bc4
- :pswitch_b90
- :pswitch_b5c
- :pswitch_b28
- :pswitch_af4
- .end packed-switch
-
- :pswitch_data_3e20
- .packed-switch 0x7f0c01de
- :pswitch_ac0
- :pswitch_a8c
- :pswitch_a58
- .end packed-switch
-
- :pswitch_data_3e2a
- .packed-switch 0x7f0c01f8
- :pswitch_a24
- :pswitch_9e2
- :pswitch_9ae
- .end packed-switch
-
- :pswitch_data_3e34
- .packed-switch 0x7f0c0208
- :pswitch_97a
- :pswitch_946
- :pswitch_912
- :pswitch_8de
- :pswitch_8aa
- .end packed-switch
-
- :pswitch_data_3e42
- .packed-switch 0x7f0c0210
- :pswitch_868
- :pswitch_834
- :pswitch_800
- :pswitch_7cc
- :pswitch_798
- :pswitch_764
- .end packed-switch
-
- :pswitch_data_3e52
- .packed-switch 0x7f0c0218
- :pswitch_730
- :pswitch_6fc
- :pswitch_6c8
- .end packed-switch
-
- :sswitch_data_3e5c
- .sparse-switch
- 0x7f0c001d -> :sswitch_694
- 0x7f0c0026 -> :sswitch_660
- 0x7f0c0037 -> :sswitch_62c
- 0x7f0c0046 -> :sswitch_5f8
- 0x7f0c0048 -> :sswitch_5c4
- 0x7f0c004b -> :sswitch_590
- 0x7f0c004d -> :sswitch_55c
- 0x7f0c0052 -> :sswitch_528
- 0x7f0c0054 -> :sswitch_4f4
- 0x7f0c005f -> :sswitch_4b2
- 0x7f0c007f -> :sswitch_47e
- 0x7f0c0090 -> :sswitch_44a
- 0x7f0c00c9 -> :sswitch_416
- 0x7f0c00fe -> :sswitch_3e2
- 0x7f0c0125 -> :sswitch_3ae
- 0x7f0c015a -> :sswitch_37a
- 0x7f0c016b -> :sswitch_346
- 0x7f0c018c -> :sswitch_312
- 0x7f0c0195 -> :sswitch_2de
- 0x7f0c019f -> :sswitch_2aa
- 0x7f0c01a2 -> :sswitch_276
- 0x7f0c01a4 -> :sswitch_242
- 0x7f0c01e5 -> :sswitch_20e
- 0x7f0c01e7 -> :sswitch_1da
- 0x7f0c01e9 -> :sswitch_1a6
- 0x7f0c01f3 -> :sswitch_172
- 0x7f0c01f6 -> :sswitch_13e
- 0x7f0c01fe -> :sswitch_10a
- 0x7f0c0200 -> :sswitch_d6
- 0x7f0c0202 -> :sswitch_a2
- 0x7f0c0205 -> :sswitch_6e
- .end sparse-switch
-.end method
-
-.method public getDataBinder(Landroid/databinding/DataBindingComponent;[Landroid/view/View;I)Landroid/databinding/ViewDataBinding;
- .registers 5
- .param p1, "bindingComponent" # Landroid/databinding/DataBindingComponent;
- .param p2, "views" # [Landroid/view/View;
- .param p3, "layoutId" # I
-
- .line 2652
- nop
-
- .line 2654
- const/4 v0, 0x0
-
- return-object v0
-.end method
-
-.method public getLayoutId(Ljava/lang/String;)I
- .registers 15
- .param p1, "tag" # Ljava/lang/String;
-
- .line 2658
- const/4 v0, 0x0
-
- if-nez p1, :cond_4
-
- .line 2659
- return v0
-
- .line 2661
- :cond_4
- invoke-virtual {p1}, Ljava/lang/String;->hashCode()I
-
- move-result v1
-
- .line 2662
- .local v1, "code":I
- const v2, 0x7f0c0144
-
- const v3, 0x7f0c0105
-
- const v4, 0x7f0c00ce
-
- const v5, 0x7f0c014e
-
- const v6, 0x7f0c006b
-
- const v7, 0x7f0c0210
-
- const v8, 0x7f0c01f9
-
- const v9, 0x7f0c017a
-
- const v10, 0x7f0c005f
-
- const v11, 0x7f0c00f1
-
- const v12, 0x7f0c0143
-
- sparse-switch v1, :sswitch_data_e06
-
- goto/16 :goto_e05
-
- .line 3798
- :sswitch_2e
- const-string v2, "layout/fragment_student_capture_home_student_list_0"
-
- invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v2
-
- if-eqz v2, :cond_e05
-
- .line 3799
- const v0, 0x7f0c0140
-
- return v0
-
- .line 2670
- :sswitch_3a
- const-string v2, "layout/fragment_class_wall_settings_0"
-
- invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v2
-
- if-eqz v2, :cond_e05
-
- .line 2671
- const v0, 0x7f0c00e6
-
- return v0
-
- .line 4410
- :sswitch_46
- const-string v2, "layout/fragment_enter_student_mode_qr_0"
-
- invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v2
-
- if-eqz v2, :cond_e05
-
- .line 4411
- const v0, 0x7f0c00fb
-
- return v0
-
- .line 4104
- :sswitch_52
- const-string v2, "layout/item_file_attachment_view_0"
-
- invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v2
-
- if-eqz v2, :cond_e05
-
- .line 4105
- const v0, 0x7f0c0191
-
- return v0
-
- .line 3768
- :sswitch_5e
- const-string v2, "layout/fragment_kids_list_0"
-
- invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v2
-
- if-eqz v2, :cond_e05
-
- .line 3769
- const v0, 0x7f0c0102
-
- return v0
-
- .line 3432
- :sswitch_6a
- const-string v2, "layout/fragment_school_detail_header_0"
-
- invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v2
-
- if-eqz v2, :cond_e05
-
- .line 3433
- const v0, 0x7f0c0127
-
- return v0
-
- .line 2718
- :sswitch_76
- const-string v2, "layout/fragment_tab_notification_pending_posts_item_thumbnail_0"
-
- invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v2
-
- if-eqz v2, :cond_e05
-
- .line 2719
- const v0, 0x7f0c0179
-
- return v0
-
- .line 2982
- :sswitch_82
- const-string v2, "layout/fragment_onboarding_enter_code_0"
-
- invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v2
-
- if-eqz v2, :cond_e05
-
- .line 2983
- const v0, 0x7f0c0109
-
- return v0
-
- .line 3750
- :sswitch_8e
- const-string v2, "layout/view_drawing_tool_sticker_drawer_0"
-
- invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v2
-
- if-eqz v2, :cond_e05
-
- .line 3751
- const v0, 0x7f0c0212
-
- return v0
-
- .line 3024
- :sswitch_9a
- const-string v2, "layout/fragment_tab_class_wall_item_compose_0"
-
- invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v2
-
- if-eqz v2, :cond_e05
-
- .line 3025
- const v0, 0x7f0c015f
-
- return v0
-
- .line 3006
- :sswitch_a6
- const-string v2, "layout/dialog_teacher_student_consent_0"
-
- invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v2
-
- if-eqz v2, :cond_e05
-
- .line 3007
- const v0, 0x7f0c00bf
-
- return v0
-
- .line 4374
- :sswitch_b2
- const-string v2, "layout/fragment_teacher_student_connection_class_code_qr_0"
-
- invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v2
-
- if-eqz v2, :cond_e05
-
- .line 4375
- const v0, 0x7f0c0184
-
- return v0
-
- .line 4008
- :sswitch_be
- const-string v2, "layout/activity_combined_camera_text_post_0"
-
- invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v2
-
- if-eqz v2, :cond_e05
-
- .line 4009
- const v0, 0x7f0c002a
-
- return v0
-
- .line 3018
- :sswitch_ca
- const-string v2, "layout/fragment_parent_checklist_birthday_capture_item_0"
-
- invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v2
-
- if-eqz v2, :cond_e05
-
- .line 3019
- const v0, 0x7f0c0113
-
- return v0
-
- .line 4332
- :sswitch_d6
- const-string v2, "layout/fragment_school_directory_item_student_parent_circle_0"
-
- invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v2
-
- if-eqz v2, :cond_e05
-
- .line 4333
- const v0, 0x7f0c012d
-
- return v0
-
- .line 3384
- :sswitch_e2
- const-string v2, "layout/class_students_item_header_0"
-
- invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v2
-
- if-eqz v2, :cond_e05
-
- .line 3385
- const v0, 0x7f0c0085
-
- return v0
-
- .line 2922
- :sswitch_ee
- const-string v2, "layout/dialog_turn_on_password_lock_0"
-
- invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v2
-
- if-eqz v2, :cond_e05
-
- .line 2923
- const v0, 0x7f0c00c0
-
- return v0
-
- .line 4026
- :sswitch_fa
- const-string v2, "layout-sw600dp/fragment_dojo_camera_controls_0_0"
-
- invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v2
-
- if-eqz v2, :cond_e05
-
- .line 4027
- return v11
-
- .line 3762
- :sswitch_103
- const-string v2, "layout/webview_fragment_0"
-
- invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v2
-
- if-eqz v2, :cond_e05
-
- .line 3763
- const v0, 0x7f0c021a
-
- return v0
-
- .line 3222
- :sswitch_10f
- const-string v2, "layout/toolbar_gray_layout_0"
-
- invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v2
-
- if-eqz v2, :cond_e05
-
- .line 3223
- const v0, 0x7f0c0202
-
- return v0
-
- .line 3402
- :sswitch_11b
- const-string v2, "layout/fragment_dojo_photo_preview_0"
-
- invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v2
-
- if-eqz v2, :cond_e05
-
- .line 3403
- const v0, 0x7f0c00f6
-
- return v0
-
- .line 4320
- :sswitch_127
- const-string v2, "layout/fragment_attendance_item_0"
-
- invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v2
-
- if-eqz v2, :cond_e05
-
- .line 4321
- const v0, 0x7f0c00d7
-
- return v0
-
- .line 4050
- :sswitch_133
- const-string v2, "layout/dialog_unsupported_class_code_0"
-
- invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v2
-
- if-eqz v2, :cond_e05
-
- .line 4051
- const v0, 0x7f0c00c1
-
- return v0
-
- .line 3330
- :sswitch_13f
- const-string v2, "layout/class_students_item_0"
-
- invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v2
-
- if-eqz v2, :cond_e05
-
- .line 3331
- const v0, 0x7f0c0084
-
- return v0
-
- .line 4338
- :sswitch_14b
- const-string v2, "layout/fragment_onboarding_student_avatar_editor_0"
-
- invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v2
-
- if-eqz v2, :cond_e05
-
- .line 4339
- const v0, 0x7f0c010f
-
- return v0
-
- .line 4128
- :sswitch_157
- const-string v2, "layout/fragment_scheduled_messages_0"
-
- invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v2
-
- if-eqz v2, :cond_e05
-
- .line 4129
- const v0, 0x7f0c0123
-
- return v0
-
- .line 3258
- :sswitch_163
- const-string v2, "layout/fragment_profile_photo_item_0"
-
- invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v2
-
- if-eqz v2, :cond_e05
-
- .line 3259
- const v0, 0x7f0c011f
-
- return v0
-
- .line 3534
- :sswitch_16f
- const-string v2, "layout/fragment_tab_class_wall_item_student_avatar_0"
-
- invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v2
-
- if-eqz v2, :cond_e05
-
- .line 3535
- const v0, 0x7f0c016b
-
- return v0
-
- .line 4464
- :sswitch_17b
- const-string v2, "layout/layout_parent_connections_initial_0"
-
- invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v2
-
- if-eqz v2, :cond_e05
-
- .line 4465
- const v0, 0x7f0c01ab
-
- return v0
-
- .line 3936
- :sswitch_187
- const-string v2, "layout/activity_teacher_home_null_state_0"
-
- invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v2
-
- if-eqz v2, :cond_e05
-
- .line 3937
- const v0, 0x7f0c006e
-
- return v0
-
- .line 3396
- :sswitch_193
- const-string v2, "layout/fragment_chat_empty_0"
-
- invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v2
-
- if-eqz v2, :cond_e05
-
- .line 3397
- const v0, 0x7f0c00de
-
- return v0
-
- .line 4002
- :sswitch_19f
- const-string v2, "layout/item_teacher_student_text_code_0"
-
- invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v2
-
- if-eqz v2, :cond_e05
-
- .line 4003
- const v0, 0x7f0c01a6
-
- return v0
-
- .line 4272
- :sswitch_1ab
- const-string v2, "layout/layout_progress_footer_0"
-
- invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v2
-
- if-eqz v2, :cond_e05
-
- .line 4273
- const v0, 0x7f0c01af
-
- return v0
-
- .line 4200
- :sswitch_1b7
- const-string v2, "layout/view_parent_pending_connection_0"
-
- invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v2
-
- if-eqz v2, :cond_e05
-
- .line 4201
- const v0, 0x7f0c0215
-
- return v0
-
- .line 4140
- :sswitch_1c3
- const-string v2, "layout/fragment_create_school_0"
-
- invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v2
-
- if-eqz v2, :cond_e05
-
- .line 4141
- const v0, 0x7f0c00ef
-
- return v0
-
- .line 3522
- :sswitch_1cf
- const-string v2, "layout/fragment_parent_connection_request_0"
-
- invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v2
-
- if-eqz v2, :cond_e05
-
- .line 3523
- const v0, 0x7f0c0115
-
- return v0
-
- .line 3576
- :sswitch_1db
- const-string v2, "layout/fragment_edit_behaviours_0"
-
- invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v2
-
- if-eqz v2, :cond_e05
-
- .line 3577
- const v0, 0x7f0c00f7
-
- return v0
-
- .line 3390
- :sswitch_1e7
- const-string v2, "layout/dialog_class_code_student_select_0"
-
- invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v2
-
- if-eqz v2, :cond_e05
-
- .line 3391
- const v0, 0x7f0c00aa
-
- return v0
-
- .line 3516
- :sswitch_1f3
- const-string v2, "layout/fragment_teacher_channel_list_0"
-
- invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v2
-
- if-eqz v2, :cond_e05
-
- .line 3517
- const v0, 0x7f0c017e
-
- return v0
-
- .line 3264
- :sswitch_1ff
- const-string v2, "layout/fragment_tab_class_wall_item_parent_empty_0"
-
- invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v2
-
- if-eqz v2, :cond_e05
-
- .line 3265
- const v0, 0x7f0c0165
-
- return v0
-
- .line 3894
- :sswitch_20b
- const-string v2, "layout/fragment_group_students_0"
-
- invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v2
-
- if-eqz v2, :cond_e05
-
- .line 3895
- const v0, 0x7f0c00fe
-
- return v0
-
- .line 2886
- :sswitch_217
- const-string v2, "layout/activity_passwordless_login_0"
-
- invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v2
-
- if-eqz v2, :cond_e05
-
- .line 2887
- const v0, 0x7f0c004d
-
- return v0
-
- .line 2832
- :sswitch_223
- const-string v2, "layout/fragment_story_share_to_item_0"
-
- invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v2
-
- if-eqz v2, :cond_e05
-
- .line 2833
- const v0, 0x7f0c013c
-
- return v0
-
- .line 3990
- :sswitch_22f
- const-string v2, "layout/fragment_class_list_item_add_class_0"
-
- invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v2
-
- if-eqz v2, :cond_e05
-
- .line 3991
- const v0, 0x7f0c00e1
-
- return v0
-
- .line 3606
- :sswitch_23b
- const-string v2, "layout/layout_student_connections_invite_0"
-
- invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v2
-
- if-eqz v2, :cond_e05
-
- .line 3607
- const v0, 0x7f0c01b1
-
- return v0
-
- .line 4098
- :sswitch_247
- const-string v2, "layout/dialog_invite_student_code_0"
-
- invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v2
-
- if-eqz v2, :cond_e05
-
- .line 4099
- const v0, 0x7f0c00af
-
- return v0
-
- .line 4032
- :sswitch_253
- const-string v2, "layout/fragment_dojo_camera_controls_0_0"
-
- invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v2
-
- if-eqz v2, :cond_e05
-
- .line 4033
- return v11
-
- .line 3288
- :sswitch_25c
- const-string v2, "layout/toolbar_teacher_home_0"
-
- invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v2
-
- if-eqz v2, :cond_e05
-
- .line 3289
- const v0, 0x7f0c0209
-
- return v0
-
- .line 3834
- :sswitch_268
- const-string v2, "layout/fragment_edit_students_0"
-
- invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v2
-
- if-eqz v2, :cond_e05
-
- .line 3835
- const v0, 0x7f0c00f9
-
- return v0
-
- .line 2856
- :sswitch_274
- const-string v2, "layout/fragment_student_report_0"
-
- invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v2
-
- if-eqz v2, :cond_e05
-
- .line 2857
- const v0, 0x7f0c0152
-
- return v0
-
- .line 3582
- :sswitch_280
- const-string v2, "layout/dialog_schedule_message_time_0"
-
- invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v2
-
- if-eqz v2, :cond_e05
-
- .line 3583
- const v0, 0x7f0c00b8
-
- return v0
-
- .line 4290
- :sswitch_28c
- const-string v2, "layout/fragment_teacher_settings_0"
-
- invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v2
-
- if-eqz v2, :cond_e05
-
- .line 4291
- const v0, 0x7f0c0181
-
- return v0
-
- .line 4398
- :sswitch_298
- const-string v2, "layout/fragment_chat_item_sticker_0"
-
- invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v2
-
- if-eqz v2, :cond_e05
-
- .line 4399
- const v0, 0x7f0c00df
-
- return v0
-
- .line 2724
- :sswitch_2a4
- const-string v2, "layout/fragment_photo_preview_0"
-
- invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v2
-
- if-eqz v2, :cond_e05
-
- .line 2725
- const v0, 0x7f0c011d
-
- return v0
-
- .line 4386
- :sswitch_2b0
- const-string v2, "layout/fragment_teacher_approval_feed_item_0"
-
- invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v2
-
- if-eqz v2, :cond_e05
-
- .line 4387
- const v0, 0x7f0c017c
-
- return v0
-
- .line 3102
- :sswitch_2bc
- const-string v2, "layout/activity_teacher_onboarding_check_email_0"
-
- invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v2
-
- if-eqz v2, :cond_e05
-
- .line 3103
- const v0, 0x7f0c006f
-
- return v0
-
- .line 2730
- :sswitch_2c8
- const-string v2, "layout/fragment_onboarding_sign_up_details_0"
-
- invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v2
-
- if-eqz v2, :cond_e05
-
- .line 2731
- const v0, 0x7f0c010a
-
- return v0
-
- .line 4176
- :sswitch_2d4
- const-string v2, "layout/layout_student_connections_list_0"
-
- invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v2
-
- if-eqz v2, :cond_e05
-
- .line 4177
- const v0, 0x7f0c01b2
-
- return v0
-
- .line 3666
- :sswitch_2e0
- const-string v2, "layout/item_teacher_add_coteacher_0"
-
- invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v2
-
- if-eqz v2, :cond_e05
-
- .line 3667
- const v0, 0x7f0c01a4
-
- return v0
-
- .line 2946
- :sswitch_2ec
- const-string v2, "layout/fragment_student_capture_mark_students_marked_item_0"
-
- invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v2
-
- if-eqz v2, :cond_e05
-
- .line 2947
- const v0, 0x7f0c0142
-
- return v0
-
- .line 3240
- :sswitch_2f8
- const-string v2, "layout/fragment_parent_school_search_0"
-
- invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v2
-
- if-eqz v2, :cond_e05
-
- .line 3241
- const v0, 0x7f0c0117
-
- return v0
-
- .line 3540
- :sswitch_304
- const-string v2, "layout/dialog_parent_teacher_invitation_0"
-
- invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v2
-
- if-eqz v2, :cond_e05
-
- .line 3541
- const v0, 0x7f0c00b3
-
- return v0
-
- .line 4116
- :sswitch_310
- const-string v2, "layout/student_connections_individual_codes_invite_section_0"
-
- invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v2
-
- if-eqz v2, :cond_e05
-
- .line 4117
- const v0, 0x7f0c01f8
-
- return v0
-
- .line 3696
- :sswitch_31c
- const-string v2, "layout/popup_item_copy_0"
-
- invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v2
-
- if-eqz v2, :cond_e05
-
- .line 3697
- const v0, 0x7f0c01e9
-
- return v0
-
- .line 3858
- :sswitch_328
- const-string v2, "layout/fragment_combined_camera_0"
-
- invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v2
-
- if-eqz v2, :cond_e05
-
- .line 3859
- const v0, 0x7f0c00e8
-
- return v0
-
- .line 4134
- :sswitch_334
- const-string v2, "layout/activity_setup_skills_sharing_0"
-
- invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v2
-
- if-eqz v2, :cond_e05
-
- .line 4135
- const v0, 0x7f0c0058
-
- return v0
-
- .line 3630
- :sswitch_340
- const-string v2, "layout-sw600dp-land/activity_student_capture_home_0"
-
- invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v2
-
- if-eqz v2, :cond_e05
-
- .line 3631
- return v10
-
- .line 2754
- :sswitch_349
- const-string v2, "layout/fragment_class_list_item_class_0"
-
- invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v2
-
- if-eqz v2, :cond_e05
-
- .line 2755
- const v0, 0x7f0c00e2
-
- return v0
-
- .line 3312
- :sswitch_355
- const-string v2, "layout/activity_parent_setup_student_account_0"
-
- invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v2
-
- if-eqz v2, :cond_e05
-
- .line 3313
- const v0, 0x7f0c004b
-
- return v0
-
- .line 4182
- :sswitch_361
- const-string v2, "layout/activity_debug_0"
-
- invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v2
-
- if-eqz v2, :cond_e05
-
- .line 4183
- const v0, 0x7f0c0031
-
- return v0
-
- .line 3564
- :sswitch_36d
- const-string v2, "layout/fragment_student_capture_student_list_home_item_0"
-
- invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v2
-
- if-eqz v2, :cond_e05
-
- .line 3565
- const v0, 0x7f0c0147
-
- return v0
-
- .line 3054
- :sswitch_379
- const-string v2, "layout/placeholder_offline_with_refresh_0"
-
- invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v2
-
- if-eqz v2, :cond_e05
-
- .line 3055
- const v0, 0x7f0c01e7
-
- return v0
-
- .line 3684
- :sswitch_385
- const-string v2, "layout/fragment_audience_selector_item_0"
-
- invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v2
-
- if-eqz v2, :cond_e05
-
- .line 3685
- const v0, 0x7f0c00d8
-
- return v0
-
- .line 3732
- :sswitch_391
- const-string v2, "layout/activity_parent_home_0"
-
- invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v2
-
- if-eqz v2, :cond_e05
-
- .line 3733
- const v0, 0x7f0c0048
-
- return v0
-
- .line 4356
- :sswitch_39d
- const-string v2, "layout/fragment_student_codes_item_0"
-
- invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v2
-
- if-eqz v2, :cond_e05
-
- .line 4357
- const v0, 0x7f0c014b
-
- return v0
-
- .line 3654
- :sswitch_3a9
- const-string v2, "layout/fragment_tab_notification_list_item_0"
-
- invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v2
-
- if-eqz v2, :cond_e05
-
- .line 3655
- const v0, 0x7f0c0175
-
- return v0
-
- .line 3282
- :sswitch_3b5
- const-string v2, "layout/activity_dojo_camera_0"
-
- invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v2
-
- if-eqz v2, :cond_e05
-
- .line 3283
- const v0, 0x7f0c0034
-
- return v0
-
- .line 3978
- :sswitch_3c1
- const-string v2, "layout-sw600dp-land/fragment_tab_story_feed_0"
-
- invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v2
-
- if-eqz v2, :cond_e05
-
- .line 3979
- return v9
-
- .line 4044
- :sswitch_3ca
- const-string v2, "layout/dialog_disconnect_student_0"
-
- invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v2
-
- if-eqz v2, :cond_e05
-
- .line 4045
- const v0, 0x7f0c00ac
-
- return v0
-
- .line 3912
- :sswitch_3d6
- const-string v2, "layout-sw600dp/student_login_list_item_0"
-
- invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v2
-
- if-eqz v2, :cond_e05
-
- .line 3913
- return v8
-
- .line 2970
- :sswitch_3df
- const-string v2, "layout/fragment_student_capture_student_list_item_0"
-
- invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v2
-
- if-eqz v2, :cond_e05
-
- .line 2971
- const v0, 0x7f0c0148
-
- return v0
-
- .line 3036
- :sswitch_3eb
- const-string v2, "layout/fragment_school_detail_teacher_item_0"
-
- invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v2
-
- if-eqz v2, :cond_e05
-
- .line 3037
- const v0, 0x7f0c0128
-
- return v0
-
- .line 3468
- :sswitch_3f7
- const-string v2, "layout/fragment_student_capture_story_feed_item_content_0"
-
- invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v2
-
- if-eqz v2, :cond_e05
-
- .line 3469
- const v0, 0x7f0c0145
-
- return v0
-
- .line 3876
- :sswitch_403
- const-string v2, "layout/dialog_add_note_0"
-
- invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v2
-
- if-eqz v2, :cond_e05
-
- .line 3877
- const v0, 0x7f0c00a3
-
- return v0
-
- .line 3372
- :sswitch_40f
- const-string v2, "layout/item_image_resource_0"
-
- invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v2
-
- if-eqz v2, :cond_e05
-
- .line 3373
- const v0, 0x7f0c0195
-
- return v0
-
- .line 4230
- :sswitch_41b
- const-string v2, "layout/fragment_add_edit_student_0"
-
- invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v2
-
- if-eqz v2, :cond_e05
-
- .line 4231
- const v0, 0x7f0c00d3
-
- return v0
-
- .line 3060
- :sswitch_427
- const-string v2, "layout/fragment_student_report_add_note_item_0"
-
- invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v2
-
- if-eqz v2, :cond_e05
-
- .line 3061
- const v0, 0x7f0c0153
-
- return v0
-
- .line 2682
- :sswitch_433
- const-string v2, "layout/fragment_combined_fullscreen_photo_preview_0"
-
- invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v2
-
- if-eqz v2, :cond_e05
-
- .line 2683
- const v0, 0x7f0c00ed
-
- return v0
-
- .line 3108
- :sswitch_43f
- const-string v2, "layout/fragment_class_wall_compose_0"
-
- invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v2
-
- if-eqz v2, :cond_e05
-
- .line 3109
- const v0, 0x7f0c00e5
-
- return v0
-
- .line 3966
- :sswitch_44b
- const-string v2, "layout/dialog_class_code_student_blocker_0"
-
- invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v2
-
- if-eqz v2, :cond_e05
-
- .line 3967
- const v0, 0x7f0c00a9
-
- return v0
-
- .line 2868
- :sswitch_457
- const-string v2, "layout/activity_connection_requests_0"
-
- invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v2
-
- if-eqz v2, :cond_e05
-
- .line 2869
- const v0, 0x7f0c002c
-
- return v0
-
- .line 2988
- :sswitch_463
- const-string v2, "layout/activity_connection_reqeusts_item_0"
-
- invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v2
-
- if-eqz v2, :cond_e05
-
- .line 2989
- const v0, 0x7f0c002b
-
- return v0
-
- .line 2796
- :sswitch_46f
- const-string v2, "layout/fragment_school_directory_item_welcome_0"
-
- invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v2
-
- if-eqz v2, :cond_e05
-
- .line 2797
- const v0, 0x7f0c0131
-
- return v0
-
- .line 3726
- :sswitch_47b
- const-string v2, "layout/fragment_story_share_to_class_header_item_0"
-
- invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v2
-
- if-eqz v2, :cond_e05
-
- .line 3727
- const v0, 0x7f0c013b
-
- return v0
-
- .line 3888
- :sswitch_487
- const-string v2, "layout/fragment_tab_class_wall_item_parent_empty_checklist_0"
-
- invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v2
-
- if-eqz v2, :cond_e05
-
- .line 3889
- const v0, 0x7f0c0166
-
- return v0
-
- .line 4254
- :sswitch_493
- const-string v2, "layout/fragment_school_directory_item_teacher_0"
-
- invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v2
-
- if-eqz v2, :cond_e05
-
- .line 4255
- const v0, 0x7f0c012e
-
- return v0
-
- .line 2772
- :sswitch_49f
- const-string v2, "layout/fragment_parent_teacher_search_0"
-
- invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v2
-
- if-eqz v2, :cond_e05
-
- .line 2773
- const v0, 0x7f0c011c
-
- return v0
-
- .line 3450
- :sswitch_4ab
- const-string v2, "layout/item_parent_list_new_message_invite_0"
-
- invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v2
-
- if-eqz v2, :cond_e05
-
- .line 3451
- const v0, 0x7f0c019f
-
- return v0
-
- .line 3426
- :sswitch_4b7
- const-string v2, "layout/activity_teacher_behavior_controller_0"
-
- invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v2
-
- if-eqz v2, :cond_e05
-
- .line 3427
- const v0, 0x7f0c006a
-
- return v0
-
- .line 3090
- :sswitch_4c3
- const-string v2, "layout/dialog_base_layout_0"
-
- invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v2
-
- if-eqz v2, :cond_e05
-
- .line 3091
- const v0, 0x7f0c00a7
-
- return v0
-
- .line 3276
- :sswitch_4cf
- const-string v2, "layout/activity_onboarding_teacher_sign_up_flow_0"
-
- invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v2
-
- if-eqz v2, :cond_e05
-
- .line 3277
- const v0, 0x7f0c0042
-
- return v0
-
- .line 2712
- :sswitch_4db
- const-string v2, "layout/dialog_student_capture_student_list_item_0"
-
- invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v2
-
- if-eqz v2, :cond_e05
-
- .line 2713
- const v0, 0x7f0c00ba
-
- return v0
-
- .line 2700
- :sswitch_4e7
- const-string v2, "layout/fragment_classroom_0"
-
- invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v2
-
- if-eqz v2, :cond_e05
-
- .line 2701
- const v0, 0x7f0c00e7
-
- return v0
-
- .line 3096
- :sswitch_4f3
- const-string v2, "layout/fragment_school_detail_0"
-
- invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v2
-
- if-eqz v2, :cond_e05
-
- .line 3097
- const v0, 0x7f0c0125
-
- return v0
-
- .line 3066
- :sswitch_4ff
- const-string v2, "layout/layout_create_account_splash_page_0"
-
- invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v2
-
- if-eqz v2, :cond_e05
-
- .line 3067
- const v0, 0x7f0c01a7
-
- return v0
-
- .line 3588
- :sswitch_50b
- const-string v2, "layout/story_post_created_0"
-
- invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v2
-
- if-eqz v2, :cond_e05
-
- .line 3589
- const v0, 0x7f0c01f6
-
- return v0
-
- .line 2736
- :sswitch_517
- const-string v2, "layout-sw600dp/fragment_student_capture_preview_0"
-
- invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v2
-
- if-eqz v2, :cond_e05
-
- .line 2737
- return v12
-
- .line 3864
- :sswitch_520
- const-string v2, "layout/item_class_code_header_0"
-
- invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v2
-
- if-eqz v2, :cond_e05
-
- .line 3865
- const v0, 0x7f0c018f
-
- return v0
-
- .line 2706
- :sswitch_52c
- const-string v2, "layout/fragment_add_school_student_0"
-
- invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v2
-
- if-eqz v2, :cond_e05
-
- .line 2707
- const v0, 0x7f0c00d4
-
- return v0
-
- .line 3162
- :sswitch_538
- const-string v2, "layout/activity_student_settings_0"
-
- invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v2
-
- if-eqz v2, :cond_e05
-
- .line 3163
- const v0, 0x7f0c0068
-
- return v0
-
- .line 3930
- :sswitch_544
- const-string v2, "layout/item_add_student_0"
-
- invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v2
-
- if-eqz v2, :cond_e05
-
- .line 3931
- const v0, 0x7f0c018c
-
- return v0
-
- .line 3504
- :sswitch_550
- const-string v2, "layout/activity_debug_urls_0"
-
- invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v2
-
- if-eqz v2, :cond_e05
-
- .line 3505
- const v0, 0x7f0c0033
-
- return v0
-
- .line 3456
- :sswitch_55c
- const-string v2, "layout/layout_student_connections_initial_0"
-
- invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v2
-
- if-eqz v2, :cond_e05
-
- .line 3457
- const v0, 0x7f0c01b0
-
- return v0
-
- .line 3744
- :sswitch_568
- const-string v2, "layout/fragment_combined_camera_preview_0"
-
- invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v2
-
- if-eqz v2, :cond_e05
-
- .line 3745
- const v0, 0x7f0c00eb
-
- return v0
-
- .line 3252
- :sswitch_574
- const-string v2, "layout/fragment_combined_drawing_0"
-
- invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v2
-
- if-eqz v2, :cond_e05
-
- .line 3253
- const v0, 0x7f0c00ec
-
- return v0
-
- .line 3000
- :sswitch_580
- const-string v2, "layout/fragment_teacher_connection_0"
-
- invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v2
-
- if-eqz v2, :cond_e05
-
- .line 3001
- const v0, 0x7f0c017f
-
- return v0
-
- .line 2760
- :sswitch_58c
- const-string v2, "layout/fragment_school_search_0"
-
- invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v2
-
- if-eqz v2, :cond_e05
-
- .line 2761
- const v0, 0x7f0c0133
-
- return v0
-
- .line 4380
- :sswitch_598
- const-string v2, "layout/activity_email_verified_0"
-
- invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v2
-
- if-eqz v2, :cond_e05
-
- .line 4381
- const v0, 0x7f0c0037
-
- return v0
-
- .line 4248
- :sswitch_5a4
- const-string v2, "layout/dialog_teacher_invitation_0"
-
- invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v2
-
- if-eqz v2, :cond_e05
-
- .line 4249
- const v0, 0x7f0c00bd
-
- return v0
-
- .line 4440
- :sswitch_5b0
- const-string v2, "layout/view_drawer_item_0"
-
- invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v2
-
- if-eqz v2, :cond_e05
-
- .line 4441
- return v7
-
- .line 3084
- :sswitch_5b9
- const-string v2, "layout/dialog_password_changed_0"
-
- invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v2
-
- if-eqz v2, :cond_e05
-
- .line 3085
- const v0, 0x7f0c00b4
-
- return v0
-
- .line 3636
- :sswitch_5c5
- const-string v2, "layout/activity_student_capture_home_0"
-
- invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v2
-
- if-eqz v2, :cond_e05
-
- .line 3637
- return v10
-
- .line 4188
- :sswitch_5ce
- const-string v2, "layout/fragment_invite_item_header_0"
-
- invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v2
-
- if-eqz v2, :cond_e05
-
- .line 4189
- const v0, 0x7f0c0101
-
- return v0
-
- .line 4422
- :sswitch_5da
- const-string v2, "layout/fragment_parent_setup_student_account_ack_0"
-
- invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v2
-
- if-eqz v2, :cond_e05
-
- .line 4423
- const v0, 0x7f0c0119
-
- return v0
-
- .line 3972
- :sswitch_5e6
- const-string v2, "layout/fragment_teacher_story_feed_approval_0"
-
- invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v2
-
- if-eqz v2, :cond_e05
-
- .line 3973
- const v0, 0x7f0c0183
-
- return v0
-
- .line 3786
- :sswitch_5f2
- const-string v2, "layout/fragment_class_list_item_school_0"
-
- invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v2
-
- if-eqz v2, :cond_e05
-
- .line 3787
- const v0, 0x7f0c00e3
-
- return v0
-
- .line 3570
- :sswitch_5fe
- const-string v2, "layout/dialog_teacher_new_class_success_0"
-
- invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v2
-
- if-eqz v2, :cond_e05
-
- .line 3571
- const v0, 0x7f0c00be
-
- return v0
-
- .line 3546
- :sswitch_60a
- const-string v2, "layout/activity_share_media_content_0"
-
- invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v2
-
- if-eqz v2, :cond_e05
-
- .line 3547
- const v0, 0x7f0c005b
-
- return v0
-
- .line 4314
- :sswitch_616
- const-string v2, "layout/fragment_tab_notification_pending_posts_item_0"
-
- invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v2
-
- if-eqz v2, :cond_e05
-
- .line 4315
- const v0, 0x7f0c0178
-
- return v0
-
- .line 3210
- :sswitch_622
- const-string v2, "layout-sw600dp-land/activity_teacher_home_0"
-
- invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v2
-
- if-eqz v2, :cond_e05
-
- .line 3211
- return v6
-
- .line 4110
- :sswitch_62b
- const-string v2, "layout/fragment_onboarding_sign_up_title_0"
-
- invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v2
-
- if-eqz v2, :cond_e05
-
- .line 4111
- const v0, 0x7f0c010d
-
- return v0
-
- .line 3204
- :sswitch_637
- const-string v2, "layout/fragment_tab_class_wall_item_invite_card_0"
-
- invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v2
-
- if-eqz v2, :cond_e05
-
- .line 3205
- const v0, 0x7f0c0164
-
- return v0
-
- .line 2838
- :sswitch_643
- const-string v2, "layout/fragment_student_report_charts_item_0"
-
- invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v2
-
- if-eqz v2, :cond_e05
-
- .line 2839
- const v0, 0x7f0c0154
-
- return v0
-
- .line 4080
- :sswitch_64f
- const-string v2, "layout-sw600dp/fragment_student_login_list_0"
-
- invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v2
-
- if-eqz v2, :cond_e05
-
- .line 4081
- return v5
-
- .line 4224
- :sswitch_658
- const-string v2, "layout/toolbar_text_post_layout_0"
-
- invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v2
-
- if-eqz v2, :cond_e05
-
- .line 4225
- const v0, 0x7f0c020c
-
- return v0
-
- .line 3186
- :sswitch_664
- const-string v2, "layout/activity_teacher_home_drawer_header_light_0"
-
- invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v2
-
- if-eqz v2, :cond_e05
-
- .line 3187
- const v0, 0x7f0c006d
-
- return v0
-
- .line 3156
- :sswitch_670
- const-string v2, "layout/fragment_combined_camera_controls_0"
-
- invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v2
-
- if-eqz v2, :cond_e05
-
- .line 3157
- const v0, 0x7f0c00ea
-
- return v0
-
- .line 2928
- :sswitch_67c
- const-string v2, "layout/binding_variable_placeholder_0"
-
- invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v2
-
- if-eqz v2, :cond_e05
-
- .line 2929
- const v0, 0x7f0c0077
-
- return v0
-
- .line 3078
- :sswitch_688
- const-string v2, "layout/add_note_undo_popup_0"
-
- invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v2
-
- if-eqz v2, :cond_e05
-
- .line 3079
- const v0, 0x7f0c0076
-
- return v0
-
- .line 3804
- :sswitch_694
- const-string v2, "layout/item_student_drawing_tool_sticker_0"
-
- invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v2
-
- if-eqz v2, :cond_e05
-
- .line 3805
- const v0, 0x7f0c01a2
-
- return v0
-
- .line 4344
- :sswitch_6a0
- const-string v2, "layout/activity_onboarding_parent_sign_up_flow_0"
-
- invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v2
-
- if-eqz v2, :cond_e05
-
- .line 4345
- const v0, 0x7f0c0041
-
- return v0
-
- .line 3228
- :sswitch_6ac
- const-string v2, "layout/fragment_add_coteacher_0"
-
- invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v2
-
- if-eqz v2, :cond_e05
-
- .line 3229
- const v0, 0x7f0c00cf
-
- return v0
-
- .line 3954
- :sswitch_6b8
- const-string v2, "layout/fragment_teacher_search_item_empty_teacher_0"
-
- invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v2
-
- if-eqz v2, :cond_e05
-
- .line 3955
- const v0, 0x7f0c0180
-
- return v0
-
- .line 4446
- :sswitch_6c4
- const-string v2, "layout-sw600dp-land/view_drawer_item_0"
-
- invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v2
-
- if-eqz v2, :cond_e05
-
- .line 4447
- return v7
-
- .line 3462
- :sswitch_6cd
- const-string v2, "layout-sw600dp/fragment_dojo_camera_controls_270_0"
-
- invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v2
-
- if-eqz v2, :cond_e05
-
- .line 3463
- const v0, 0x7f0c00f3
-
- return v0
-
- .line 3996
- :sswitch_6d9
- const-string v2, "layout-sw600dp/fragment_dojo_camera_controls_180_0"
-
- invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v2
-
- if-eqz v2, :cond_e05
-
- .line 3997
- const v0, 0x7f0c00f2
-
- return v0
-
- .line 3114
- :sswitch_6e5
- const-string v2, "layout/fragment_parent_sign_up_credentials_0"
-
- invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v2
-
- if-eqz v2, :cond_e05
-
- .line 3115
- const v0, 0x7f0c011b
-
- return v0
-
- .line 3924
- :sswitch_6f1
- const-string v2, "layout/fragment_student_avatar_editor_0"
-
- invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v2
-
- if-eqz v2, :cond_e05
-
- .line 3925
- const v0, 0x7f0c013e
-
- return v0
-
- .line 4092
- :sswitch_6fd
- const-string v2, "layout/fragment_teacher_welcome_0"
-
- invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v2
-
- if-eqz v2, :cond_e05
-
- .line 4093
- const v0, 0x7f0c0186
-
- return v0
-
- .line 3408
- :sswitch_709
- const-string v2, "layout/fragment_teacher_student_connection_text_codes_0"
-
- invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v2
-
- if-eqz v2, :cond_e05
-
- .line 3409
- const v0, 0x7f0c0185
-
- return v0
-
- .line 4458
- :sswitch_715
- const-string v2, "layout/fragment_student_capture_story_feed_item_participant_0"
-
- invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v2
-
- if-eqz v2, :cond_e05
-
- .line 4459
- const v0, 0x7f0c0146
-
- return v0
-
- .line 2880
- :sswitch_721
- const-string v2, "layout/fragment_student_relation_item_0"
-
- invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v2
-
- if-eqz v2, :cond_e05
-
- .line 2881
- const v0, 0x7f0c0151
-
- return v0
-
- .line 3270
- :sswitch_72d
- const-string v2, "layout/fragment_hold_tight_item_0"
-
- invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v2
-
- if-eqz v2, :cond_e05
-
- .line 3271
- const v0, 0x7f0c0100
-
- return v0
-
- .line 2976
- :sswitch_739
- const-string v2, "layout/layout_parent_connections_invite_0"
-
- invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v2
-
- if-eqz v2, :cond_e05
-
- .line 2977
- const v0, 0x7f0c01ac
-
- return v0
-
- .line 4152
- :sswitch_745
- const-string v2, "layout/layout_legacy_video_view_0"
-
- invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v2
-
- if-eqz v2, :cond_e05
-
- .line 4153
- const v0, 0x7f0c01a9
-
- return v0
-
- .line 3294
- :sswitch_751
- const-string v2, "layout/fragment_combined_camera_compose_0"
-
- invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v2
-
- if-eqz v2, :cond_e05
-
- .line 3295
- const v0, 0x7f0c00e9
-
- return v0
-
- .line 2874
- :sswitch_75d
- const-string v2, "layout/setup_skills_list_item_0"
-
- invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v2
-
- if-eqz v2, :cond_e05
-
- .line 2875
- const v0, 0x7f0c01f3
-
- return v0
-
- .line 3174
- :sswitch_769
- const-string v2, "layout/fragment_onboarding_sign_up_email_0"
-
- invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v2
-
- if-eqz v2, :cond_e05
-
- .line 3175
- const v0, 0x7f0c010b
-
- return v0
-
- .line 3138
- :sswitch_775
- const-string v2, "layout/combined_compose_audience_student_item_0"
-
- invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v2
-
- if-eqz v2, :cond_e05
-
- .line 3139
- const v0, 0x7f0c0088
-
- return v0
-
- .line 3498
- :sswitch_781
- const-string v2, "layout/dialog_add_student_find_teacher_0"
-
- invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v2
-
- if-eqz v2, :cond_e05
-
- .line 3499
- const v0, 0x7f0c00a4
-
- return v0
-
- .line 3246
- :sswitch_78d
- const-string v2, "layout/fragment_preview_message_0"
-
- invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v2
-
- if-eqz v2, :cond_e05
-
- .line 3247
- const v0, 0x7f0c011e
-
- return v0
-
- .line 3048
- :sswitch_799
- const-string v2, "layout/fragment_single_notification_0"
-
- invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v2
-
- if-eqz v2, :cond_e05
-
- .line 3049
- const v0, 0x7f0c0139
-
- return v0
-
- .line 3414
- :sswitch_7a5
- const-string v2, "layout/fragment_edit_students_item_0"
-
- invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v2
-
- if-eqz v2, :cond_e05
-
- .line 3415
- const v0, 0x7f0c00fa
-
- return v0
-
- .line 3012
- :sswitch_7b1
- const-string v2, "layout/fragment_tab_class_wall_item_compose_large_0"
-
- invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v2
-
- if-eqz v2, :cond_e05
-
- .line 3013
- const v0, 0x7f0c0160
-
- return v0
-
- .line 4218
- :sswitch_7bd
- const-string v2, "layout/fragment_leader_sign_up_role_0"
-
- invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v2
-
- if-eqz v2, :cond_e05
-
- .line 4219
- const v0, 0x7f0c0103
-
- return v0
-
- .line 2820
- :sswitch_7c9
- const-string v2, "layout/fragment_class_code_student_select_0"
-
- invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v2
-
- if-eqz v2, :cond_e05
-
- .line 2821
- const v0, 0x7f0c00e0
-
- return v0
-
- .line 4164
- :sswitch_7d5
- const-string v2, "layout/fragment_school_search_item_0"
-
- invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v2
-
- if-eqz v2, :cond_e05
-
- .line 4165
- const v0, 0x7f0c0135
-
- return v0
-
- .line 3900
- :sswitch_7e1
- const-string v2, "layout/toolbar_teacher_onboarding_0"
-
- invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v2
-
- if-eqz v2, :cond_e05
-
- .line 3901
- const v0, 0x7f0c020a
-
- return v0
-
- .line 3828
- :sswitch_7ed
- const-string v2, "layout/fragment_school_directory_item_header_0"
-
- invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v2
-
- if-eqz v2, :cond_e05
-
- .line 3829
- const v0, 0x7f0c012a
-
- return v0
-
- .line 2748
- :sswitch_7f9
- const-string v2, "layout-sw600dp-land/fragment_student_capture_preview_0"
-
- invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v2
-
- if-eqz v2, :cond_e05
-
- .line 2749
- return v12
-
- .line 4068
- :sswitch_802
- const-string v2, "layout/fragment_parent_setup_student_account_qr_0"
-
- invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v2
-
- if-eqz v2, :cond_e05
-
- .line 4069
- const v0, 0x7f0c011a
-
- return v0
-
- .line 3960
- :sswitch_80e
- const-string v2, "layout/fragment_student_registration_form_0"
-
- invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v2
-
- if-eqz v2, :cond_e05
-
- .line 3961
- const v0, 0x7f0c0150
-
- return v0
-
- .line 2688
- :sswitch_81a
- const-string v2, "layout/activity_setup_skills_0"
-
- invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v2
-
- if-eqz v2, :cond_e05
-
- .line 2689
- const v0, 0x7f0c0057
-
- return v0
-
- .line 4236
- :sswitch_826
- const-string v2, "layout/dialog_exit_student_mode_password_0"
-
- invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v2
-
- if-eqz v2, :cond_e05
-
- .line 4237
- const v0, 0x7f0c00ae
-
- return v0
-
- .line 3678
- :sswitch_832
- const-string v2, "layout/fragment_story_share_to_0"
-
- invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v2
-
- if-eqz v2, :cond_e05
-
- .line 3679
- const v0, 0x7f0c013a
-
- return v0
-
- .line 3348
- :sswitch_83e
- const-string v2, "layout/fragment_seen_by_0"
-
- invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v2
-
- if-eqz v2, :cond_e05
-
- .line 3349
- const v0, 0x7f0c0136
-
- return v0
-
- .line 2826
- :sswitch_84a
- const-string v2, "layout/fragment_add_edit_behaviours_0"
-
- invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v2
-
- if-eqz v2, :cond_e05
-
- .line 2827
- const v0, 0x7f0c00d0
-
- return v0
-
- .line 3558
- :sswitch_856
- const-string v2, "layout/fragment_story_share_to_student_header_item_0"
-
- invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v2
-
- if-eqz v2, :cond_e05
-
- .line 3559
- const v0, 0x7f0c013d
-
- return v0
-
- .line 3366
- :sswitch_862
- const-string v2, "layout/fragment_setup_skills_0"
-
- invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v2
-
- if-eqz v2, :cond_e05
-
- .line 3367
- const v0, 0x7f0c0138
-
- return v0
-
- .line 2778
- :sswitch_86e
- const-string v2, "layout/fragment_dojo_camera_tooltip_0"
-
- invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v2
-
- if-eqz v2, :cond_e05
-
- .line 2779
- const v0, 0x7f0c00f5
-
- return v0
-
- .line 4284
- :sswitch_87a
- const-string v2, "layout/fragment_school_search_adapter_footer_0"
-
- invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v2
-
- if-eqz v2, :cond_e05
-
- .line 4285
- const v0, 0x7f0c0134
-
- return v0
-
- .line 3042
- :sswitch_886
- const-string v2, "layout/fragment_account_switcher_0"
-
- invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v2
-
- if-eqz v2, :cond_e05
-
- .line 3043
- const v0, 0x7f0c00c9
-
- return v0
-
- .line 2850
- :sswitch_892
- const-string v2, "layout/activity_share_media_0"
-
- invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v2
-
- if-eqz v2, :cond_e05
-
- .line 2851
- const v0, 0x7f0c0059
-
- return v0
-
- .line 4434
- :sswitch_89e
- const-string v2, "layout/fragment_student_capture_home_story_feed_0"
-
- invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v2
-
- if-eqz v2, :cond_e05
-
- .line 4435
- const v0, 0x7f0c013f
-
- return v0
-
- .line 4308
- :sswitch_8aa
- const-string v2, "layout/connection_type_header_item_0"
-
- invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v2
-
- if-eqz v2, :cond_e05
-
- .line 4309
- const v0, 0x7f0c0089
-
- return v0
-
- .line 2904
- :sswitch_8b6
- const-string v2, "layout-sw600dp/fragment_dojo_camera_controls_90_0"
-
- invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v2
-
- if-eqz v2, :cond_e05
-
- .line 2905
- const v0, 0x7f0c00f4
-
- return v0
-
- .line 3030
- :sswitch_8c2
- const-string v2, "layout/dialog_enter_student_mode_0"
-
- invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v2
-
- if-eqz v2, :cond_e05
-
- .line 3031
- const v0, 0x7f0c00ad
-
- return v0
-
- .line 3324
- :sswitch_8ce
- const-string v2, "layout/debug_feature_list_item_0"
-
- invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v2
-
- if-eqz v2, :cond_e05
-
- .line 3325
- const v0, 0x7f0c0090
-
- return v0
-
- .line 3342
- :sswitch_8da
- const-string v2, "layout/fragment_add_edit_class_0"
-
- invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v2
-
- if-eqz v2, :cond_e05
-
- .line 3343
- const v0, 0x7f0c00d1
-
- return v0
-
- .line 4212
- :sswitch_8e6
- const-string v2, "layout/fragment_push_notifications_settings_0"
-
- invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v2
-
- if-eqz v2, :cond_e05
-
- .line 4213
- const v0, 0x7f0c0121
-
- return v0
-
- .line 4278
- :sswitch_8f2
- const-string v2, "layout/fragment_scheduled_message_item_0"
-
- invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v2
-
- if-eqz v2, :cond_e05
-
- .line 4279
- const v0, 0x7f0c0122
-
- return v0
-
- .line 3618
- :sswitch_8fe
- const-string v2, "layout-land/fragment_add_class_poster_0"
-
- invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v2
-
- if-eqz v2, :cond_e05
-
- .line 3619
- return v4
-
- .line 3354
- :sswitch_907
- const-string v2, "layout-sw600dp/fragment_mark_students_0"
-
- invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v2
-
- if-eqz v2, :cond_e05
-
- .line 3355
- return v3
-
- .line 3600
- :sswitch_910
- const-string v2, "layout/fragment_tab_class_wall_item_student_report_0"
-
- invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v2
-
- if-eqz v2, :cond_e05
-
- .line 3601
- const v0, 0x7f0c016f
-
- return v0
-
- .line 3510
- :sswitch_91c
- const-string v2, "layout/fragment_tab_class_wall_item_invite_0"
-
- invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v2
-
- if-eqz v2, :cond_e05
-
- .line 3511
- const v0, 0x7f0c0163
-
- return v0
-
- .line 2862
- :sswitch_928
- const-string v2, "layout/fragment_student_capture_mark_students_item_0"
-
- invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v2
-
- if-eqz v2, :cond_e05
-
- .line 2863
- const v0, 0x7f0c0141
-
- return v0
-
- .line 2952
- :sswitch_934
- const-string v2, "layout/fragment_seen_by_item_0"
-
- invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v2
-
- if-eqz v2, :cond_e05
-
- .line 2953
- const v0, 0x7f0c0137
-
- return v0
-
- .line 3882
- :sswitch_940
- const-string v2, "layout/activity_class_link_0"
-
- invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v2
-
- if-eqz v2, :cond_e05
-
- .line 3883
- const v0, 0x7f0c0026
-
- return v0
-
- .line 2742
- :sswitch_94c
- const-string v2, "layout/fragment_student_capture_preview_0"
-
- invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v2
-
- if-eqz v2, :cond_e05
-
- .line 2743
- return v12
-
- .line 3132
- :sswitch_955
- const-string v3, "layout/fragment_student_capture_story_feed_item_0"
-
- invoke-virtual {p1, v3}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v3
-
- if-eqz v3, :cond_e05
-
- .line 3133
- return v2
-
- .line 2916
- :sswitch_95e
- const-string v2, "layout/fragment_school_directory_item_teacher_pending_0"
-
- invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v2
-
- if-eqz v2, :cond_e05
-
- .line 2917
- const v0, 0x7f0c012f
-
- return v0
-
- .line 3192
- :sswitch_96a
- const-string v2, "layout/fragment_student_connections_0"
-
- invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v2
-
- if-eqz v2, :cond_e05
-
- .line 3193
- const v0, 0x7f0c014c
-
- return v0
-
- .line 2784
- :sswitch_976
- const-string v2, "layout/activity_add_edit_class_0"
-
- invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v2
-
- if-eqz v2, :cond_e05
-
- .line 2785
- const v0, 0x7f0c001d
-
- return v0
-
- .line 3624
- :sswitch_982
- const-string v2, "layout/fragment_add_class_poster_0"
-
- invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v2
-
- if-eqz v2, :cond_e05
-
- .line 3625
- return v4
-
- .line 4242
- :sswitch_98b
- const-string v2, "layout/fragment_school_directory_item_student_0"
-
- invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v2
-
- if-eqz v2, :cond_e05
-
- .line 4243
- const v0, 0x7f0c012b
-
- return v0
-
- .line 4368
- :sswitch_997
- const-string v2, "layout/item_class_code_student_select_0"
-
- invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v2
-
- if-eqz v2, :cond_e05
-
- .line 4369
- const v0, 0x7f0c0190
-
- return v0
-
- .line 2814
- :sswitch_9a3
- const-string v2, "layout/dialog_student_age_0"
-
- invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v2
-
- if-eqz v2, :cond_e05
-
- .line 2815
- const v0, 0x7f0c00b9
-
- return v0
-
- .line 3150
- :sswitch_9af
- const-string v2, "layout/layout_dojo_video_view_0"
-
- invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v2
-
- if-eqz v2, :cond_e05
-
- .line 3151
- const v0, 0x7f0c01a8
-
- return v0
-
- .line 3948
- :sswitch_9bb
- const-string v2, "layout/layout_student_list_empty_0"
-
- invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v2
-
- if-eqz v2, :cond_e05
-
- .line 3949
- const v0, 0x7f0c01b3
-
- return v0
-
- .line 3810
- :sswitch_9c7
- const-string v2, "layout/fragment_student_report_selector_item_0"
-
- invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v2
-
- if-eqz v2, :cond_e05
-
- .line 3811
- const v0, 0x7f0c0158
-
- return v0
-
- .line 4158
- :sswitch_9d3
- const-string v2, "layout/dialog_parent_invitation_0"
-
- invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v2
-
- if-eqz v2, :cond_e05
-
- .line 4159
- const v0, 0x7f0c00b2
-
- return v0
-
- .line 4452
- :sswitch_9df
- const-string v2, "layout/fragment_school_directory_0"
-
- invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v2
-
- if-eqz v2, :cond_e05
-
- .line 4453
- const v0, 0x7f0c0129
-
- return v0
-
- .line 2790
- :sswitch_9eb
- const-string v2, "layout/fragment_login_0"
-
- invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v2
-
- if-eqz v2, :cond_e05
-
- .line 2791
- const v0, 0x7f0c0104
-
- return v0
-
- .line 3984
- :sswitch_9f7
- const-string v2, "layout/fragment_tab_story_feed_0"
-
- invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v2
-
- if-eqz v2, :cond_e05
-
- .line 3985
- return v9
-
- .line 4014
- :sswitch_a00
- const-string v2, "layout/fragment_add_class_invite_0"
-
- invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v2
-
- if-eqz v2, :cond_e05
-
- .line 4015
- const v0, 0x7f0c00cc
-
- return v0
-
- .line 4350
- :sswitch_a0c
- const-string v2, "layout/item_parent_checklist_complete_0"
-
- invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v2
-
- if-eqz v2, :cond_e05
-
- .line 4351
- const v0, 0x7f0c019d
-
- return v0
-
- .line 2808
- :sswitch_a18
- const-string v2, "layout/parent_checklist_success_overlay_0"
-
- invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v2
-
- if-eqz v2, :cond_e05
-
- .line 2809
- const v0, 0x7f0c01de
-
- return v0
-
- .line 3690
- :sswitch_a24
- const-string v2, "layout/invite_parent_list_item_0"
-
- invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v2
-
- if-eqz v2, :cond_e05
-
- .line 3691
- const v0, 0x7f0c018a
-
- return v0
-
- .line 3318
- :sswitch_a30
- const-string v2, "layout/fragment_award_grid_item_0"
-
- invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v2
-
- if-eqz v2, :cond_e05
-
- .line 3319
- const v0, 0x7f0c00da
-
- return v0
-
- .line 2766
- :sswitch_a3c
- const-string v2, "layout/fragment_tab_class_wall_item_webview_0"
-
- invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v2
-
- if-eqz v2, :cond_e05
-
- .line 2767
- const v0, 0x7f0c0170
-
- return v0
-
- .line 3198
- :sswitch_a48
- const-string v2, "layout/placeholder_empty_with_refresh_0"
-
- invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v2
-
- if-eqz v2, :cond_e05
-
- .line 3199
- const v0, 0x7f0c01e5
-
- return v0
-
- .line 4428
- :sswitch_a54
- const-string v2, "layout/fragment_account_switcher_item_0"
-
- invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v2
-
- if-eqz v2, :cond_e05
-
- .line 4429
- const v0, 0x7f0c00cb
-
- return v0
-
- .line 2664
- :sswitch_a60
- const-string v2, "layout/dialog_avatar_grid_0"
-
- invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v2
-
- if-eqz v2, :cond_e05
-
- .line 2665
- const v0, 0x7f0c00a6
-
- return v0
-
- .line 2958
- :sswitch_a6c
- const-string v2, "layout/toolbar_text_layout_0"
-
- invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v2
-
- if-eqz v2, :cond_e05
-
- .line 2959
- const v0, 0x7f0c020b
-
- return v0
-
- .line 4404
- :sswitch_a78
- const-string v2, "layout/fragment_add_edit_group_0"
-
- invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v2
-
- if-eqz v2, :cond_e05
-
- .line 4405
- const v0, 0x7f0c00d2
-
- return v0
-
- .line 2940
- :sswitch_a84
- const-string v2, "layout/fragment_school_null_state_0"
-
- invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v2
-
- if-eqz v2, :cond_e05
-
- .line 2941
- const v0, 0x7f0c0132
-
- return v0
-
- .line 4020
- :sswitch_a90
- const-string v2, "layout/fragment_create_account_splash_0"
-
- invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v2
-
- if-eqz v2, :cond_e05
-
- .line 4021
- const v0, 0x7f0c00ee
-
- return v0
-
- .line 3756
- :sswitch_a9c
- const-string v2, "layout/fragment_onboarding_enable_camera_primer_0"
-
- invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v2
-
- if-eqz v2, :cond_e05
-
- .line 3757
- const v0, 0x7f0c0108
-
- return v0
-
- .line 3528
- :sswitch_aa8
- const-string v2, "layout/fragment_change_password_0"
-
- invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v2
-
- if-eqz v2, :cond_e05
-
- .line 3529
- const v0, 0x7f0c00dc
-
- return v0
-
- .line 3660
- :sswitch_ab4
- const-string v2, "layout/fragment_onboarding_sign_up_parent_anti_abuse_0"
-
- invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v2
-
- if-eqz v2, :cond_e05
-
- .line 3661
- const v0, 0x7f0c010c
-
- return v0
-
- .line 3486
- :sswitch_ac0
- const-string v2, "layout/layout_parent_connections_list_0"
-
- invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v2
-
- if-eqz v2, :cond_e05
-
- .line 3487
- const v0, 0x7f0c01ad
-
- return v0
-
- .line 4362
- :sswitch_acc
- const-string v2, "layout/fragment_tab_student_list_0"
-
- invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v2
-
- if-eqz v2, :cond_e05
-
- .line 4363
- const v0, 0x7f0c017b
-
- return v0
-
- .line 4170
- :sswitch_ad8
- const-string v2, "layout/fragment_meet_teacher_item_0"
-
- invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v2
-
- if-eqz v2, :cond_e05
-
- .line 4171
- const v0, 0x7f0c0106
-
- return v0
-
- .line 2898
- :sswitch_ae4
- const-string v2, "layout/fragment_tab_class_wall_generic_button_icon_text_item_0"
-
- invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v2
-
- if-eqz v2, :cond_e05
-
- .line 2899
- const v0, 0x7f0c015a
-
- return v0
-
- .line 3714
- :sswitch_af0
- const-string v2, "layout/item_parent_checklist_0"
-
- invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v2
-
- if-eqz v2, :cond_e05
-
- .line 3715
- const v0, 0x7f0c019c
-
- return v0
-
- .line 3594
- :sswitch_afc
- const-string v2, "layout/toolbar_teacher_approval_0"
-
- invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v2
-
- if-eqz v2, :cond_e05
-
- .line 3595
- const v0, 0x7f0c0208
-
- return v0
-
- .line 3840
- :sswitch_b08
- const-string v2, "layout/fragment_school_directory_item_teacher_request_0"
-
- invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v2
-
- if-eqz v2, :cond_e05
-
- .line 3841
- const v0, 0x7f0c0130
-
- return v0
-
- .line 3708
- :sswitch_b14
- const-string v2, "layout/fragment_chat_0"
-
- invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v2
-
- if-eqz v2, :cond_e05
-
- .line 3709
- const v0, 0x7f0c00dd
-
- return v0
-
- .line 3438
- :sswitch_b20
- const-string v2, "layout/fragment_tab_notification_list_pending_requests_item_0"
-
- invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v2
-
- if-eqz v2, :cond_e05
-
- .line 3439
- const v0, 0x7f0c0177
-
- return v0
-
- .line 3552
- :sswitch_b2c
- const-string v2, "layout/dialog_change_name_0"
-
- invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v2
-
- if-eqz v2, :cond_e05
-
- .line 3553
- const v0, 0x7f0c00a8
-
- return v0
-
- .line 2844
- :sswitch_b38
- const-string v2, "layout/fragment_student_report_item_0"
-
- invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v2
-
- if-eqz v2, :cond_e05
-
- .line 2845
- const v0, 0x7f0c0155
-
- return v0
-
- .line 4296
- :sswitch_b44
- const-string v2, "layout/fragment_award_pager_dialog_0"
-
- invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v2
-
- if-eqz v2, :cond_e05
-
- .line 4297
- const v0, 0x7f0c00db
-
- return v0
-
- .line 3216
- :sswitch_b50
- const-string v2, "layout/activity_teacher_home_0"
-
- invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v2
-
- if-eqz v2, :cond_e05
-
- .line 3217
- return v6
-
- .line 3780
- :sswitch_b59
- const-string v2, "layout/chat_empty_broadcasts_view_0"
-
- invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v2
-
- if-eqz v2, :cond_e05
-
- .line 3781
- const v0, 0x7f0c007f
-
- return v0
-
- .line 2910
- :sswitch_b65
- const-string v2, "layout/activity_teacher_home_drawer_header_dark_0"
-
- invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v2
-
- if-eqz v2, :cond_e05
-
- .line 2911
- const v0, 0x7f0c006c
-
- return v0
-
- .line 3738
- :sswitch_b71
- const-string v2, "layout/fragment_student_profile_date_0"
-
- invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v2
-
- if-eqz v2, :cond_e05
-
- .line 3739
- const v0, 0x7f0c014f
-
- return v0
-
- .line 3822
- :sswitch_b7d
- const-string v2, "layout/fragment_student_codes_0"
-
- invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v2
-
- if-eqz v2, :cond_e05
-
- .line 3823
- const v0, 0x7f0c014a
-
- return v0
-
- .line 4146
- :sswitch_b89
- const-string v2, "layout/fragment_parent_channel_list_0"
-
- invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v2
-
- if-eqz v2, :cond_e05
-
- .line 4147
- const v0, 0x7f0c0112
-
- return v0
-
- .line 2892
- :sswitch_b95
- const-string v2, "layout/fragment_onboarding_splash_user_role_0"
-
- invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v2
-
- if-eqz v2, :cond_e05
-
- .line 2893
- const v0, 0x7f0c010e
-
- return v0
-
- .line 4326
- :sswitch_ba1
- const-string v2, "layout/fragment_push_notifications_quiet_hours_0"
-
- invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v2
-
- if-eqz v2, :cond_e05
-
- .line 4327
- const v0, 0x7f0c0120
-
- return v0
-
- .line 3612
- :sswitch_bad
- const-string v2, "layout/fragment_class_list_item_teacher_0"
-
- invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v2
-
- if-eqz v2, :cond_e05
-
- .line 3613
- const v0, 0x7f0c00e4
-
- return v0
-
- .line 3168
- :sswitch_bb9
- const-string v2, "layout/fragment_tab_notification_list_item_header_0"
-
- invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v2
-
- if-eqz v2, :cond_e05
-
- .line 3169
- const v0, 0x7f0c0176
-
- return v0
-
- .line 4062
- :sswitch_bc5
- const-string v2, "layout/view_list_header_limit_width_0"
-
- invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v2
-
- if-eqz v2, :cond_e05
-
- .line 4063
- const v0, 0x7f0c0214
-
- return v0
-
- .line 2994
- :sswitch_bd1
- const-string v2, "layout/activity_qrcode_scan_0"
-
- invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v2
-
- if-eqz v2, :cond_e05
-
- .line 2995
- const v0, 0x7f0c0052
-
- return v0
-
- .line 3180
- :sswitch_bdd
- const-string v2, "layout/activity_share_media_audience_selector_0"
-
- invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v2
-
- if-eqz v2, :cond_e05
-
- .line 3181
- const v0, 0x7f0c005a
-
- return v0
-
- .line 3720
- :sswitch_be9
- const-string v2, "layout/fragment_student_report_list_item_0"
-
- invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v2
-
- if-eqz v2, :cond_e05
-
- .line 3721
- const v0, 0x7f0c0157
-
- return v0
-
- .line 3918
- :sswitch_bf5
- const-string v2, "layout/student_login_list_item_0"
-
- invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v2
-
- if-eqz v2, :cond_e05
-
- .line 3919
- return v8
-
- .line 4266
- :sswitch_bfe
- const-string v2, "layout/activity_school_0"
-
- invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v2
-
- if-eqz v2, :cond_e05
-
- .line 4267
- const v0, 0x7f0c0054
-
- return v0
-
- .line 3672
- :sswitch_c0a
- const-string v2, "layout/fragment_parent_school_search_item_0"
-
- invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v2
-
- if-eqz v2, :cond_e05
-
- .line 3673
- const v0, 0x7f0c0118
-
- return v0
-
- .line 4074
- :sswitch_c16
- const-string v2, "layout/fragment_student_login_list_0"
-
- invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v2
-
- if-eqz v2, :cond_e05
-
- .line 4075
- return v5
-
- .line 4260
- :sswitch_c1f
- const-string v2, "layout/fragment_parent_connections_0"
-
- invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v2
-
- if-eqz v2, :cond_e05
-
- .line 4261
- const v0, 0x7f0c0116
-
- return v0
-
- .line 4086
- :sswitch_c2b
- const-string v2, "layout/fragment_parent_account_0"
-
- invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v2
-
- if-eqz v2, :cond_e05
-
- .line 4087
- const v0, 0x7f0c0110
-
- return v0
-
- .line 3234
- :sswitch_c37
- const-string v2, "layout/fragment_teacher_approval_feed_item_text_0"
-
- invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v2
-
- if-eqz v2, :cond_e05
-
- .line 3235
- const v0, 0x7f0c017d
-
- return v0
-
- .line 3126
- :sswitch_c43
- const-string v3, "layout-sw600dp-land/fragment_student_capture_story_feed_item_0"
-
- invoke-virtual {p1, v3}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v3
-
- if-eqz v3, :cond_e05
-
- .line 3127
- return v2
-
- .line 2694
- :sswitch_c4c
- const-string v2, "layout/fragment_student_drawing_tool_0"
-
- invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v2
-
- if-eqz v2, :cond_e05
-
- .line 2695
- const v0, 0x7f0c014d
-
- return v0
-
- .line 3492
- :sswitch_c58
- const-string v2, "layout/parent_connections_single_code_invite_section_0"
-
- invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v2
-
- if-eqz v2, :cond_e05
-
- .line 3493
- const v0, 0x7f0c01e0
-
- return v0
-
- .line 4038
- :sswitch_c64
- const-string v2, "layout/fragment_tab_class_wall_item_demo_empty_0"
-
- invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v2
-
- if-eqz v2, :cond_e05
-
- .line 4039
- const v0, 0x7f0c0162
-
- return v0
-
- .line 3300
- :sswitch_c70
- const-string v2, "layout/toolbar_base_layout_0"
-
- invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v2
-
- if-eqz v2, :cond_e05
-
- .line 3301
- const v0, 0x7f0c0200
-
- return v0
-
- .line 3792
- :sswitch_c7c
- const-string v2, "layout/fragment_award_grid_0"
-
- invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v2
-
- if-eqz v2, :cond_e05
-
- .line 3793
- const v0, 0x7f0c00d9
-
- return v0
-
- .line 4122
- :sswitch_c88
- const-string v2, "layout/dialog_student_list_0"
-
- invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v2
-
- if-eqz v2, :cond_e05
-
- .line 4123
- const v0, 0x7f0c00bc
-
- return v0
-
- .line 4392
- :sswitch_c94
- const-string v2, "layout/view_drawing_tool_discard_0"
-
- invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v2
-
- if-eqz v2, :cond_e05
-
- .line 4393
- const v0, 0x7f0c0211
-
- return v0
-
- .line 3648
- :sswitch_ca0
- const-string v2, "layout/fragment_tab_class_wall_item_student_permission_0"
-
- invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v2
-
- if-eqz v2, :cond_e05
-
- .line 3649
- const v0, 0x7f0c016e
-
- return v0
-
- .line 3642
- :sswitch_cac
- const-string v2, "layout/fragment_parent_add_class_0"
-
- invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v2
-
- if-eqz v2, :cond_e05
-
- .line 3643
- const v0, 0x7f0c0111
-
- return v0
-
- .line 3306
- :sswitch_cb8
- const-string v2, "layout/activity_debug_deeplinks_0"
-
- invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v2
-
- if-eqz v2, :cond_e05
-
- .line 3307
- const v0, 0x7f0c0032
-
- return v0
-
- .line 3378
- :sswitch_cc4
- const-string v2, "layout/fragment_parent_checklist_invite_family_item_0"
-
- invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v2
-
- if-eqz v2, :cond_e05
-
- .line 3379
- const v0, 0x7f0c0114
-
- return v0
-
- .line 3444
- :sswitch_cd0
- const-string v2, "layout/fragment_school_directory_item_student_add_0"
-
- invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v2
-
- if-eqz v2, :cond_e05
-
- .line 3445
- const v0, 0x7f0c012c
-
- return v0
-
- .line 3870
- :sswitch_cdc
- const-string v2, "layout/toolbar_onboarding_progress_layout_0"
-
- invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v2
-
- if-eqz v2, :cond_e05
-
- .line 3871
- const v0, 0x7f0c0205
-
- return v0
-
- .line 3852
- :sswitch_ce8
- const-string v2, "layout/fragment_tab_notification_list_0"
-
- invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v2
-
- if-eqz v2, :cond_e05
-
- .line 3853
- const v0, 0x7f0c0174
-
- return v0
-
- .line 2964
- :sswitch_cf4
- const-string v2, "layout/invite_list_item_0"
-
- invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v2
-
- if-eqz v2, :cond_e05
-
- .line 2965
- const v0, 0x7f0c0189
-
- return v0
-
- .line 3360
- :sswitch_d00
- const-string v2, "layout/fragment_mark_students_0"
-
- invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v2
-
- if-eqz v2, :cond_e05
-
- .line 3361
- return v3
-
- .line 4416
- :sswitch_d09
- const-string v2, "layout/fragment_video_preview_0"
-
- invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v2
-
- if-eqz v2, :cond_e05
-
- .line 4417
- const v0, 0x7f0c0187
-
- return v0
-
- .line 3906
- :sswitch_d15
- const-string v2, "layout/parent_connections_individual_codes_invite_section_0"
-
- invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v2
-
- if-eqz v2, :cond_e05
-
- .line 3907
- const v0, 0x7f0c01df
-
- return v0
-
- .line 2934
- :sswitch_d21
- const-string v2, "layout/fragment_student_report_list_dialog_0"
-
- invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v2
-
- if-eqz v2, :cond_e05
-
- .line 2935
- const v0, 0x7f0c0156
-
- return v0
-
- .line 3942
- :sswitch_d2d
- const-string v2, "layout/dialog_parent_delete_connection_request_0"
-
- invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v2
-
- if-eqz v2, :cond_e05
-
- .line 3943
- const v0, 0x7f0c00b1
-
- return v0
-
- .line 4056
- :sswitch_d39
- const-string v2, "layout/fragment_dojo_camera_0"
-
- invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v2
-
- if-eqz v2, :cond_e05
-
- .line 4057
- const v0, 0x7f0c00f0
-
- return v0
-
- .line 3480
- :sswitch_d45
- const-string v2, "layout/combined_compose_audience_group_item_0"
-
- invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v2
-
- if-eqz v2, :cond_e05
-
- .line 3481
- const v0, 0x7f0c0086
-
- return v0
-
- .line 3474
- :sswitch_d51
- const-string v2, "layout/item_grid_teacher_title_0"
-
- invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v2
-
- if-eqz v2, :cond_e05
-
- .line 3475
- const v0, 0x7f0c0192
-
- return v0
-
- .line 3816
- :sswitch_d5d
- const-string v2, "layout/student_login_list_not_my_class_item_0"
-
- invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v2
-
- if-eqz v2, :cond_e05
-
- .line 3817
- const v0, 0x7f0c01fa
-
- return v0
-
- .line 3702
- :sswitch_d69
- const-string v2, "layout/activity_student_search_0"
-
- invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v2
-
- if-eqz v2, :cond_e05
-
- .line 3703
- const v0, 0x7f0c0067
-
- return v0
-
- .line 4302
- :sswitch_d75
- const-string v2, "layout/fragment_forgot_password_0"
-
- invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v2
-
- if-eqz v2, :cond_e05
-
- .line 4303
- const v0, 0x7f0c00fc
-
- return v0
-
- .line 3846
- :sswitch_d81
- const-string v2, "layout/view_students_moved_tooltip_0"
-
- invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v2
-
- if-eqz v2, :cond_e05
-
- .line 3847
- const v0, 0x7f0c0218
-
- return v0
-
- .line 3120
- :sswitch_d8d
- const-string v2, "layout/fragment_student_code_form_0"
-
- invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v2
-
- if-eqz v2, :cond_e05
-
- .line 3121
- const v0, 0x7f0c0149
-
- return v0
-
- .line 3072
- :sswitch_d99
- const-string v2, "layout/fragment_message_recipients_0"
-
- invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v2
-
- if-eqz v2, :cond_e05
-
- .line 3073
- const v0, 0x7f0c0107
-
- return v0
-
- .line 3336
- :sswitch_da5
- const-string v2, "layout/fragment_attendance_0"
-
- invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v2
-
- if-eqz v2, :cond_e05
-
- .line 3337
- const v0, 0x7f0c00d6
-
- return v0
-
- .line 4194
- :sswitch_db1
- const-string v2, "layout/fragment_web_view_0"
-
- invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v2
-
- if-eqz v2, :cond_e05
-
- .line 4195
- const v0, 0x7f0c0188
-
- return v0
-
- .line 2676
- :sswitch_dbd
- const-string v2, "layout/view_teacher_student_connection_text_codes_instructions_header_0"
-
- invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v2
-
- if-eqz v2, :cond_e05
-
- .line 2677
- const v0, 0x7f0c0219
-
- return v0
-
- .line 2802
- :sswitch_dc9
- const-string v2, "layout/view_list_header_0"
-
- invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v2
-
- if-eqz v2, :cond_e05
-
- .line 2803
- const v0, 0x7f0c0213
-
- return v0
-
- .line 3774
- :sswitch_dd5
- const-string v2, "layout/activity_parent_checklist_0"
-
- invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v2
-
- if-eqz v2, :cond_e05
-
- .line 3775
- const v0, 0x7f0c0046
-
- return v0
-
- .line 4206
- :sswitch_de1
- const-string v2, "layout/thumbnail_item_0"
-
- invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v2
-
- if-eqz v2, :cond_e05
-
- .line 4207
- const v0, 0x7f0c01fe
-
- return v0
-
- .line 3420
- :sswitch_ded
- const-string v2, "layout/fragment_add_class_invite_code_0"
-
- invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v2
-
- if-eqz v2, :cond_e05
-
- .line 3421
- const v0, 0x7f0c00cd
-
- return v0
-
- .line 3144
- :sswitch_df9
- const-string v2, "layout/item_onboarding_class_code_header_0"
-
- invoke-virtual {p1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
-
- move-result v2
-
- if-eqz v2, :cond_e05
-
- .line 3145
- const v0, 0x7f0c019b
-
- return v0
-
- .line 4470
- :cond_e05
- :goto_e05
- return v0
-
- :sswitch_data_e06
- .sparse-switch
- -0x7ff1b754 -> :sswitch_df9
- -0x7f0c897b -> :sswitch_ded
- -0x7d0aa704 -> :sswitch_de1
- -0x7c6be673 -> :sswitch_dd5
- -0x7c3fe396 -> :sswitch_dc9
- -0x7becf608 -> :sswitch_dbd
- -0x7b0a44b5 -> :sswitch_db1
- -0x797d3b3c -> :sswitch_da5
- -0x787ac9b3 -> :sswitch_d99
- -0x770745a7 -> :sswitch_d8d
- -0x7647340a -> :sswitch_d81
- -0x75d10002 -> :sswitch_d75
- -0x753a0a98 -> :sswitch_d69
- -0x74899310 -> :sswitch_d5d
- -0x73a86b46 -> :sswitch_d51
- -0x73629603 -> :sswitch_d45
- -0x70a04545 -> :sswitch_d39
- -0x70067ff0 -> :sswitch_d2d
- -0x6fff2663 -> :sswitch_d21
- -0x6c14d67b -> :sswitch_d15
- -0x6b962df5 -> :sswitch_d09
- -0x6b5b74af -> :sswitch_d00
- -0x6b5a686c -> :sswitch_cf4
- -0x6ae98fb1 -> :sswitch_ce8
- -0x6a5398ee -> :sswitch_cdc
- -0x69baa2cb -> :sswitch_cd0
- -0x68770d73 -> :sswitch_cc4
- -0x67f67859 -> :sswitch_cb8
- -0x67a2ada0 -> :sswitch_cac
- -0x6629c3ca -> :sswitch_ca0
- -0x660dcd62 -> :sswitch_c94
- -0x660a05fb -> :sswitch_c88
- -0x619ba5fd -> :sswitch_c7c
- -0x5fe088e0 -> :sswitch_c70
- -0x5fdd67ac -> :sswitch_c64
- -0x5f10a74b -> :sswitch_c58
- -0x5b084708 -> :sswitch_c4c
- -0x5ad2035f -> :sswitch_c43
- -0x59e896a2 -> :sswitch_c37
- -0x596de34d -> :sswitch_c2b
- -0x59554ca5 -> :sswitch_c1f
- -0x5868dbad -> :sswitch_c16
- -0x581e0245 -> :sswitch_c0a
- -0x57f09e50 -> :sswitch_bfe
- -0x578acaba -> :sswitch_bf5
- -0x57679658 -> :sswitch_be9
- -0x56d6ec3b -> :sswitch_bdd
- -0x547e23ec -> :sswitch_bd1
- -0x53bb8353 -> :sswitch_bc5
- -0x528bcbb7 -> :sswitch_bb9
- -0x524316c9 -> :sswitch_bad
- -0x5207f75d -> :sswitch_ba1
- -0x51b92ac3 -> :sswitch_b95
- -0x513d656a -> :sswitch_b89
- -0x50e9d457 -> :sswitch_b7d
- -0x5077865d -> :sswitch_b71
- -0x501cc71d -> :sswitch_b65
- -0x4fb86b71 -> :sswitch_b59
- -0x4e4358e8 -> :sswitch_b50
- -0x4e1aab7f -> :sswitch_b44
- -0x4ded10bf -> :sswitch_b38
- -0x4ca00607 -> :sswitch_b2c
- -0x4c1d08ea -> :sswitch_b20
- -0x4b74d30d -> :sswitch_b14
- -0x4b6090f6 -> :sswitch_b08
- -0x4b532106 -> :sswitch_afc
- -0x48d78f77 -> :sswitch_af0
- -0x476c2da5 -> :sswitch_ae4
- -0x473cf7b1 -> :sswitch_ad8
- -0x470ff9d9 -> :sswitch_acc
- -0x464a89e2 -> :sswitch_ac0
- -0x4645e18d -> :sswitch_ab4
- -0x44ce1aaf -> :sswitch_aa8
- -0x43e66da4 -> :sswitch_a9c
- -0x4373979d -> :sswitch_a90
- -0x4362a775 -> :sswitch_a84
- -0x4350d07d -> :sswitch_a78
- -0x431e5fbc -> :sswitch_a6c
- -0x4265e5d5 -> :sswitch_a60
- -0x4116179a -> :sswitch_a54
- -0x40f419aa -> :sswitch_a48
- -0x3ec87248 -> :sswitch_a3c
- -0x3ec71fef -> :sswitch_a30
- -0x3d93bcff -> :sswitch_a24
- -0x3c7a38a4 -> :sswitch_a18
- -0x3b64498f -> :sswitch_a0c
- -0x3b4ec057 -> :sswitch_a00
- -0x3afafbd3 -> :sswitch_9f7
- -0x3acbc1d0 -> :sswitch_9eb
- -0x3a661c83 -> :sswitch_9df
- -0x3a3c34f3 -> :sswitch_9d3
- -0x39befe39 -> :sswitch_9c7
- -0x392524cf -> :sswitch_9bb
- -0x3848bc67 -> :sswitch_9af
- -0x35732b06 -> :sswitch_9a3
- -0x348d9d2b -> :sswitch_997
- -0x3406792d -> :sswitch_98b
- -0x33ca7313 -> :sswitch_982
- -0x337c52a3 -> :sswitch_976
- -0x2f89dc68 -> :sswitch_96a
- -0x2f689bee -> :sswitch_95e
- -0x2b6cfc6c -> :sswitch_955
- -0x2aed7d6e -> :sswitch_94c
- -0x297fd423 -> :sswitch_940
- -0x28b29bee -> :sswitch_934
- -0x27f3f1a0 -> :sswitch_928
- -0x266d0594 -> :sswitch_91c
- -0x24f9cea5 -> :sswitch_910
- -0x24dcc0a0 -> :sswitch_907
- -0x2401f98f -> :sswitch_8fe
- -0x22c17f88 -> :sswitch_8f2
- -0x22582ada -> :sswitch_8e6
- -0x21ecf7c4 -> :sswitch_8da
- -0x21b5e195 -> :sswitch_8ce
- -0x218e1b6f -> :sswitch_8c2
- -0x2120b3b5 -> :sswitch_8b6
- -0x20672573 -> :sswitch_8aa
- -0x1f9a342e -> :sswitch_89e
- -0x1f934e76 -> :sswitch_892
- -0x1d954f72 -> :sswitch_886
- -0x1d93b6ae -> :sswitch_87a
- -0x1d7a1981 -> :sswitch_86e
- -0x1bdf8f21 -> :sswitch_862
- -0x1b42ca7e -> :sswitch_856
- -0x1b020fac -> :sswitch_84a
- -0x19e4669e -> :sswitch_83e
- -0x196ed340 -> :sswitch_832
- -0x18f62b4b -> :sswitch_826
- -0x18f615c0 -> :sswitch_81a
- -0x187e6ff3 -> :sswitch_80e
- -0x1837990b -> :sswitch_802
- -0x18162761 -> :sswitch_7f9
- -0x1711ad89 -> :sswitch_7ed
- -0x16e040ae -> :sswitch_7e1
- -0x166f92a6 -> :sswitch_7d5
- -0x14d1edee -> :sswitch_7c9
- -0x12830e6b -> :sswitch_7bd
- -0x126b47b3 -> :sswitch_7b1
- -0x11ae6340 -> :sswitch_7a5
- -0x11a7be77 -> :sswitch_799
- -0xf41cfe9 -> :sswitch_78d
- -0xf27cc5f -> :sswitch_781
- -0xed1377f -> :sswitch_775
- -0xe96e4cf -> :sswitch_769
- -0xdf0c371 -> :sswitch_75d
- -0xa513a07 -> :sswitch_751
- -0x8dc7480 -> :sswitch_745
- -0x86611f7 -> :sswitch_739
- -0x6f11a65 -> :sswitch_72d
- -0x609d307 -> :sswitch_721
- -0x5abf878 -> :sswitch_715
- -0x5a60405 -> :sswitch_709
- -0x5058fb4 -> :sswitch_6fd
- -0x46586aa -> :sswitch_6f1
- -0x394ee20 -> :sswitch_6e5
- -0x3638689 -> :sswitch_6d9
- -0x355e367 -> :sswitch_6cd
- -0x27153f6 -> :sswitch_6c4
- -0x2417edb -> :sswitch_6b8
- -0x1a6bb21 -> :sswitch_6ac
- -0xa7e8e3 -> :sswitch_6a0
- -0x9f812d -> :sswitch_694
- -0x25f114 -> :sswitch_688
- 0x532a60 -> :sswitch_67c
- 0x8dbe71 -> :sswitch_670
- 0xc0778b -> :sswitch_664
- 0xc87ed1 -> :sswitch_658
- 0x1c1a1a4 -> :sswitch_64f
- 0x1effd51 -> :sswitch_643
- 0x2180e05 -> :sswitch_637
- 0x52032ed -> :sswitch_62b
- 0x97e972b -> :sswitch_622
- 0xa18dd18 -> :sswitch_616
- 0xcf6bd44 -> :sswitch_60a
- 0xdddeeff -> :sswitch_5fe
- 0xeff0381 -> :sswitch_5f2
- 0xf5a5f64 -> :sswitch_5e6
- 0x105c60f7 -> :sswitch_5da
- 0x10a25a5e -> :sswitch_5ce
- 0x11b526b8 -> :sswitch_5c5
- 0x11fbb273 -> :sswitch_5b9
- 0x13379bfd -> :sswitch_5b0
- 0x14318b79 -> :sswitch_5a4
- 0x156bd587 -> :sswitch_598
- 0x1659e31a -> :sswitch_58c
- 0x16ddaab6 -> :sswitch_580
- 0x16f2887f -> :sswitch_574
- 0x177c82af -> :sswitch_568
- 0x18fd59f7 -> :sswitch_55c
- 0x1a0ec90c -> :sswitch_550
- 0x1b06fbe7 -> :sswitch_544
- 0x1b375163 -> :sswitch_538
- 0x1bdc8269 -> :sswitch_52c
- 0x1c98d2a2 -> :sswitch_520
- 0x1d26afe1 -> :sswitch_517
- 0x1dc31e09 -> :sswitch_50b
- 0x1dce4e53 -> :sswitch_4ff
- 0x1fa78f83 -> :sswitch_4f3
- 0x206b4f9a -> :sswitch_4e7
- 0x20f0f2d2 -> :sswitch_4db
- 0x21e07af7 -> :sswitch_4cf
- 0x22e0b117 -> :sswitch_4c3
- 0x23e149d2 -> :sswitch_4b7
- 0x255cf0a4 -> :sswitch_4ab
- 0x264fdb61 -> :sswitch_49f
- 0x268102ba -> :sswitch_493
- 0x27c27982 -> :sswitch_487
- 0x294451ff -> :sswitch_47b
- 0x2998f23a -> :sswitch_46f
- 0x29fcb069 -> :sswitch_463
- 0x2a7bdccb -> :sswitch_457
- 0x2b45262e -> :sswitch_44b
- 0x2c7f409f -> :sswitch_43f
- 0x2f1d48f8 -> :sswitch_433
- 0x2fff07b6 -> :sswitch_427
- 0x3068c37f -> :sswitch_41b
- 0x307f0c2a -> :sswitch_40f
- 0x30f5c833 -> :sswitch_403
- 0x3157654e -> :sswitch_3f7
- 0x317dac8e -> :sswitch_3eb
- 0x31c9069a -> :sswitch_3df
- 0x31cd0317 -> :sswitch_3d6
- 0x340a387b -> :sswitch_3ca
- 0x340b3b80 -> :sswitch_3c1
- 0x34a1113a -> :sswitch_3b5
- 0x3614d945 -> :sswitch_3a9
- 0x3746262b -> :sswitch_39d
- 0x3781fd5a -> :sswitch_391
- 0x37ba2393 -> :sswitch_385
- 0x37f13ec0 -> :sswitch_379
- 0x3851a28e -> :sswitch_36d
- 0x3958b459 -> :sswitch_361
- 0x3b02790e -> :sswitch_355
- 0x3cf1f24d -> :sswitch_349
- 0x419b53cb -> :sswitch_340
- 0x41bf0f9d -> :sswitch_334
- 0x41d8fb66 -> :sswitch_328
- 0x42bf1dda -> :sswitch_31c
- 0x4340426c -> :sswitch_310
- 0x43e2954a -> :sswitch_304
- 0x4435da19 -> :sswitch_2f8
- 0x44c6cd9b -> :sswitch_2ec
- 0x456fd6c5 -> :sswitch_2e0
- 0x4785240d -> :sswitch_2d4
- 0x478d8757 -> :sswitch_2c8
- 0x48aa013a -> :sswitch_2bc
- 0x4a437870 -> :sswitch_2b0
- 0x4a718302 -> :sswitch_2a4
- 0x4b329b9f -> :sswitch_298
- 0x4b53687b -> :sswitch_28c
- 0x4c1d1eac -> :sswitch_280
- 0x4de98cd3 -> :sswitch_274
- 0x4e062bf4 -> :sswitch_268
- 0x4e2b0996 -> :sswitch_25c
- 0x4f2fbb6d -> :sswitch_253
- 0x4fbe49e6 -> :sswitch_247
- 0x5035dc38 -> :sswitch_23b
- 0x50baaeaf -> :sswitch_22f
- 0x50c33b74 -> :sswitch_223
- 0x51e01d5a -> :sswitch_217
- 0x53571c73 -> :sswitch_20b
- 0x5375779b -> :sswitch_1ff
- 0x563e8572 -> :sswitch_1f3
- 0x5741b64a -> :sswitch_1e7
- 0x5982ef72 -> :sswitch_1db
- 0x5983052a -> :sswitch_1cf
- 0x59d8095e -> :sswitch_1c3
- 0x5a510cd7 -> :sswitch_1b7
- 0x5b6fb1ce -> :sswitch_1ab
- 0x5bbea4e8 -> :sswitch_19f
- 0x5d0fc041 -> :sswitch_193
- 0x5d2e5d62 -> :sswitch_187
- 0x5e1b8246 -> :sswitch_17b
- 0x5f022840 -> :sswitch_16f
- 0x62f04df1 -> :sswitch_163
- 0x63632339 -> :sswitch_157
- 0x636426c6 -> :sswitch_14b
- 0x65ba7c9f -> :sswitch_13f
- 0x65e59901 -> :sswitch_133
- 0x66e405f0 -> :sswitch_127
- 0x68fafae7 -> :sswitch_11b
- 0x6922d7ce -> :sswitch_10f
- 0x6a47f10c -> :sswitch_103
- 0x6a49283e -> :sswitch_fa
- 0x6c302670 -> :sswitch_ee
- 0x6eeaf7af -> :sswitch_e2
- 0x70a4c9d9 -> :sswitch_d6
- 0x71503e9b -> :sswitch_ca
- 0x71fd7398 -> :sswitch_be
- 0x751e9427 -> :sswitch_b2
- 0x751fff38 -> :sswitch_a6
- 0x76acc111 -> :sswitch_9a
- 0x78b8a475 -> :sswitch_8e
- 0x79e74a9f -> :sswitch_82
- 0x79f5ac85 -> :sswitch_76
- 0x7a119c4b -> :sswitch_6a
- 0x7af58937 -> :sswitch_5e
- 0x7b2fc0f6 -> :sswitch_52
- 0x7bb64959 -> :sswitch_46
- 0x7d9266b8 -> :sswitch_3a
- 0x7f3d788c -> :sswitch_2e
- .end sparse-switch
-.end method
diff --git a/src/test/smali/self-is-catch-block/SelfIsCatchBlock.smali b/src/test/smali/self-is-catch-block/SelfIsCatchBlock.smali
deleted file mode 100644
index 04f0cf1..0000000
--- a/src/test/smali/self-is-catch-block/SelfIsCatchBlock.smali
+++ /dev/null
@@ -1,43 +0,0 @@
-# Copyright (c) 2016, 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.
-
-.class public LTest;
-
-.super Ljava/lang/Object;
-
-.method private static throwOnPositive(I)V
- .registers 2
- if-lez v1, :cond_nothrow
- new-instance v0, Ljava/lang/RuntimeException;
- invoke-direct {v0}, Ljava/lang/RuntimeException;-><init>()V
- throw v0
- :cond_nothrow
- return-void
-.end method
-
-# Tests the flow of values in the pathological case that the block is its own catch handler.
-# This tests that the register allocator does not insert moves at the end of the throwing
-# block since in the case of a throw the block does not actually complete.
-.method static loopWhileThrow(I)I
- .registers 4
- :catchall_0
- move v0, p0
- add-int/lit8 p0, p0, -0x1
- :try_start_6
- invoke-static {v0}, LTest;->throwOnPositive(I)V
- :try_end_9
- .catchall {:try_start_6 .. :try_end_9} :catchall_0
- return p0
-.end method
-
-.method public static main([Ljava/lang/String;)V
- .registers 2
- const v0, 0x64
- sget-object v1, Ljava/lang/System;->out:Ljava/io/PrintStream;
- invoke-virtual {v1, v0}, Ljava/io/PrintStream;->println(I)V
- invoke-static {v0}, LTest;->loopWhileThrow(I)I
- move-result v0
- invoke-virtual {v1, v0}, Ljava/io/PrintStream;->println(I)V
- return-void
-.end method
diff --git a/src/test/smali/sparse-switch/SparseSwitch.smali b/src/test/smali/sparse-switch/SparseSwitch.smali
deleted file mode 100644
index 908220e..0000000
--- a/src/test/smali/sparse-switch/SparseSwitch.smali
+++ /dev/null
@@ -1,106 +0,0 @@
-# Copyright (c) 2016, 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.
-
-.class public LTest;
-
-.super Ljava/lang/Object;
-
-# Empty sparse switch
-.method public static test1(I)I
- .registers 1
- sparse-switch v0, :sparse_switch_data
- const/4 v0, 0x1
- return v0
-
- :sparse_switch_data
- .sparse-switch
- .end sparse-switch
-.end method
-
-# Empty sparse switch after data
-.method public static test2(I)I
- .registers 1
-
- goto :sparse_switch
-
- :sparse_switch_data
- .sparse-switch
- .end sparse-switch
-
- :sparse_switch
- sparse-switch v0, :sparse_switch_data
- const/4 v0, 0x2
- return v0
-.end method
-
-# Sparse switch after data
-.method public static test3(I)I
- .registers 1
-
- goto :sparse_switch
-
- :case_2
- const/4 v0, 0x3
- goto :return
-
- :sparse_switch_data
- .sparse-switch
- 0x2 -> :case_2
- 0x4 -> :case_4
- .end sparse-switch
-
- :sparse_switch
- sparse-switch v0, :sparse_switch_data
- const/4 v0, 0x5
- goto :return
-
- :case_4
- const/4 v0, 0x4
-
- :return
- return v0
-.end method
-
-.method public static main([Ljava/lang/String;)V
- .locals 2
-
- sget-object v0, Ljava/lang/System;->out:Ljava/io/PrintStream;
-
- const/4 v1, 0x0
- invoke-static {v1}, LTest;->test1(I)I
- move-result v1
- invoke-static {v1}, Ljava/lang/Integer;->toString(I)Ljava/lang/String;
- move-result-object v1
- invoke-virtual {v0, v1}, Ljava/io/PrintStream;->print(Ljava/lang/Object;)V
-
- const/4 v1, 0x0
- invoke-static {v1}, LTest;->test2(I)I
- move-result v1
- invoke-static {v1}, Ljava/lang/Integer;->toString(I)Ljava/lang/String;
- move-result-object v1
- invoke-virtual {v0, v1}, Ljava/io/PrintStream;->print(Ljava/lang/Object;)V
-
- const/4 v1, 0x2
- invoke-static {v1}, LTest;->test3(I)I
- move-result v1
- invoke-static {v1}, Ljava/lang/Integer;->toString(I)Ljava/lang/String;
- move-result-object v1
- invoke-virtual {v0, v1}, Ljava/io/PrintStream;->print(Ljava/lang/Object;)V
-
- const/4 v1, 0x4
- invoke-static {v1}, LTest;->test3(I)I
- move-result v1
- invoke-static {v1}, Ljava/lang/Integer;->toString(I)Ljava/lang/String;
- move-result-object v1
- invoke-virtual {v0, v1}, Ljava/io/PrintStream;->print(Ljava/lang/Object;)V
-
- const/4 v1, 0x6
- invoke-static {v1}, LTest;->test3(I)I
- move-result v1
- invoke-static {v1}, Ljava/lang/Integer;->toString(I)Ljava/lang/String;
- move-result-object v1
- invoke-virtual {v0, v1}, Ljava/io/PrintStream;->print(Ljava/lang/Object;)V
-
- return-void
-.end method
diff --git a/src/test/smali/try-catch/TryCatch.smali b/src/test/smali/try-catch/TryCatch.smali
deleted file mode 100644
index 8e06c5a..0000000
--- a/src/test/smali/try-catch/TryCatch.smali
+++ /dev/null
@@ -1,90 +0,0 @@
-# Copyright (c) 2017, 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.
-
-.class LTest;
-.super Ljava/lang/Object;
-
-# Fall through to catch block.
-.method public test1()V
- .registers 1
- :try_start
- monitor-enter p0
- monitor-exit p0
- :try_end
- return-void
- .catchall {:try_start .. :try_end} :try_end
-.end method
-
-.method public static test2()I
- .locals 1
- const v0, 0
- :try_start
- const v0, 1
- goto :return
- :try_end
- .catch Ljava/lang/Exception; {:try_start .. :try_end} :return
- .catch Ljava/lang/Throwable; {:try_start .. :try_end} :error
- :error
- move-exception v0
- const v0, 2
- :return
- return v0
-.end method
-
-.method public static test2_throw()I
- .locals 1
- const v0, 1
- :try_start
- invoke-static {}, Ltest/X;->f()V
- const v0, 0
- goto :return
- :try_end
- .catch Ljava/lang/Exception; {:try_start .. :try_end} :return
- .catch Ljava/lang/Throwable; {:try_start .. :try_end} :error
- :error
- move-exception v0
- throw v0
- :return
- return v0
-.end method
-
-# Dead catch block.
-.method public test3()I
- .locals 1
- const v0, 0
- return v0
- :start
- nop
- :end
- .catchall {:start .. :end} :catch
- nop
- :catch
- nop
-.end method
-
-.method public static main([Ljava/lang/String;)V
- .locals 0
- return-void
-.end method
-
-.method public test4(I)V
- .locals 1
- const/4 v0, 0
- if-nez p0, :not_zero
- const/4 v0, 1
- goto :try_end
- :not_zero
- const/4 v0, 2
- :try_start
- invoke-static {}, Ltest/X;->f()V
- const/4 v0, 3
- :try_end
- return-void
- .catchall {:try_start .. :try_end} :try_end
-.end method
-
-.method public f()V
- .locals 0
- return-void
-.end method
diff --git a/src/test/smali/type-confusion-regression/Test.java b/src/test/smali/type-confusion-regression/Test.java
deleted file mode 100644
index ef41f6b..0000000
--- a/src/test/smali/type-confusion-regression/Test.java
+++ /dev/null
@@ -1,49 +0,0 @@
-// Copyright (c) 2016, 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 java.util.ArrayList;
-import java.util.List;
-
-public class Test extends Throwable {
- public long[] al = { 1, 2, 3 };
- public int[] ai = null;
- public boolean b = false;
- public List a = new ArrayList();
- public long l = 1 << 53;
- public int i = 32;
- public double d = 0.123;
- public Test h = null;
-
- public Test(int i) {
- throw new RuntimeException("Test(i)");
- }
-
- public Test(int i, int j) {
- throw new RuntimeException("Test.<init>(II)");
- }
-
- public Test(String s) {
- throw new RuntimeException("Test.<init>(Ljava/lang/String;)");
- }
-
- public Test() {
- throw new RuntimeException("Test.<init>()");
- }
-
- public static int a(Test t) {
- throw new RuntimeException("Test.a(Test)");
- }
-
- public Test e() {
- throw new RuntimeException("Test.e()");
- }
-
- public static void main(String[] args) {
- try {
- TestObject.a(new Test(), new Test(), new Test(), new Test());
- } catch (RuntimeException e) {
- System.out.println(e);
- }
- }
-}
diff --git a/src/test/smali/type-confusion-regression/TestObject.java b/src/test/smali/type-confusion-regression/TestObject.java
deleted file mode 100644
index ee66c35..0000000
--- a/src/test/smali/type-confusion-regression/TestObject.java
+++ /dev/null
@@ -1,8 +0,0 @@
-// Copyright (c) 2016, 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.
-
-public class TestObject {
- public static void a(Test a, Test b, Test c, Test d) {
- }
-}
diff --git a/src/test/smali/type-confusion-regression/TestObject.smali b/src/test/smali/type-confusion-regression/TestObject.smali
deleted file mode 100644
index 832cab9..0000000
--- a/src/test/smali/type-confusion-regression/TestObject.smali
+++ /dev/null
@@ -1,385 +0,0 @@
-# Copyright (c) 2016, 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.
-
-.class public final LTestObject;
-.super Ljava/lang/Object;
-
-.method public static a(LTest;LTest;LTest;LTest;)V
- .registers 40
- .prologue
- invoke-virtual/range {p2 .. p2}, LTest;->e()LTest;
- move-result-object v2
- iget-wide v0, v2, LTest;->l:J
- move-wide/from16 v22, v0
- invoke-virtual/range {p2 .. p2}, LTest;->e()LTest;
- move-result-object v2
- iget-wide v2, v2, LTest;->l:J
- const-wide/16 v4, 0x3e8
- mul-long/2addr v2, v4
- const-wide/16 v4, 0x3e8
- mul-long/2addr v2, v4
- div-long v2, v2, v22
- move-object/from16 v0, p0
- iput-wide v2, v0, LTest;->l:J
- invoke-virtual/range {p1 .. p1}, LTest;->e()LTest;
- move-result-object v2
- iget-wide v4, v2, LTest;->d:D
- double-to-int v3, v4
- move-object/from16 v0, p0
- iput v3, v0, LTest;->i:I
- iget-wide v4, v2, LTest;->d:D
- double-to-int v3, v4
- move-object/from16 v0, p0
- iput v3, v0, LTest;->i:I
- iget-object v2, v2, LTest;->h:LTest;
- invoke-static {v2}, LTest;->a(LTest;)I
- move-result v2
- move-object/from16 v0, p0
- iput v2, v0, LTest;->i:I
- const/4 v3, 0x0
- invoke-virtual/range {p3 .. p3}, LTest;->e()LTest;
- move-result-object v2
- if-eqz v2, :cond_59
- invoke-virtual/range {p3 .. p3}, LTest;->e()LTest;
- move-result-object v2
- iget-object v2, v2, LTest;->a:Ljava/util/List;
- invoke-interface {v2}, Ljava/util/List;->iterator()Ljava/util/Iterator;
- move-result-object v4
- :cond_47
- invoke-interface {v4}, Ljava/util/Iterator;->hasNext()Z
- move-result v2
- if-eqz v2, :cond_59
- invoke-interface {v4}, Ljava/util/Iterator;->next()Ljava/lang/Object;
- move-result-object v2
- check-cast v2, LTest;
- iget v2, v2, LTest;->i:I
- if-eqz v2, :cond_47
- const/4 v2, 0x1
- move v3, v2
- :cond_59
- move-object/from16 v0, p0
- iput-boolean v3, v0, LTest;->b:Z
- invoke-virtual/range {p3 .. p3}, LTest;->e()LTest;
- move-result-object v2
- iget-object v0, v2, LTest;->a:Ljava/util/List;
- move-object/from16 v17, v0
- const/4 v2, 0x0
- invoke-interface/range {v17 .. v17}, Ljava/util/List;->iterator()Ljava/util/Iterator;
- move-result-object v5
- move v4, v2
- :goto_6b
- invoke-interface {v5}, Ljava/util/Iterator;->hasNext()Z
- move-result v2
- if-eqz v2, :cond_8c
- invoke-interface {v5}, Ljava/util/Iterator;->next()Ljava/lang/Object;
- move-result-object v2
- check-cast v2, LTest;
- iget-wide v6, v2, LTest;->l:J
- const-wide/16 v8, 0x0
- cmp-long v2, v6, v8
- if-gez v2, :cond_87
- new-instance v2, LTest;
- const-string v3, "string"
- invoke-direct {v2, v3}, LTest;-><init>(Ljava/lang/String;)V
- throw v2
- :cond_87
- int-to-long v8, v4
- add-long/2addr v6, v8
- long-to-int v2, v6
- move v4, v2
- goto :goto_6b
- :cond_8c
- if-gtz v4, :cond_96
- new-instance v2, LTest;
- const-string v3, "string"
- invoke-direct {v2, v3}, LTest;-><init>(Ljava/lang/String;)V
- throw v2
- :cond_96
- invoke-virtual/range {p3 .. p3}, LTest;->e()LTest;
- move-result-object v5
- const/4 v2, 0x0
- if-eqz v5, :cond_260
- iget-object v2, v5, LTest;->al:[J
- if-eqz v2, :cond_a4
- array-length v5, v2
- if-nez v5, :cond_ac
- :cond_a4
- new-instance v2, LTest;
- const-string v3, "string"
- invoke-direct {v2, v3}, LTest;-><init>(Ljava/lang/String;)V
- throw v2
- :cond_ac
- array-length v5, v2
- add-int/lit8 v5, v5, -0x1
- aget-wide v6, v2, v5
- int-to-long v8, v4
- cmp-long v5, v6, v8
- if-lez v5, :cond_be
- new-instance v2, LTest;
- const-string v3, "string"
- invoke-direct {v2, v3}, LTest;-><init>(Ljava/lang/String;)V
- throw v2
- :cond_be
- move-object v5, v2
- :goto_bf
- const/4 v2, 0x0
- const/4 v6, 0x0
- invoke-virtual/range {p3 .. p3}, LTest;->e()LTest;
- move-result-object v7
- if-eqz v7, :cond_f2
- iget-object v7, v7, LTest;->a:Ljava/util/List;
- invoke-interface {v7}, Ljava/util/List;->iterator()Ljava/util/Iterator;
- move-result-object v8
- move v6, v2
- :goto_ce
- invoke-interface {v8}, Ljava/util/Iterator;->hasNext()Z
- move-result v2
- if-eqz v2, :cond_f0
- invoke-interface {v8}, Ljava/util/Iterator;->next()Ljava/lang/Object;
- move-result-object v2
- check-cast v2, LTest;
- iget v2, v2, LTest;->i:I
- int-to-long v10, v2
- const-wide/16 v12, 0x0
- cmp-long v2, v10, v12
- if-gez v2, :cond_eb
- new-instance v2, LTest;
- const-string v3, "string"
- invoke-direct {v2, v3}, LTest;-><init>(Ljava/lang/String;)V
- throw v2
- :cond_eb
- int-to-long v12, v6
- add-long/2addr v10, v12
- long-to-int v2, v10
- move v6, v2
- goto :goto_ce
- :cond_f0
- move v2, v6
- move-object v6, v7
- :cond_f2
- if-eqz v2, :cond_fe
- if-eq v2, v4, :cond_fe
- new-instance v2, LTest;
- const-string v3, "string"
- invoke-direct {v2, v3}, LTest;-><init>(Ljava/lang/String;)V
- throw v2
- :cond_fe
- if-eqz v5, :cond_149
- new-instance v2, LTest;
- array-length v7, v5
- invoke-direct {v2, v4, v7}, LTest;-><init>(II)V
- move-object v4, v2
- :goto_107
- iget-object v0, v4, LTest;->al:[J
- move-object/from16 v24, v0
- iget-object v0, v4, LTest;->ai:[I
- move-object/from16 v25, v0
- const/16 v16, 0x0
- const/4 v7, -0x1
- const-wide/16 v14, 0x0
- if-eqz v6, :cond_150
- invoke-interface {v6}, Ljava/util/List;->size()I
- move-result v2
- if-lez v2, :cond_150
- invoke-interface {v6}, Ljava/util/List;->iterator()Ljava/util/Iterator;
- move-result-object v2
- move-object v6, v2
- :goto_121
- const-wide/16 v12, 0x0
- const-wide/16 v10, 0x0
- const-wide/16 v8, 0x0
- invoke-interface/range {v17 .. v17}, Ljava/util/List;->iterator()Ljava/util/Iterator;
- move-result-object v26
- :cond_12b
- invoke-interface/range {v26 .. v26}, Ljava/util/Iterator;->hasNext()Z
- move-result v2
- if-eqz v2, :cond_22d
- invoke-interface/range {v26 .. v26}, Ljava/util/Iterator;->next()Ljava/lang/Object;
- move-result-object v2
- check-cast v2, LTest;
- iget-wide v0, v2, LTest;->l:J
- move-wide/from16 v28, v0
- const-wide/16 v18, 0x0
- cmp-long v17, v28, v18
- if-gez v17, :cond_153
- new-instance v2, LTest;
- const-string v3, "string"
- invoke-direct {v2, v3}, LTest;-><init>(Ljava/lang/String;)V
- throw v2
- :cond_149
- new-instance v2, LTest;
- invoke-direct {v2, v4}, LTest;-><init>(I)V
- move-object v4, v2
- goto :goto_107
- :cond_150
- const/4 v2, 0x0
- move-object v6, v2
- goto :goto_121
- :cond_153
- iget-wide v0, v2, LTest;->l:J
- move-wide/from16 v18, v0
- move-wide/from16 v20, v18
- :goto_159
- const-wide/16 v18, 0x0
- cmp-long v2, v20, v18
- if-lez v2, :cond_12b
- if-eqz v6, :cond_192
- move-wide/from16 v18, v12
- :goto_163
- const-wide/16 v12, 0x0
- cmp-long v2, v18, v12
- if-gtz v2, :cond_178
- invoke-interface {v6}, Ljava/util/Iterator;->next()Ljava/lang/Object;
- move-result-object v2
- check-cast v2, LTest;
- iget v10, v2, LTest;->i:I
- int-to-long v0, v10
- move-wide/from16 v18, v0
- iget v2, v2, LTest;->i:I
- int-to-long v10, v2
- goto :goto_163
- :cond_178
- if-nez v16, :cond_17b
- move-wide v8, v10
- :cond_17b
- add-long v12, v14, v10
- sub-long/2addr v12, v8
- move-wide/from16 v34, v12
- move-wide v12, v10
- move-wide v10, v8
- move-wide/from16 v8, v34
- :goto_184
- const-wide/16 v30, 0x0
- cmp-long v2, v8, v30
- if-gez v2, :cond_198
- new-instance v2, LTest;
- const-string v3, "string"
- invoke-direct {v2, v3}, LTest;-><init>(Ljava/lang/String;)V
- throw v2
- :cond_192
- move-wide/from16 v18, v12
- move-wide v12, v10
- move-wide v10, v8
- move-wide v8, v14
- goto :goto_184
- :cond_198
- const-wide/16 v30, 0x3e8
- mul-long v8, v8, v30
- const-wide/16 v30, 0x3e8
- mul-long v8, v8, v30
- div-long v8, v8, v22
- move/from16 v2, v16
- :goto_1a4
- if-lez v2, :cond_1cb
- add-int/lit8 v17, v2, -0x1
- aget-wide v30, v24, v17
- cmp-long v17, v30, v8
- if-lez v17, :cond_1cb
- add-int/lit8 v17, v2, -0x1
- aget-wide v30, v24, v17
- aput-wide v30, v24, v2
- if-eqz v25, :cond_1c8
- if-ltz v7, :cond_1c8
- add-int/lit8 v17, v2, -0x1
- aget v27, v25, v7
- move/from16 v0, v17
- move/from16 v1, v27
- if-ne v0, v1, :cond_1c8
- aget v17, v25, v7
- add-int/lit8 v17, v17, 0x1
- aput v17, v25, v7
- :cond_1c8
- add-int/lit8 v2, v2, -0x1
- goto :goto_1a4
- :cond_1cb
- aput-wide v8, v24, v2
- if-lez v2, :cond_1ea
- add-int/lit8 v17, v2, -0x1
- aget-wide v30, v24, v17
- cmp-long v8, v30, v8
- if-nez v8, :cond_1ea
- const/4 v3, 0x1
- if-ne v2, v3, :cond_1e2
- new-instance v2, LTest;
- const-string v3, "string"
- invoke-direct {v2, v3}, LTest;-><init>(Ljava/lang/String;)V
- throw v2
- :cond_1e2
- new-instance v2, LTest;
- const-string v3, "string"
- invoke-direct {v2, v3}, LTest;-><init>(Ljava/lang/String;)V
- throw v2
- :cond_1ea
- if-eqz v5, :cond_216
- add-int/lit8 v8, v7, 0x1
- array-length v9, v5
- if-ge v8, v9, :cond_216
- move/from16 v0, v16
- int-to-long v8, v0
- add-int/lit8 v17, v7, 0x1
- aget-wide v30, v5, v17
- const-wide/16 v32, 0x1
- sub-long v30, v30, v32
- cmp-long v8, v8, v30
- if-nez v8, :cond_216
- add-int/lit8 v7, v7, 0x1
- aput v2, v25, v7
- if-lez v7, :cond_216
- add-int/lit8 v2, v7, -0x1
- aget v2, v25, v2
- aget v8, v25, v7
- if-lt v2, v8, :cond_216
- new-instance v2, LTest;
- const-string v3, "string"
- invoke-direct {v2, v3}, LTest;-><init>(Ljava/lang/String;)V
- throw v2
- :cond_216
- add-int/lit8 v2, v16, 0x1
- add-long v16, v14, v28
- const-wide/16 v8, 0x1
- sub-long v14, v18, v8
- const-wide/16 v8, 0x1
- sub-long v8, v20, v8
- move-wide/from16 v20, v8
- move-wide v8, v10
- move-wide v10, v12
- move-wide v12, v14
- move-wide/from16 v14, v16
- move/from16 v16, v2
- goto/16 :goto_159
- :cond_22d
- iget-object v2, v4, LTest;->al:[J
- move-object/from16 v0, p0
- iput-object v2, v0, LTest;->al:[J
- iget-object v2, v4, LTest;->ai:[I
- if-eqz v3, :cond_241
- if-nez v2, :cond_241
- new-instance v2, LTest;
- const-string v3, "string"
- invoke-direct {v2, v3}, LTest;-><init>(Ljava/lang/String;)V
- throw v2
- :cond_241
- if-eqz v2, :cond_25b
- array-length v3, v2
- if-gtz v3, :cond_24e
- new-instance v2, LTest;
- const-string v3, "string"
- invoke-direct {v2, v3}, LTest;-><init>(Ljava/lang/String;)V
- throw v2
- :cond_24e
- const/4 v3, 0x0
- aget v3, v2, v3
- if-eqz v3, :cond_25b
- new-instance v2, LTest;
- const-string v3, "string"
- invoke-direct {v2, v3}, LTest;-><init>(Ljava/lang/String;)V
- throw v2
- :cond_25b
- move-object/from16 v0, p0
- iput-object v2, v0, LTest;->ai:[I
- return-void
- :cond_260
- move-object v5, v2
- goto/16 :goto_bf
-.end method
\ No newline at end of file
diff --git a/src/test/smali/type-confusion-regression2/Test.java b/src/test/smali/type-confusion-regression2/Test.java
deleted file mode 100644
index 4caa81b..0000000
--- a/src/test/smali/type-confusion-regression2/Test.java
+++ /dev/null
@@ -1,13 +0,0 @@
-// Copyright (c) 2016, 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.
-
-public class Test {
- public static void main(String[] args) {
- try {
- new TestObject().b();
- } catch (Exception e) {
- System.out.println(e);
- }
- }
-}
diff --git a/src/test/smali/type-confusion-regression2/TestObject.java b/src/test/smali/type-confusion-regression2/TestObject.java
deleted file mode 100644
index 677b429..0000000
--- a/src/test/smali/type-confusion-regression2/TestObject.java
+++ /dev/null
@@ -1,8 +0,0 @@
-// Copyright (c) 2016, 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.
-
-public class TestObject {
- public void b() {
- }
-}
diff --git a/src/test/smali/type-confusion-regression2/TestObject.smali b/src/test/smali/type-confusion-regression2/TestObject.smali
deleted file mode 100644
index a12bd4f..0000000
--- a/src/test/smali/type-confusion-regression2/TestObject.smali
+++ /dev/null
@@ -1,193 +0,0 @@
-# Copyright (c) 2016, 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.
-
-.class public final LTestObject;
-.super Ljava/lang/Object;
-
-.field private static final l:[I
-
-.field public a:I
-.field public b:I
-.field public c:[I
-.field public d:[D
-.field public e:I
-.field public f:I
-.field public g:[D
-.field public h:[D
-.field public i:[D
-.field public j:I
-.field private k:[D
-
-.method public constructor <init>()V
- .registers 1
- invoke-direct {p0}, Ljava/lang/Object;-><init>()V
- return-void
-.end method
-
-.method public final b()V
- .registers 29
- move-object/from16 v0, p0
- iget v2, v0, LTestObject;->a:I
- const/4 v3, 0x1
- if-ne v2, v3, :cond_8
- :cond_7
- return-void
- :cond_8
- move-object/from16 v0, p0
- iget v2, v0, LTestObject;->a:I
- mul-int/lit8 v12, v2, 0x2
- const/4 v5, 0x0
- move-object/from16 v0, p0
- iget v2, v0, LTestObject;->a:I
- const/4 v3, 0x0
- const/4 v4, 0x0
- :goto_15
- add-int/lit8 v6, v4, 0x1
- const/4 v4, 0x4
- if-gt v6, v4, :cond_55
- sget-object v4, LTestObject;->l:[I
- add-int/lit8 v5, v6, -0x1
- aget v4, v4, v5
- move v5, v4
- move v4, v3
- :goto_22
- div-int v3, v2, v5
- mul-int v7, v5, v3
- sub-int v7, v2, v7
- if-nez v7, :cond_f9
- add-int/lit8 v2, v4, 0x1
- move-object/from16 v0, p0
- iget-object v4, v0, LTestObject;->g:[D
- add-int/lit8 v7, v2, 0x1
- add-int/2addr v7, v12
- int-to-double v8, v5
- aput-wide v8, v4, v7
- const/4 v4, 0x2
- if-ne v5, v4, :cond_64
- const/4 v4, 0x1
- if-eq v2, v4, :cond_64
- const/4 v4, 0x2
- :goto_3d
- if-gt v4, v2, :cond_5a
- sub-int v7, v2, v4
- add-int/lit8 v7, v7, 0x2
- add-int/2addr v7, v12
- move-object/from16 v0, p0
- iget-object v8, v0, LTestObject;->g:[D
- add-int/lit8 v9, v7, 0x1
- move-object/from16 v0, p0
- iget-object v10, v0, LTestObject;->g:[D
- aget-wide v10, v10, v7
- aput-wide v10, v8, v9
- add-int/lit8 v4, v4, 0x1
- goto :goto_3d
- :cond_55
- add-int/lit8 v4, v5, 0x2
- move v5, v4
- move v4, v3
- goto :goto_22
- :cond_5a
- move-object/from16 v0, p0
- iget-object v4, v0, LTestObject;->g:[D
- add-int/lit8 v7, v12, 0x2
- const-wide/high16 v8, 0x4000000000000000L
- aput-wide v8, v4, v7
- :cond_64
- const/4 v4, 0x1
- if-ne v3, v4, :cond_f5
- move-object/from16 v0, p0
- iget-object v3, v0, LTestObject;->g:[D
- move-object/from16 v0, p0
- iget v4, v0, LTestObject;->a:I
- int-to-double v4, v4
- aput-wide v4, v3, v12
- move-object/from16 v0, p0
- iget-object v3, v0, LTestObject;->g:[D
- add-int/lit8 v4, v12, 0x1
- int-to-double v6, v2
- aput-wide v6, v3, v4
- const-wide v4, 0x401921fb54442d18L
- move-object/from16 v0, p0
- iget v3, v0, LTestObject;->a:I
- int-to-double v6, v3
- div-double v14, v4, v6
- const/4 v6, 0x0
- add-int/lit8 v13, v2, -0x1
- const/4 v2, 0x1
- if-eqz v13, :cond_7
- const/4 v3, 0x1
- move v9, v2
- move v11, v3
- :goto_90
- if-gt v11, v13, :cond_7
- move-object/from16 v0, p0
- iget-object v2, v0, LTestObject;->g:[D
- add-int/lit8 v3, v11, 0x1
- add-int/2addr v3, v12
- aget-wide v2, v2, v3
- double-to-int v3, v2
- const/4 v2, 0x0
- mul-int v10, v9, v3
- move-object/from16 v0, p0
- iget v4, v0, LTestObject;->a:I
- div-int v16, v4, v10
- add-int/lit8 v17, v3, -0x1
- const/4 v3, 0x1
- move v8, v3
- :goto_a9
- move/from16 v0, v17
- if-gt v8, v0, :cond_f0
- add-int v7, v2, v9
- int-to-double v2, v7
- mul-double v18, v2, v14
- const-wide/16 v4, 0x0
- const/4 v2, 0x3
- move v3, v6
- :goto_b6
- move/from16 v0, v16
- if-gt v2, v0, :cond_e9
- add-int/lit8 v3, v3, 0x2
- const-wide/high16 v20, 0x3ff0000000000000L
- add-double v4, v4, v20
- mul-double v20, v4, v18
- move-object/from16 v0, p0
- iget v0, v0, LTestObject;->a:I
- move/from16 v22, v0
- add-int v22, v22, v3
- move-object/from16 v0, p0
- iget-object v0, v0, LTestObject;->g:[D
- move-object/from16 v23, v0
- add-int/lit8 v24, v22, -0x2
- invoke-static/range {v20 .. v21}, Ljava/lang/Math;->cos(D)D
- move-result-wide v26
- aput-wide v26, v23, v24
- move-object/from16 v0, p0
- iget-object v0, v0, LTestObject;->g:[D
- move-object/from16 v23, v0
- add-int/lit8 v22, v22, -0x1
- invoke-static/range {v20 .. v21}, Ljava/lang/Math;->sin(D)D
- move-result-wide v20
- aput-wide v20, v23, v22
- add-int/lit8 v2, v2, 0x2
- goto :goto_b6
- :cond_e9
- add-int v6, v6, v16
- add-int/lit8 v2, v8, 0x1
- move v8, v2
- move v2, v7
- goto :goto_a9
- :cond_f0
- add-int/lit8 v2, v11, 0x1
- move v9, v10
- move v11, v2
- goto :goto_90
- :cond_f5
- move v4, v2
- move v2, v3
- goto/16 :goto_22
- :cond_f9
- move v3, v4
- move v4, v6
- goto/16 :goto_15
-.end method
\ No newline at end of file
diff --git a/src/test/smali/type-confusion-regression3/Test.java b/src/test/smali/type-confusion-regression3/Test.java
deleted file mode 100644
index 0f1f0f2..0000000
--- a/src/test/smali/type-confusion-regression3/Test.java
+++ /dev/null
@@ -1,74 +0,0 @@
-// Copyright (c) 2016, 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.
-
-public class Test extends Throwable {
- public byte[] a;
-
- public Test(String s) {
- throw new RuntimeException("Test(Ljava/lang/String;");
- }
-
- public Test(int a, Test b) {
- throw new RuntimeException("Test(ILTest;)");
- }
-
- public Test() {
- }
-
- public long c() {
- throw new RuntimeException("Test.c()");
- }
-
- public Object valueAt(int i) {
- throw new RuntimeException("Test.valueAt(I)");
- }
-
- public void b(int i) {
- throw new RuntimeException("Test.b(I)");
- }
-
- public void b(byte[] a, int b, int c) {
- throw new RuntimeException("Test.b([BII)");
- }
-
- public void a() {
- throw new RuntimeException("Test.a()");
- }
-
- public void a(Test a) {
- throw new RuntimeException("Test.a(LTest;)");
- }
-
- public void a(Test a, int i) {
- throw new RuntimeException("Test.a(LTest;I)");
- }
-
- public boolean a(byte[] a, int b, int c, boolean d) {
- throw new RuntimeException("Test.a");
- }
-
- public void a(long a, int b, int c, int d, byte[] e) {
- throw new RuntimeException("Test.a(JIII[B)");
- }
-
- public void c(int i) {
- throw new RuntimeException("Test.c(I)");
- }
-
- public int n() {
- throw new RuntimeException("Test.n()");
- }
-
- public int size() {
- throw new RuntimeException("Test.size");
- }
-
- public static void main(String[] args) {
- try {
- new TestObject().a(new Test(), new Test());
- } catch (Exception e) {
- System.out.println(e);
- }
- }
-}
diff --git a/src/test/smali/type-confusion-regression3/TestObject.java b/src/test/smali/type-confusion-regression3/TestObject.java
deleted file mode 100644
index f20168c..0000000
--- a/src/test/smali/type-confusion-regression3/TestObject.java
+++ /dev/null
@@ -1,9 +0,0 @@
-// Copyright (c) 2016, 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.
-
-public class TestObject {
- public int a(Test a, Test b) {
- return 0;
- }
-}
diff --git a/src/test/smali/type-confusion-regression3/TestObject.smali b/src/test/smali/type-confusion-regression3/TestObject.smali
deleted file mode 100644
index 5b87a27..0000000
--- a/src/test/smali/type-confusion-regression3/TestObject.smali
+++ /dev/null
@@ -1,924 +0,0 @@
-# Copyright (c) 2016, 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.
-
-.class public final LTestObject;
-.super Ljava/lang/Object;
-
-.field private i:I
-.field private o:LTest;
-
-.method public constructor <init>()V
- .registers 1
- invoke-direct {p0}, Ljava/lang/Object;-><init>()V
- return-void
-.end method
-
-.method public final a(LTest;LTest;)I
- .registers 28
- .prologue
- :cond_0
- :goto_0
- move-object/from16 v0, p0
- iget v4, v0, LTestObject;->i:I
- packed-switch v4, :pswitch_data_60a
- move-object/from16 v0, p0
- iget v4, v0, LTestObject;->i:I
- const/4 v5, 0x3
- if-ne v4, v5, :cond_4ac
- move-object/from16 v0, p0
- iget-object v4, v0, LTestObject;->o:LTest;
- if-nez v4, :cond_431
- move-object/from16 v0, p0
- iget-object v11, v0, LTestObject;->o:LTest;
- const/4 v5, 0x0
- const-wide v8, 0x7fffffffffffffffL
- invoke-virtual {v11}, LTest;->size()I
- move-result v12
- const/4 v4, 0x0
- move v10, v4
- :goto_24
- if-ge v10, v12, :cond_3e8
- invoke-virtual {v11, v10}, LTest;->valueAt(I)Ljava/lang/Object;
- move-result-object v4
- check-cast v4, LTest;
- iget v6, v4, LTest;->e:I
- iget-object v7, v4, LTest;->a:LTest;
- iget v7, v7, LTest;->d:I
- if-eq v6, v7, :cond_5fe
- iget-object v6, v4, LTest;->a:LTest;
- iget-wide v6, v6, LTest;->b:J
- cmp-long v13, v6, v8
- if-gez v13, :cond_5fe
- move-wide/from16 v23, v6
- move-object v6, v4
- move-wide/from16 v4, v23
- :goto_41
- add-int/lit8 v7, v10, 0x1
- move v10, v7
- move-wide v8, v4
- move-object v5, v6
- goto :goto_24
- :pswitch_47
- move-object/from16 v0, p0
- iget v4, v0, LTestObject;->i:I
- if-nez v4, :cond_8a
- move-object/from16 v0, p0
- iget-object v4, v0, LTestObject;->o:LTest;
- iget-object v4, v4, LTest;->a:[B
- const/4 v5, 0x0
- const/16 v6, 0x8
- const/4 v7, 0x1
- move-object/from16 v0, p1
- invoke-virtual {v0, v4, v5, v6, v7}, LTest;->a([BIIZ)Z
- move-result v4
- if-nez v4, :cond_64
- const/4 v4, 0x0
- :goto_60
- if-nez v4, :cond_0
- const/4 v4, -0x1
- :goto_63
- return v4
- :cond_64
- const/16 v4, 0x8
- move-object/from16 v0, p0
- iput v4, v0, LTestObject;->i:I
- move-object/from16 v0, p0
- iget-object v4, v0, LTestObject;->o:LTest;
- const/4 v5, 0x0
- invoke-virtual {v4, v5}, LTest;->c(I)V
- move-object/from16 v0, p0
- iget-object v4, v0, LTestObject;->o:LTest;
- invoke-virtual {v4}, LTest;->h()J
- move-result-wide v4
- move-object/from16 v0, p0
- iput-wide v4, v0, LTestObject;->n:J
- move-object/from16 v0, p0
- iget-object v4, v0, LTestObject;->o:LTest;
- invoke-virtual {v4}, LTest;->j()I
- move-result v4
- move-object/from16 v0, p0
- iput v4, v0, LTestObject;->i:I
- :cond_8a
- move-object/from16 v0, p0
- iget-wide v4, v0, LTestObject;->n:J
- const-wide/16 v6, 0x1
- cmp-long v4, v4, v6
- if-nez v4, :cond_b9
- move-object/from16 v0, p0
- iget-object v4, v0, LTestObject;->o:LTest;
- iget-object v4, v4, LTest;->a:[B
- const/16 v5, 0x8
- const/16 v6, 0x8
- move-object/from16 v0, p1
- invoke-virtual {v0, v4, v5, v6}, LTest;->b([BII)V
- move-object/from16 v0, p0
- iget v4, v0, LTestObject;->i:I
- add-int/lit8 v4, v4, 0x8
- move-object/from16 v0, p0
- iput v4, v0, LTestObject;->i:I
- move-object/from16 v0, p0
- iget-object v4, v0, LTestObject;->o:LTest;
- invoke-virtual {v4}, LTest;->p()J
- move-result-wide v4
- move-object/from16 v0, p0
- iput-wide v4, v0, LTestObject;->n:J
- :cond_b9
- invoke-virtual/range {p1 .. p1}, LTest;->c()J
- move-result-wide v4
- move-object/from16 v0, p0
- iget v6, v0, LTestObject;->i:I
- int-to-long v6, v6
- sub-long v6, v4, v6
- move-object/from16 v0, p0
- iget v4, v0, LTestObject;->i:I
- sget v5, LTest;->J:I
- if-ne v4, v5, :cond_ec
- move-object/from16 v0, p0
- iget-object v4, v0, LTestObject;->o:LTest;
- invoke-virtual {v4}, LTest;->size()I
- move-result v8
- const/4 v4, 0x0
- move v5, v4
- :goto_d6
- if-ge v5, v8, :cond_ec
- move-object/from16 v0, p0
- iget-object v4, v0, LTestObject;->o:LTest;
- invoke-virtual {v4, v5}, LTest;->valueAt(I)Ljava/lang/Object;
- move-result-object v4
- check-cast v4, LTest;
- iget-object v4, v4, LTest;->a:LTest;
- iput-wide v6, v4, LTest;->c:J
- iput-wide v6, v4, LTest;->b:J
- add-int/lit8 v4, v5, 0x1
- move v5, v4
- goto :goto_d6
- :cond_ec
- move-object/from16 v0, p0
- iget v4, v0, LTestObject;->i:I
- sget v5, LTest;->h:I
- if-ne v4, v5, :cond_11e
- const/4 v4, 0x0
- move-object/from16 v0, p0
- iput-object v4, v0, LTestObject;->o:LTest;
- move-object/from16 v0, p0
- iget-wide v4, v0, LTestObject;->n:J
- add-long/2addr v4, v6
- move-object/from16 v0, p0
- iput-wide v4, v0, LTestObject;->q:J
- move-object/from16 v0, p0
- iget-boolean v4, v0, LTestObject;->w:Z
- if-nez v4, :cond_116
- move-object/from16 v0, p0
- iget-object v4, v0, LTestObject;->o:LTest;
- sget-object v5, LTest;->f:LTest;
- invoke-virtual {v4, v5}, LTest;->a(LTest;)V
- const/4 v4, 0x1
- move-object/from16 v0, p0
- iput-boolean v4, v0, LTestObject;->w:Z
- :cond_116
- const/4 v4, 0x2
- move-object/from16 v0, p0
- iput v4, v0, LTestObject;->i:I
- :goto_11b
- const/4 v4, 0x1
- goto/16 :goto_60
- :cond_11e
- move-object/from16 v0, p0
- iget v4, v0, LTestObject;->i:I
- sget v5, LTest;->A:I
- if-eq v4, v5, :cond_146
- sget v5, LTest;->C:I
- if-eq v4, v5, :cond_146
- sget v5, LTest;->D:I
- if-eq v4, v5, :cond_146
- sget v5, LTest;->E:I
- if-eq v4, v5, :cond_146
- sget v5, LTest;->F:I
- if-eq v4, v5, :cond_146
- sget v5, LTest;->J:I
- if-eq v4, v5, :cond_146
- sget v5, LTest;->K:I
- if-eq v4, v5, :cond_146
- sget v5, LTest;->L:I
- if-eq v4, v5, :cond_146
- sget v5, LTest;->O:I
- if-ne v4, v5, :cond_178
- :cond_146
- const/4 v4, 0x1
- :goto_147
- if-eqz v4, :cond_17e
- invoke-virtual/range {p1 .. p1}, LTest;->c()J
- move-result-wide v4
- move-object/from16 v0, p0
- iget-wide v6, v0, LTestObject;->n:J
- add-long/2addr v4, v6
- const-wide/16 v6, 0x8
- sub-long/2addr v4, v6
- move-object/from16 v0, p0
- iget-object v6, v0, LTestObject;->k:Ljava/util/Stack;
- new-instance v7, LTest;
- move-object/from16 v0, p0
- iget v8, v0, LTestObject;->i:I
- invoke-direct {v7, v8, v4, v5}, LTest;-><init>(IJ)V
- invoke-virtual {v6, v7}, Ljava/util/Stack;->add(Ljava/lang/Object;)Z
- move-object/from16 v0, p0
- iget-wide v6, v0, LTestObject;->n:J
- move-object/from16 v0, p0
- iget v8, v0, LTestObject;->i:I
- int-to-long v8, v8
- cmp-long v6, v6, v8
- if-nez v6, :cond_17a
- move-object/from16 v0, p0
- invoke-direct {v0, v4, v5}, LTestObject;->a(J)V
- goto :goto_11b
- :cond_178
- const/4 v4, 0x0
- goto :goto_147
- :cond_17a
- invoke-direct/range {p0 .. p0}, LTestObject;->a()V
- goto :goto_11b
- :cond_17e
- move-object/from16 v0, p0
- iget v4, v0, LTestObject;->i:I
- sget v5, LTest;->R:I
- if-eq v4, v5, :cond_1d2
- sget v5, LTest;->Q:I
- if-eq v4, v5, :cond_1d2
- sget v5, LTest;->B:I
- if-eq v4, v5, :cond_1d2
- sget v5, LTest;->z:I
- if-eq v4, v5, :cond_1d2
- sget v5, LTest;->S:I
- if-eq v4, v5, :cond_1d2
- sget v5, LTest;->v:I
- if-eq v4, v5, :cond_1d2
- sget v5, LTest;->w:I
- if-eq v4, v5, :cond_1d2
- sget v5, LTest;->N:I
- if-eq v4, v5, :cond_1d2
- sget v5, LTest;->x:I
- if-eq v4, v5, :cond_1d2
- sget v5, LTest;->y:I
- if-eq v4, v5, :cond_1d2
- sget v5, LTest;->T:I
- if-eq v4, v5, :cond_1d2
- sget v5, LTest;->ab:I
- if-eq v4, v5, :cond_1d2
- sget v5, LTest;->ac:I
- if-eq v4, v5, :cond_1d2
- sget v5, LTest;->ag:I
- if-eq v4, v5, :cond_1d2
- sget v5, LTest;->ad:I
- if-eq v4, v5, :cond_1d2
- sget v5, LTest;->ae:I
- if-eq v4, v5, :cond_1d2
- sget v5, LTest;->af:I
- if-eq v4, v5, :cond_1d2
- sget v5, LTest;->P:I
- if-eq v4, v5, :cond_1d2
- sget v5, LTest;->M:I
- if-eq v4, v5, :cond_1d2
- sget v5, LTest;->aD:I
- if-ne v4, v5, :cond_1e5
- :cond_1d2
- const/4 v4, 0x1
- :goto_1d3
- if-eqz v4, :cond_222
- move-object/from16 v0, p0
- iget v4, v0, LTestObject;->i:I
- const/16 v5, 0x8
- if-eq v4, v5, :cond_1e7
- new-instance v4, LTest;
- const-string v5, "a"
- invoke-direct {v4, v5}, LTest;-><init>(Ljava/lang/String;)V
- throw v4
- :cond_1e5
- const/4 v4, 0x0
- goto :goto_1d3
- :cond_1e7
- move-object/from16 v0, p0
- iget-wide v4, v0, LTestObject;->n:J
- const-wide/32 v6, 0x7fffffff
- cmp-long v4, v4, v6
- if-lez v4, :cond_1fa
- new-instance v4, LTest;
- const-string v5, "a"
- invoke-direct {v4, v5}, LTest;-><init>(Ljava/lang/String;)V
- throw v4
- :cond_1fa
- new-instance v4, LTest;
- move-object/from16 v0, p0
- iget-wide v6, v0, LTestObject;->n:J
- long-to-int v5, v6
- invoke-direct {v4, v5}, LTest;-><init>(I)V
- move-object/from16 v0, p0
- iput-object v4, v0, LTestObject;->o:LTest;
- move-object/from16 v0, p0
- iget-object v4, v0, LTestObject;->o:LTest;
- iget-object v4, v4, LTest;->a:[B
- const/4 v5, 0x0
- move-object/from16 v0, p0
- iget-object v6, v0, LTestObject;->o:LTest;
- iget-object v6, v6, LTest;->a:[B
- const/4 v7, 0x0
- const/16 v8, 0x8
- invoke-static {v4, v5, v6, v7, v8}, Ljava/lang/System;->arraycopy(Ljava/lang/Object;ILjava/lang/Object;II)V
- const/4 v4, 0x1
- move-object/from16 v0, p0
- iput v4, v0, LTestObject;->i:I
- goto/16 :goto_11b
- :cond_222
- move-object/from16 v0, p0
- iget-wide v4, v0, LTestObject;->n:J
- const-wide/32 v6, 0x7fffffff
- cmp-long v4, v4, v6
- if-lez v4, :cond_235
- new-instance v4, LTest;
- const-string v5, "a"
- invoke-direct {v4, v5}, LTest;-><init>(Ljava/lang/String;)V
- throw v4
- :cond_235
- const/4 v4, 0x0
- move-object/from16 v0, p0
- iput-object v4, v0, LTestObject;->o:LTest;
- const/4 v4, 0x1
- move-object/from16 v0, p0
- iput v4, v0, LTestObject;->i:I
- goto/16 :goto_11b
- :pswitch_241
- move-object/from16 v0, p0
- iget-wide v4, v0, LTestObject;->n:J
- long-to-int v4, v4
- move-object/from16 v0, p0
- iget v5, v0, LTestObject;->i:I
- sub-int/2addr v4, v5
- move-object/from16 v0, p0
- iget-object v5, v0, LTestObject;->o:LTest;
- if-eqz v5, :cond_368
- move-object/from16 v0, p0
- iget-object v5, v0, LTestObject;->o:LTest;
- iget-object v5, v5, LTest;->a:[B
- const/16 v6, 0x8
- move-object/from16 v0, p1
- invoke-virtual {v0, v5, v6, v4}, LTest;->b([BII)V
- new-instance v5, LTest;
- move-object/from16 v0, p0
- iget v4, v0, LTestObject;->i:I
- move-object/from16 v0, p0
- iget-object v6, v0, LTestObject;->o:LTest;
- invoke-direct {v5, v4, v6}, LTest;-><init>(ILTest;)V
- invoke-virtual/range {p1 .. p1}, LTest;->c()J
- move-result-wide v10
- move-object/from16 v0, p0
- iget-object v4, v0, LTestObject;->k:Ljava/util/Stack;
- invoke-virtual {v4}, Ljava/util/Stack;->isEmpty()Z
- move-result v4
- if-nez v4, :cond_291
- move-object/from16 v0, p0
- iget-object v4, v0, LTestObject;->k:Ljava/util/Stack;
- invoke-virtual {v4}, Ljava/util/Stack;->peek()Ljava/lang/Object;
- move-result-object v4
- check-cast v4, LTest;
- invoke-virtual {v4, v5}, LTest;->a(LTest;)V
- :cond_286
- :goto_286
- invoke-virtual/range {p1 .. p1}, LTest;->c()J
- move-result-wide v4
- move-object/from16 v0, p0
- invoke-direct {v0, v4, v5}, LTestObject;->a(J)V
- goto/16 :goto_0
- :cond_291
- iget v4, v5, LTest;->aL:I
- sget v6, LTest;->z:I
- if-ne v4, v6, :cond_359
- iget-object v0, v5, LTest;->aM:LTest;
- move-object/from16 v16, v0
- const/16 v4, 0x8
- move-object/from16 v0, v16
- invoke-virtual {v0, v4}, LTest;->c(I)V
- invoke-virtual/range {v16 .. v16}, LTest;->j()I
- move-result v4
- invoke-static {v4}, LTest;->a(I)I
- move-result v4
- const/4 v5, 0x4
- move-object/from16 v0, v16
- invoke-virtual {v0, v5}, LTest;->d(I)V
- invoke-virtual/range {v16 .. v16}, LTest;->h()J
- move-result-wide v8
- if-nez v4, :cond_304
- invoke-virtual/range {v16 .. v16}, LTest;->h()J
- move-result-wide v6
- invoke-virtual/range {v16 .. v16}, LTest;->h()J
- move-result-wide v4
- add-long/2addr v4, v10
- move-wide v10, v4
- move-wide v4, v6
- :goto_2c1
- const/4 v6, 0x2
- move-object/from16 v0, v16
- invoke-virtual {v0, v6}, LTest;->d(I)V
- invoke-virtual/range {v16 .. v16}, LTest;->e()I
- move-result v17
- move/from16 v0, v17
- new-array v0, v0, [I
- move-object/from16 v18, v0
- move/from16 v0, v17
- new-array v0, v0, [J
- move-object/from16 v19, v0
- move/from16 v0, v17
- new-array v0, v0, [J
- move-object/from16 v20, v0
- move/from16 v0, v17
- new-array v0, v0, [J
- move-object/from16 v21, v0
- const-wide/32 v6, 0xf4240
- invoke-static/range {v4 .. v9}, LTest;->a(JJJ)J
- move-result-wide v12
- const/4 v6, 0x0
- move-wide v14, v10
- move v10, v6
- move-wide v6, v4
- move-wide v4, v12
- :goto_2ef
- move/from16 v0, v17
- if-ge v10, v0, :cond_33e
- invoke-virtual/range {v16 .. v16}, LTest;->j()I
- move-result v11
- const/high16 v12, -0x80000000
- and-int/2addr v12, v11
- if-eqz v12, :cond_310
- new-instance v4, LTest;
- const-string v5, "a"
- invoke-direct {v4, v5}, LTest;-><init>(Ljava/lang/String;)V
- throw v4
- :cond_304
- invoke-virtual/range {v16 .. v16}, LTest;->p()J
- move-result-wide v6
- invoke-virtual/range {v16 .. v16}, LTest;->p()J
- move-result-wide v4
- add-long/2addr v4, v10
- move-wide v10, v4
- move-wide v4, v6
- goto :goto_2c1
- :cond_310
- invoke-virtual/range {v16 .. v16}, LTest;->h()J
- move-result-wide v12
- const v22, 0x7fffffff
- and-int v11, v11, v22
- aput v11, v18, v10
- aput-wide v14, v19, v10
- aput-wide v4, v21, v10
- add-long v4, v6, v12
- const-wide/32 v6, 0xf4240
- invoke-static/range {v4 .. v9}, LTest;->a(JJJ)J
- move-result-wide v12
- aget-wide v6, v21, v10
- sub-long v6, v12, v6
- aput-wide v6, v20, v10
- const/4 v6, 0x4
- move-object/from16 v0, v16
- invoke-virtual {v0, v6}, LTest;->d(I)V
- aget v6, v18, v10
- int-to-long v6, v6
- add-long/2addr v14, v6
- add-int/lit8 v6, v10, 0x1
- move v10, v6
- move-wide v6, v4
- move-wide v4, v12
- goto :goto_2ef
- :cond_33e
- new-instance v4, LTest;
- move-object/from16 v0, v18
- move-object/from16 v1, v19
- move-object/from16 v2, v20
- move-object/from16 v3, v21
- invoke-direct {v4, v0, v1, v2, v3}, LTest;-><init>([I[J[J[J)V
- move-object/from16 v0, p0
- iget-object v5, v0, LTestObject;->o:LTest;
- invoke-virtual {v5, v4}, LTest;->a(LTest;)V
- const/4 v4, 0x1
- move-object/from16 v0, p0
- iput-boolean v4, v0, LTestObject;->w:Z
- goto/16 :goto_286
- :cond_359
- iget v4, v5, LTest;->aL:I
- sget v6, LTest;->aD:I
- if-ne v4, v6, :cond_286
- iget-object v4, v5, LTest;->aM:LTest;
- move-object/from16 v0, p0
- invoke-virtual {v0, v4}, LTestObject;->a(LTest;)V
- goto/16 :goto_286
- :cond_368
- move-object/from16 v0, p1
- invoke-virtual {v0, v4}, LTest;->b(I)V
- goto/16 :goto_286
- :pswitch_36f
- const/4 v5, 0x0
- const-wide v6, 0x7fffffffffffffffL
- move-object/from16 v0, p0
- iget-object v4, v0, LTestObject;->o:LTest;
- invoke-virtual {v4}, LTest;->size()I
- move-result v9
- const/4 v4, 0x0
- move v8, v4
- :goto_37f
- if-ge v8, v9, :cond_3b1
- move-object/from16 v0, p0
- iget-object v4, v0, LTestObject;->o:LTest;
- invoke-virtual {v4, v8}, LTest;->valueAt(I)Ljava/lang/Object;
- move-result-object v4
- check-cast v4, LTest;
- iget-object v4, v4, LTest;->a:LTest;
- iget-boolean v10, v4, LTest;->m:Z
- if-eqz v10, :cond_602
- iget-wide v10, v4, LTest;->c:J
- cmp-long v10, v10, v6
- if-gez v10, :cond_602
- iget-wide v6, v4, LTest;->c:J
- move-object/from16 v0, p0
- iget-object v4, v0, LTestObject;->o:LTest;
- invoke-virtual {v4, v8}, LTest;->valueAt(I)Ljava/lang/Object;
- move-result-object v4
- check-cast v4, LTest;
- move-wide/from16 v23, v6
- move-object v6, v4
- move-wide/from16 v4, v23
- :goto_3a8
- add-int/lit8 v7, v8, 0x1
- move v8, v7
- move-wide/from16 v23, v4
- move-object v5, v6
- move-wide/from16 v6, v23
- goto :goto_37f
- :cond_3b1
- if-nez v5, :cond_3ba
- const/4 v4, 0x3
- move-object/from16 v0, p0
- iput v4, v0, LTestObject;->i:I
- goto/16 :goto_0
- :cond_3ba
- invoke-virtual/range {p1 .. p1}, LTest;->c()J
- move-result-wide v8
- sub-long/2addr v6, v8
- long-to-int v4, v6
- if-gez v4, :cond_3ca
- new-instance v4, LTest;
- const-string v5, "a"
- invoke-direct {v4, v5}, LTest;-><init>(Ljava/lang/String;)V
- throw v4
- :cond_3ca
- move-object/from16 v0, p1
- invoke-virtual {v0, v4}, LTest;->b(I)V
- iget-object v4, v5, LTest;->a:LTest;
- iget-object v5, v4, LTest;->l:LTest;
- iget-object v5, v5, LTest;->a:[B
- const/4 v6, 0x0
- iget v7, v4, LTest;->k:I
- move-object/from16 v0, p1
- invoke-virtual {v0, v5, v6, v7}, LTest;->b([BII)V
- iget-object v5, v4, LTest;->l:LTest;
- const/4 v6, 0x0
- invoke-virtual {v5, v6}, LTest;->c(I)V
- const/4 v5, 0x0
- iput-boolean v5, v4, LTest;->m:Z
- goto/16 :goto_0
- :cond_3e8
- move-object/from16 v0, p0
- iput-object v5, v0, LTestObject;->o:LTest;
- move-object/from16 v0, p0
- iget-object v4, v0, LTestObject;->o:LTest;
- if-nez v4, :cond_414
- move-object/from16 v0, p0
- iget-wide v4, v0, LTestObject;->q:J
- invoke-virtual/range {p1 .. p1}, LTest;->c()J
- move-result-wide v6
- sub-long/2addr v4, v6
- long-to-int v4, v4
- if-gez v4, :cond_406
- new-instance v4, LTest;
- const-string v5, ""
- invoke-direct {v4, v5}, LTest;-><init>(Ljava/lang/String;)V
- throw v4
- :cond_406
- move-object/from16 v0, p1
- invoke-virtual {v0, v4}, LTest;->b(I)V
- invoke-direct/range {p0 .. p0}, LTestObject;->a()V
- const/4 v4, 0x0
- :goto_40f
- if-eqz v4, :cond_0
- const/4 v4, 0x0
- goto/16 :goto_63
- :cond_414
- move-object/from16 v0, p0
- iget-object v4, v0, LTestObject;->o:LTest;
- iget-object v4, v4, LTest;->a:LTest;
- iget-wide v4, v4, LTest;->b:J
- invoke-virtual/range {p1 .. p1}, LTest;->c()J
- move-result-wide v6
- sub-long/2addr v4, v6
- long-to-int v4, v4
- if-gez v4, :cond_42c
- new-instance v4, LTest;
- const-string v5, ""
- invoke-direct {v4, v5}, LTest;-><init>(Ljava/lang/String;)V
- throw v4
- :cond_42c
- move-object/from16 v0, p1
- invoke-virtual {v0, v4}, LTest;->b(I)V
- :cond_431
- move-object/from16 v0, p0
- iget-object v4, v0, LTestObject;->o:LTest;
- iget-object v4, v4, LTest;->a:LTest;
- iget-object v4, v4, LTest;->e:[I
- move-object/from16 v0, p0
- iget-object v5, v0, LTestObject;->o:LTest;
- iget v5, v5, LTest;->e:I
- aget v4, v4, v5
- move-object/from16 v0, p0
- iput v4, v0, LTestObject;->i:I
- move-object/from16 v0, p0
- iget-object v4, v0, LTestObject;->o:LTest;
- iget-object v4, v4, LTest;->a:LTest;
- iget-boolean v4, v4, LTest;->i:Z
- if-eqz v4, :cond_553
- move-object/from16 v0, p0
- iget-object v5, v0, LTestObject;->o:LTest;
- iget-object v6, v5, LTest;->a:LTest;
- iget-object v7, v6, LTest;->l:LTest;
- iget-object v4, v6, LTest;->a:LTest;
- iget v4, v4, LTest;->a:I
- iget-object v8, v6, LTest;->n:LTest;
- if-eqz v8, :cond_534
- iget-object v4, v6, LTest;->n:LTest;
- :goto_461
- iget v8, v4, LTest;->a:I
- iget-object v4, v6, LTest;->j:[Z
- iget v6, v5, LTest;->e:I
- aget-boolean v6, v4, v6
- move-object/from16 v0, p0
- iget-object v4, v0, LTestObject;->o:LTest;
- iget-object v9, v4, LTest;->a:[B
- const/4 v10, 0x0
- if-eqz v6, :cond_53c
- const/16 v4, 0x80
- :goto_474
- or-int/2addr v4, v8
- int-to-byte v4, v4
- aput-byte v4, v9, v10
- move-object/from16 v0, p0
- iget-object v4, v0, LTestObject;->o:LTest;
- const/4 v9, 0x0
- invoke-virtual {v4, v9}, LTest;->c(I)V
- iget-object v4, v5, LTest;->b:LTest;
- move-object/from16 v0, p0
- iget-object v5, v0, LTestObject;->o:LTest;
- const/4 v9, 0x1
- invoke-virtual {v4, v5, v9}, LTest;->a(LTest;I)V
- invoke-virtual {v4, v7, v8}, LTest;->a(LTest;I)V
- if-nez v6, :cond_53f
- add-int/lit8 v4, v8, 0x1
- :goto_491
- move-object/from16 v0, p0
- iput v4, v0, LTestObject;->i:I
- move-object/from16 v0, p0
- iget v4, v0, LTestObject;->i:I
- move-object/from16 v0, p0
- iget v5, v0, LTestObject;->i:I
- add-int/2addr v4, v5
- move-object/from16 v0, p0
- iput v4, v0, LTestObject;->i:I
- :goto_4a2
- const/4 v4, 0x4
- move-object/from16 v0, p0
- iput v4, v0, LTestObject;->i:I
- const/4 v4, 0x0
- move-object/from16 v0, p0
- iput v4, v0, LTestObject;->i:I
- :cond_4ac
- move-object/from16 v0, p0
- iget-object v4, v0, LTestObject;->o:LTest;
- iget-object v12, v4, LTest;->a:LTest;
- move-object/from16 v0, p0
- iget-object v4, v0, LTestObject;->o:LTest;
- iget-object v9, v4, LTest;->c:LTest;
- move-object/from16 v0, p0
- iget-object v4, v0, LTestObject;->o:LTest;
- iget-object v5, v4, LTest;->b:LTest;
- move-object/from16 v0, p0
- iget-object v4, v0, LTestObject;->o:LTest;
- iget v8, v4, LTest;->e:I
- iget v4, v9, LTest;->n:I
- const/4 v6, -0x1
- if-eq v4, v6, :cond_57a
- move-object/from16 v0, p0
- iget-object v4, v0, LTestObject;->o:LTest;
- iget-object v4, v4, LTest;->a:[B
- const/4 v6, 0x0
- const/4 v7, 0x0
- aput-byte v7, v4, v6
- const/4 v6, 0x1
- const/4 v7, 0x0
- aput-byte v7, v4, v6
- const/4 v6, 0x2
- const/4 v7, 0x0
- aput-byte v7, v4, v6
- iget v4, v9, LTest;->n:I
- iget v6, v9, LTest;->n:I
- rsub-int/lit8 v6, v6, 0x4
- :goto_4e1
- move-object/from16 v0, p0
- iget v7, v0, LTestObject;->i:I
- move-object/from16 v0, p0
- iget v10, v0, LTestObject;->i:I
- if-ge v7, v10, :cond_59e
- move-object/from16 v0, p0
- iget v7, v0, LTestObject;->i:I
- if-nez v7, :cond_55a
- move-object/from16 v0, p0
- iget-object v7, v0, LTestObject;->o:LTest;
- iget-object v7, v7, LTest;->a:[B
- move-object/from16 v0, p1
- invoke-virtual {v0, v7, v6, v4}, LTest;->b([BII)V
- move-object/from16 v0, p0
- iget-object v7, v0, LTestObject;->o:LTest;
- const/4 v10, 0x0
- invoke-virtual {v7, v10}, LTest;->c(I)V
- move-object/from16 v0, p0
- iget-object v7, v0, LTestObject;->o:LTest;
- invoke-virtual {v7}, LTest;->n()I
- move-result v7
- move-object/from16 v0, p0
- iput v7, v0, LTestObject;->i:I
- move-object/from16 v0, p0
- iget-object v7, v0, LTestObject;->o:LTest;
- const/4 v10, 0x0
- invoke-virtual {v7, v10}, LTest;->c(I)V
- move-object/from16 v0, p0
- iget-object v7, v0, LTestObject;->o:LTest;
- const/4 v10, 0x4
- invoke-virtual {v5, v7, v10}, LTest;->a(LTest;I)V
- move-object/from16 v0, p0
- iget v7, v0, LTestObject;->i:I
- add-int/lit8 v7, v7, 0x4
- move-object/from16 v0, p0
- iput v7, v0, LTestObject;->i:I
- move-object/from16 v0, p0
- iget v7, v0, LTestObject;->i:I
- add-int/2addr v7, v6
- move-object/from16 v0, p0
- iput v7, v0, LTestObject;->i:I
- goto :goto_4e1
- :cond_534
- iget-object v8, v5, LTest;->c:LTest;
- iget-object v8, v8, LTest;->k:[LTest;
- aget-object v4, v8, v4
- goto/16 :goto_461
- :cond_53c
- const/4 v4, 0x0
- goto/16 :goto_474
- :cond_53f
- invoke-virtual {v7}, LTest;->e()I
- move-result v5
- const/4 v6, -0x2
- invoke-virtual {v7, v6}, LTest;->d(I)V
- mul-int/lit8 v5, v5, 0x6
- add-int/lit8 v5, v5, 0x2
- invoke-virtual {v4, v7, v5}, LTest;->a(LTest;I)V
- add-int/lit8 v4, v8, 0x1
- add-int/2addr v4, v5
- goto/16 :goto_491
- :cond_553
- const/4 v4, 0x0
- move-object/from16 v0, p0
- iput v4, v0, LTestObject;->i:I
- goto/16 :goto_4a2
- :cond_55a
- move-object/from16 v0, p0
- iget v7, v0, LTestObject;->i:I
- const/4 v10, 0x0
- move-object/from16 v0, p1
- invoke-virtual {v5, v0, v7, v10}, LTest;->a(LTest;IZ)I
- move-result v7
- move-object/from16 v0, p0
- iget v10, v0, LTestObject;->i:I
- add-int/2addr v10, v7
- move-object/from16 v0, p0
- iput v10, v0, LTestObject;->i:I
- move-object/from16 v0, p0
- iget v10, v0, LTestObject;->i:I
- sub-int v7, v10, v7
- move-object/from16 v0, p0
- iput v7, v0, LTestObject;->i:I
- goto/16 :goto_4e1
- :cond_57a
- :goto_57a
- move-object/from16 v0, p0
- iget v4, v0, LTestObject;->i:I
- move-object/from16 v0, p0
- iget v6, v0, LTestObject;->i:I
- if-ge v4, v6, :cond_59e
- move-object/from16 v0, p0
- iget v4, v0, LTestObject;->i:I
- move-object/from16 v0, p0
- iget v6, v0, LTestObject;->i:I
- sub-int/2addr v4, v6
- const/4 v6, 0x0
- move-object/from16 v0, p1
- invoke-virtual {v5, v0, v4, v6}, LTest;->a(LTest;IZ)I
- move-result v4
- move-object/from16 v0, p0
- iget v6, v0, LTestObject;->i:I
- add-int/2addr v4, v6
- move-object/from16 v0, p0
- iput v4, v0, LTestObject;->i:I
- goto :goto_57a
- :cond_59e
- iget-object v4, v12, LTest;->g:[J
- aget-wide v6, v4, v8
- iget-object v4, v12, LTest;->f:[I
- aget v4, v4, v8
- int-to-long v10, v4
- add-long/2addr v6, v10
- const-wide/16 v10, 0x3e8
- mul-long/2addr v6, v10
- iget-boolean v4, v12, LTest;->i:Z
- if-eqz v4, :cond_5f3
- const/4 v4, 0x2
- :goto_5b0
- iget-object v10, v12, LTest;->h:[Z
- aget-boolean v8, v10, v8
- if-eqz v8, :cond_5f5
- const/4 v8, 0x1
- :goto_5b7
- or-int/2addr v8, v4
- iget-object v4, v12, LTest;->a:LTest;
- iget v4, v4, LTest;->a:I
- const/4 v11, 0x0
- iget-boolean v10, v12, LTest;->i:Z
- if-eqz v10, :cond_5ca
- iget-object v10, v12, LTest;->n:LTest;
- if-eqz v10, :cond_5f7
- iget-object v4, v12, LTest;->n:LTest;
- iget-object v4, v4, LTest;->b:[B
- :goto_5c9
- move-object v11, v4
- :cond_5ca
- move-object/from16 v0, p0
- iget v9, v0, LTestObject;->i:I
- const/4 v10, 0x0
- invoke-virtual/range {v5 .. v11}, LTest;->a(JIII[B)V
- move-object/from16 v0, p0
- iget-object v4, v0, LTestObject;->o:LTest;
- iget v5, v4, LTest;->e:I
- add-int/lit8 v5, v5, 0x1
- iput v5, v4, LTest;->e:I
- move-object/from16 v0, p0
- iget-object v4, v0, LTestObject;->o:LTest;
- iget v4, v4, LTest;->e:I
- iget v5, v12, LTest;->d:I
- if-ne v4, v5, :cond_5eb
- const/4 v4, 0x0
- move-object/from16 v0, p0
- iput-object v4, v0, LTestObject;->o:LTest;
- :cond_5eb
- const/4 v4, 0x3
- move-object/from16 v0, p0
- iput v4, v0, LTestObject;->i:I
- const/4 v4, 0x1
- goto/16 :goto_40f
- :cond_5f3
- const/4 v4, 0x0
- goto :goto_5b0
- :cond_5f5
- const/4 v8, 0x0
- goto :goto_5b7
- :cond_5f7
- iget-object v9, v9, LTest;->k:[LTest;
- aget-object v4, v9, v4
- iget-object v4, v4, LTest;->b:[B
- goto :goto_5c9
- :cond_5fe
- move-object v6, v5
- move-wide v4, v8
- goto/16 :goto_41
- :cond_602
- move-wide/from16 v23, v6
- move-object v6, v5
- move-wide/from16 v4, v23
- goto/16 :goto_3a8
- nop
- :pswitch_data_60a
- .packed-switch 0x0
- :pswitch_47
- :pswitch_241
- :pswitch_36f
- .end packed-switch
-.end method
-
-.method private final a(J)V
- .registers 3
- .prologue
- return-void
-.end method
-
diff --git a/src/test/smali/type-confusion-regression4/Test.java b/src/test/smali/type-confusion-regression4/Test.java
deleted file mode 100644
index 252d6c8..0000000
--- a/src/test/smali/type-confusion-regression4/Test.java
+++ /dev/null
@@ -1,40 +0,0 @@
-// Copyright (c) 2016, 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.
-
-public class Test {
-
- public boolean b = false;
- public Test a = null;
-
- public Test() {
- }
-
- public Test(int i, Test a) {
- throw new RuntimeException("Test(ILTest;)");
- }
-
- public int nextIndex() {
- throw new RuntimeException("nextIndex()");
- }
-
- public int previousIndex() {
- throw new RuntimeException("previousIndex()");
- }
-
- public boolean hasNext() {
- throw new RuntimeException("hasNext()");
- }
-
- public boolean hasPrevious() {
- throw new RuntimeException("hasPrevious()");
- }
-
- public static void main(String[] args) {
- try {
- new TestObject().a(new Test(), new Test());
- } catch (Exception e) {
- System.out.println(e);
- }
- }
-}
diff --git a/src/test/smali/type-confusion-regression4/TestObject.java b/src/test/smali/type-confusion-regression4/TestObject.java
deleted file mode 100644
index 340e820..0000000
--- a/src/test/smali/type-confusion-regression4/TestObject.java
+++ /dev/null
@@ -1,9 +0,0 @@
-// Copyright (c) 2016, 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.
-
-public class TestObject {
- public final Test a(Test t0, Test t1) {
- return null;
- }
-}
diff --git a/src/test/smali/type-confusion-regression4/TestObject.smali b/src/test/smali/type-confusion-regression4/TestObject.smali
deleted file mode 100644
index 7c84a9e..0000000
--- a/src/test/smali/type-confusion-regression4/TestObject.smali
+++ /dev/null
@@ -1,88 +0,0 @@
-# Copyright (c) 2016, 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.
-
-.class public final LTestObject;
-.super Ljava/lang/Object;
-
-.method public constructor <init>()V
- .registers 1
- invoke-direct {p0}, Ljava/lang/Object;-><init>()V
- return-void
-.end method
-
-.method public final a(LTest;LTest;)LTest;
- .registers 7
- .prologue
- const/4 v0, 0x0
- if-eqz p1, :cond_23
- iget-boolean v1, p1, LTest;->b:Z
- if-eqz v1, :cond_35
- iget-object v1, p0, LTest;->f:LTest;
- iget-object v1, v1, LTest;->b:LTest;
- invoke-virtual {v1}, LTest;->hasPrevious()Z
- move-result v1
- if-eqz v1, :cond_35
- new-instance p2, LTest;
- const/4 v1, 0x1
- iget-object v2, p0, LTest;->f:LTest;
- iget-object v3, v2, LTest;->b:LTest;
- invoke-virtual {v3}, LTest;->hasPrevious()Z
- move-result v3
- if-nez v3, :cond_24
- :goto_1e
- iget-object v0, v0, LTest;->a:LTest;
- invoke-direct {p2, v1, v0}, LTest;-><init>(ILTest;)V
- :cond_23
- :goto_23
- return-object p2
- :cond_24
- iget-object v0, v2, LTest;->b:LTest;
- iget-object v0, v0, LTest;->a:Ljava/util/ArrayList;
- iget-object v2, v2, LTest;->b:LTest;
- invoke-virtual {v2}, LTest;->previousIndex()I
- move-result v2
- invoke-interface {v0, v2}, Ljava/util/List;->get(I)Ljava/lang/Object;
- move-result-object v0
- check-cast v0, LTest;
- goto :goto_1e
- :cond_35
- iget-boolean v1, p1, LTest;->b:Z
- if-eqz v1, :cond_67
- iget-object v1, p0, LTest;->f:LTest;
- iget-object v1, v1, LTest;->b:LTest;
- invoke-virtual {v1}, LTest;->hasNext()Z
- move-result v1
- if-eqz v1, :cond_67
- new-instance p2, LTest;
- const/4 v1, 0x2
- iget-object v2, p0, LTest;->f:LTest;
- iget-object v3, v2, LTest;->b:LTest;
- invoke-virtual {v3}, LTest;->hasNext()Z
- move-result v3
- if-nez v3, :cond_56
- :goto_50
- iget-object v0, v0, LTest;->a:LTest;
- invoke-direct {p2, v1, v0}, LTest;-><init>(ILTest;)V
- goto :goto_23
- :cond_56
- iget-object v0, v2, LTest;->b:LTest;
- iget-object v0, v0, LTest;->a:Ljava/util/ArrayList;
- iget-object v2, v2, LTest;->b:LTest;
- invoke-virtual {v2}, LTest;->nextIndex()I
- move-result v2
- invoke-interface {v0, v2}, Ljava/util/List;->get(I)Ljava/lang/Object;
- move-result-object v0
- check-cast v0, LTest;
- goto :goto_50
- :cond_67
- iget-object v0, p1, LTest;->a:LTest;
- if-eqz v0, :cond_23
- new-instance p2, LTest;
- const/4 v0, 0x0
- new-instance v1, LTest;
- iget-object v2, p1, LTest;->a:LTest;
- invoke-direct {v1, v2}, LTest;-><init>(LTest;)V
- invoke-direct {p2, v0, v1}, LTest;-><init>(ILTest;)V
- goto :goto_23
-.end method
\ No newline at end of file
diff --git a/src/test/smali/type-confusion-regression5/Test.java b/src/test/smali/type-confusion-regression5/Test.java
deleted file mode 100644
index e450d6b..0000000
--- a/src/test/smali/type-confusion-regression5/Test.java
+++ /dev/null
@@ -1,50 +0,0 @@
-// Copyright (c) 2016, 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.
-
-public class Test {
-
- public int getId() {
- throw new RuntimeException("getId()I");
- }
-
- public boolean a() {
- throw new RuntimeException("a()Z");
- }
-
- public void a(Test t0) {
- throw new RuntimeException("a(LTest;)V");
- }
-
- public void a(Test t0, Test t1) {
- throw new RuntimeException("a(LTest;LTest;)V");
- }
-
- public static boolean b(Test t0, Test t1) {
- throw new RuntimeException("b()Z");
- }
-
- public Test c() {
- throw new RuntimeException("c()LTest;");
- }
-
- public static boolean c(Test t) {
- throw new RuntimeException("c(LTest;)Z");
- }
-
- public void g() {
- throw new RuntimeException("g()V");
- }
-
- public boolean pageScroll(int i) {
- throw new RuntimeException("pageScroll(I)Z");
- }
-
- public static void main(String[] args) {
- try {
- new TestObject().onClick(new Test());
- } catch (Exception e) {
- System.out.println(e);
- }
- }
-}
diff --git a/src/test/smali/type-confusion-regression5/TestObject.java b/src/test/smali/type-confusion-regression5/TestObject.java
deleted file mode 100644
index a3cc1f9..0000000
--- a/src/test/smali/type-confusion-regression5/TestObject.java
+++ /dev/null
@@ -1,8 +0,0 @@
-// Copyright (c) 2016, 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.
-
-public class TestObject {
- public final void onClick(Test t) {
- }
-}
diff --git a/src/test/smali/type-confusion-regression5/TestObject.smali b/src/test/smali/type-confusion-regression5/TestObject.smali
deleted file mode 100644
index 18a1fc1..0000000
--- a/src/test/smali/type-confusion-regression5/TestObject.smali
+++ /dev/null
@@ -1,177 +0,0 @@
-# Copyright (c) 2016, 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.
-
-.class public final LTestObject;
-.super Ljava/lang/Object;
-
-.field private c:LTest;
-
-.method public constructor <init>()V
- .registers 1
- invoke-direct {p0}, Ljava/lang/Object;-><init>()V
- return-void
-.end method
-
-.method public onClick(LTest;)V
- .registers 10
- const/4 v2, 0x00 # 0
- invoke-virtual { v9 }, LTest;->getId()I
- move-result v0
- const v1, 0x7f0f01bf # 2131689919
- if-ne v0, v1, :label_247
- invoke-virtual { v8 }, LTestObject;->getActivity()LTest;
- move-result-object v0
- invoke-static { v0, v9 }, LTest;->b(LTest;LTest;)Z
- iget-object v0, v8, LTestObject;->c:LTest;
- invoke-virtual { v0 }, LTest;->a()Z
- move-result v0
- if-eqz v0, :label_231
- iget-object v0, v8, LTestObject;->d:Landroid/widget/Button;
- const/4 v1, 0x00 # 0
- invoke-virtual { v0, v1 }, Landroid/widget/Button;->setEnabled(Z)V
- iget-object v0, v8, LTestObject;->b:Landroid/widget/LinearLayout;
- if-nez v0, :label_72
- const-string v0, "a"
- const/4 v1, 0x05 # 5
- invoke-static { v0, v1 }, Landroid/util/Log;->isLoggable(Ljava/lang/String;I)Z
- move-result v0
- if-eqz v0, :label_51
- const-string v0, "b"
- const-string v1, "c"
- invoke-static { v0, v1 }, Landroid/util/Log;->w(Ljava/lang/String;Ljava/lang/String;)I
- :label_51
- invoke-static { v2 }, LTest;->c(LTest;)Z
- move-result v0
- if-eqz v0, :label_66
- iget-object v0, v8, LTestObject;->a:LTest;
- sget-object v1, Ljok;->d:LTest;
- sget-object v3, Ljol;->c:LTest;
- invoke-virtual { v0, v1, v3 }, LTest;->a(LTest;LTest;)V
- :label_66
- iget-object v0, v8, LTestObject;->g:LTest;
- invoke-virtual { v0, v2 }, LTest;->a(LTest;)V
- :label_71
- return-void
- :label_72
- new-instance v5, Ljava/util/ArrayList;
- invoke-direct { v5 }, Ljava/util/ArrayList;-><init>()V
- iget-object v0, v8, LTestObject;->b:Landroid/widget/LinearLayout;
- invoke-direct { v8, v0 }, LTestObject;->a(Landroid/widget/LinearLayout;)Ljava/util/List;
- move-result-object v0
- invoke-interface { v0 }, Ljava/util/List;->iterator()Ljava/util/Iterator;
- move-result-object v6
- move-object v1, v2
- move-object v4, v2
- :label_89
- invoke-interface { v6 }, Ljava/util/Iterator;->hasNext()Z
- move-result v0
- if-eqz v0, :label_151
- invoke-interface { v6 }, Ljava/util/Iterator;->next()Ljava/lang/Object;
- move-result-object v0
- check-cast v0, LTest;
- invoke-virtual { v0 }, LTest;->c()LTest;
- move-result-object v3
- if-eqz v3, :label_148
- instance-of v7, v0, LTest;
- if-eqz v7, :label_127
- if-eqz v1, :label_116
- invoke-virtual { v5, v1 }, Ljava/util/ArrayList;->add(Ljava/lang/Object;)Z
- :label_116
- invoke-virtual { v5, v3 }, Ljava/util/ArrayList;->add(Ljava/lang/Object;)Z
- if-eqz v4, :label_124
- invoke-virtual { v5, v4 }, Ljava/util/ArrayList;->add(Ljava/lang/Object;)Z
- :label_124
- move-object v1, v2
- move-object v4, v2
- goto :label_89
- :label_127
- instance-of v7, v0, LTest;
- if-eqz v7, :label_133
- move-object v1, v3
- goto :label_89
- :label_133
- instance-of v0, v0, LTest;
- if-eqz v0, :label_139
- move-object v4, v3
- goto :label_89
- :label_139
- if-eqz v4, :label_145
- invoke-virtual { v5, v4 }, Ljava/util/ArrayList;->add(Ljava/lang/Object;)Z
- move-object v4, v2
- :label_145
- invoke-virtual { v5, v3 }, Ljava/util/ArrayList;->add(Ljava/lang/Object;)Z
- :label_148
- move-object v3, v4
- move-object v4, v3
- goto :label_89
- :label_151
- if-eqz v4, :label_156
- invoke-virtual { v5, v4 }, Ljava/util/ArrayList;->add(Ljava/lang/Object;)Z
- :label_156
- new-instance v1, LTest;
- invoke-direct { v1 }, LTest;-><init>()V
- const-string v0, "d"
- iput-object v0, v1, LTest;->b:Ljava/lang/String;
- iget-object v0, v1, LTest;->c:Ljava/util/Set;
- const/4 v3, 0x06 # 6
- invoke-static { v3 }, Ljava/lang/Integer;->valueOf(I)Ljava/lang/Integer;
- move-result-object v3
- invoke-interface { v0, v3 }, Ljava/util/Set;->add(Ljava/lang/Object;)Z
- new-instance v3, LTest;
- invoke-direct { v3 }, LTest;-><init>()V
- iput-object v5, v3, LTest;->a:Ljava/util/List;
- iget-object v0, v3, LTest;->b:Ljava/util/Set;
- const/4 v4, 0x02 # 2
- invoke-static { v4 }, Ljava/lang/Integer;->valueOf(I)Ljava/lang/Integer;
- move-result-object v4
- invoke-interface { v0, v4 }, Ljava/util/Set;->add(Ljava/lang/Object;)Z
- new-instance v0, LTest;
- iget-object v4, v3, LTest;->b:Ljava/util/Set;
- iget-object v3, v3, LTest;->a:Ljava/util/List;
- invoke-direct { v0, v4, v3 }, LTest;-><init>(Ljava/util/Set;Ljava/util/List;)V
- check-cast v0, LTest;
- iput-object v0, v1, LTest;->a:LTest;
- iget-object v0, v1, LTest;->c:Ljava/util/Set;
- const/4 v3, 0x04 # 4
- invoke-static { v3 }, Ljava/lang/Integer;->valueOf(I)Ljava/lang/Integer;
- move-result-object v3
- invoke-interface { v0, v3 }, Ljava/util/Set;->add(Ljava/lang/Object;)Z
- new-instance v0, LTest;
- iget-object v3, v1, LTest;->c:Ljava/util/Set;
- iget-object v4, v1, LTest;->a:LTest;
- iget-object v1, v1, LTest;->b:Ljava/lang/String;
- invoke-direct { v0, v3, v2, v4, v1 }, LTest;-><init>(Ljava/util/Set;LTest;LTest;Ljava/lang/String;)V
- check-cast v0, LTest;
- move-object v2, v0
- goto/16 :label_51
- :label_231
- iget-object v0, v8, LTestObject;->c:LTest;
- const/16 v1, 0x0082 # 130
- invoke-virtual { v0, v1 }, LTest;->pageScroll(I)Z
- iget-object v0, v8, LTestObject;->a:LTest;
- sget-object v1, Ljok;->k:LTest;
- invoke-virtual { v0, v1 }, LTest;->a(LTest;)V
- goto/16 :label_71
- :label_247
- const v1, 0x7f0f0204 # 2131689988
- if-ne v0, v1, :label_71
- iget-object v0, v8, LTestObject;->a:LTest;
- sget-object v1, Ljok;->q:LTest;
- invoke-virtual { v0, v1 }, LTest;->a(LTest;)V
- iget-object v0, v8, LTestObject;->g:LTest;
- invoke-virtual { v0 }, LTest;->g()V
- goto/16 :label_71
-.end method
-
-.method public getActivity()LTest;
- .registers 1
- const/4 v0, 0x00
- return-object v0
-.end method
-
-.method private a(Landroid/widget/LinearLayout;)Ljava/util/List;
- .registers 2
- const/4 v0, 0x00
- return-object v0
-.end method
diff --git a/src/test/smali/unreachable-code-1/UnreachableCode1.smali b/src/test/smali/unreachable-code-1/UnreachableCode1.smali
deleted file mode 100644
index a7ba2f1..0000000
--- a/src/test/smali/unreachable-code-1/UnreachableCode1.smali
+++ /dev/null
@@ -1,87 +0,0 @@
-# Copyright (c) 2016, 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.
-
-.class public LTest;
-
-.super Ljava/lang/Object;
-
-.method public static test1()I
- .registers 1
- goto :return
-
- :dummy
- const/4 v0, 0x1
-
- :return
- const/4 v0, 0x7
- return v0
-
-.end method
-
-.method public static test2()I
- .registers 1
- goto :return
-
- :dummy1
- const/4 v0, 0x1
-
- :dummy2
- const/4 v0, 0x2
-
- :return
- const/4 v0, 0x7
- return v0
-
-.end method
-
-.method public static test3()I
- .registers 1
- goto :return
-
- :dummy1
- const/4 v0, 0x1
- goto :dummy3
-
- :dummy2
- const/4 v0, 0x2
- goto :return
-
- :dummy3
- const/4 v0, 0x3
- goto :return
-
- :dummy4
- const/4 v0, 0x4
-
- :return
- const/4 v0, 0x7
- return v0
-
-.end method
-
-.method public static main([Ljava/lang/String;)V
- .locals 2
-
- sget-object v0, Ljava/lang/System;->out:Ljava/io/PrintStream;
-
- invoke-static {}, LTest;->test1()I
- move-result v1
- invoke-static {v1}, Ljava/lang/Integer;->toString(I)Ljava/lang/String;
- move-result-object v1
- invoke-virtual {v0, v1}, Ljava/io/PrintStream;->print(Ljava/lang/Object;)V
-
- invoke-static {}, LTest;->test2()I
- move-result v1
- invoke-static {v1}, Ljava/lang/Integer;->toString(I)Ljava/lang/String;
- move-result-object v1
- invoke-virtual {v0, v1}, Ljava/io/PrintStream;->print(Ljava/lang/Object;)V
-
- invoke-static {}, LTest;->test3()I
- move-result v1
- invoke-static {v1}, Ljava/lang/Integer;->toString(I)Ljava/lang/String;
- move-result-object v1
- invoke-virtual {v0, v1}, Ljava/io/PrintStream;->print(Ljava/lang/Object;)V
-
- return-void
-.end method
diff --git a/third_party/smali.tar.gz.sha1 b/third_party/smali.tar.gz.sha1
new file mode 100644
index 0000000..19edeb3
--- /dev/null
+++ b/third_party/smali.tar.gz.sha1
@@ -0,0 +1 @@
+dbe8218edb1e2555e728edaa52d845ca1e4ceb25
\ No newline at end of file
diff --git a/tools/chrome_data.py b/tools/chrome_data.py
index ebae542..55ac69a 100644
--- a/tools/chrome_data.py
+++ b/tools/chrome_data.py
@@ -256,7 +256,7 @@
'inputs': [os.path.join(V200430_BASE, 'program.jar')],
'pgconf': [os.path.join(V200430_BASE, 'proguard.config')],
'libraries': [os.path.join(V200430_BASE, 'library.jar')],
- 'min-api': ANDROID_N_API
+ 'min-api': ANDROID_N_API,
},
},
'200520-monochrome_public_minimal_apks': {