Minor: Move AbstractParcelBytecodeListingTest to compiler tests, change its format a bit

This commit is contained in:
Yan Zhulanow
2018-08-18 04:11:17 +03:00
parent c6b5e8c40f
commit 6f7741b6bb
20 changed files with 184 additions and 139 deletions
@@ -1,197 +0,0 @@
/*
* Copyright 2010-2017 JetBrains s.r.o.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.jetbrains.kotlin.android.parcel
import org.jetbrains.kotlin.codegen.CodegenTestCase
import org.jetbrains.kotlin.codegen.getClassFiles
import org.jetbrains.kotlin.test.KotlinTestUtils
import org.jetbrains.org.objectweb.asm.ClassReader
import org.jetbrains.org.objectweb.asm.Label
import org.jetbrains.org.objectweb.asm.Opcodes.*
import org.jetbrains.org.objectweb.asm.Type
import org.jetbrains.org.objectweb.asm.tree.*
import org.jetbrains.org.objectweb.asm.util.Printer
import java.io.File
private val LINE_SEPARATOR = System.getProperty("line.separator")
abstract class AbstractAsmLikeInstructionListingTest : CodegenTestCase() {
private companion object {
val CURIOUS_ABOUT_DIRECTIVE = "// CURIOUS_ABOUT "
val LOCAL_VARIABLES_TABLE_DIRECTIVE = "// LOCAL_VARIABLES_TABLE"
}
override fun doMultiFileTest(wholeFile: File, files: List<TestFile>, javaFilesDir: File?) {
val txtFile = File(wholeFile.parentFile, wholeFile.nameWithoutExtension + ".txt")
compile(files, javaFilesDir)
val classes = classFileFactory
.getClassFiles()
.sortedBy { it.relativePath }
.map { file -> ClassNode().also { ClassReader(file.asByteArray()).accept(it, ClassReader.EXPAND_FRAMES) } }
val testFileLines = wholeFile.readLines()
val printBytecodeForTheseMethods = testFileLines
.filter { it.startsWith(CURIOUS_ABOUT_DIRECTIVE) }
.map { it.substring(CURIOUS_ABOUT_DIRECTIVE.length) }
.flatMap { it.split(',').map { it.trim() } }
val showLocalVariables = testFileLines.any { it.trim() == LOCAL_VARIABLES_TABLE_DIRECTIVE }
KotlinTestUtils.assertEqualsToFile(txtFile, classes.joinToString(LINE_SEPARATOR.repeat(2)) {
renderClassNode(it, printBytecodeForTheseMethods, showLocalVariables)
})
}
private fun renderClassNode(clazz: ClassNode, printBytecodeForTheseMethods: List<String>, showLocalVariables: Boolean): String {
val fields = (clazz.fields ?: emptyList()).sortedBy { it.name }
val methods = (clazz.methods ?: emptyList()).sortedBy { it.name }
val superTypes = (listOf(clazz.superName) + clazz.interfaces).filterNotNull()
return buildString {
renderVisibilityModifiers(clazz.access)
renderModalityModifiers(clazz.access)
append(if ((clazz.access and ACC_INTERFACE) != 0) "interface " else "class ")
append(clazz.name)
if (superTypes.isNotEmpty()) {
append(" : " + superTypes.joinToString())
}
appendln(" {")
fields.joinTo(this, LINE_SEPARATOR.repeat(2)) { renderField(it).withMargin() }
if (fields.isNotEmpty()) {
appendln().appendln()
}
methods.joinTo(this, LINE_SEPARATOR.repeat(2)) {
val printBytecode = printBytecodeForTheseMethods.contains(it.name)
renderMethod(it, printBytecode, showLocalVariables).withMargin()
}
appendln().append("}")
}
}
private fun renderField(field: FieldNode) = buildString {
renderVisibilityModifiers(field.access)
renderModalityModifiers(field.access)
append(Type.getType(field.desc).className).append(' ')
append(field.name)
}
private fun renderMethod(method: MethodNode, printBytecode: Boolean, showLocalVariables: Boolean) = buildString {
renderVisibilityModifiers(method.access)
renderModalityModifiers(method.access)
val (returnType, parameterTypes) = with(Type.getMethodType(method.desc)) { returnType to argumentTypes }
append(returnType.className).append(' ')
append(method.name)
parameterTypes.mapIndexed { index, type -> "${type.className} p$index" }.joinTo(this, prefix = "(", postfix = ")")
if (printBytecode && (method.access and ACC_ABSTRACT) == 0) {
appendln(" {")
append(renderBytecodeInstructions(method.instructions).trimEnd().withMargin())
if (showLocalVariables) {
val localVariableTable = buildLocalVariableTable(method)
if (localVariableTable.isNotEmpty()) {
appendln().appendln()
append(localVariableTable.withMargin())
}
}
appendln().append("}")
}
}
private fun buildLocalVariableTable(method: MethodNode): String {
val localVariables = method.localVariables?.takeIf { it.isNotEmpty() } ?: return ""
return buildString {
append("Local variables:")
for (variable in localVariables) {
appendln().append((variable.name + ": " + variable.desc).withMargin())
}
}
}
private fun renderBytecodeInstructions(instructions: InsnList) = buildString {
val labelMappings = LabelMappings()
var currentInsn = instructions.first
while (currentInsn != null) {
renderInstruction(currentInsn, labelMappings)
currentInsn = currentInsn.next
}
}
private fun StringBuilder.renderInstruction(node: AbstractInsnNode, labelMappings: LabelMappings) {
if (node is LabelNode) {
appendln("LABEL (L" + labelMappings[node.label] + ")")
return
}
if (node is LineNumberNode) {
appendln("LINENUMBER (" + node.line + ")")
return
}
if (node is FrameNode) return
append(" ").append(Printer.OPCODES[node.opcode] ?: error("Invalid opcode ${node.opcode}"))
when (node) {
is FieldInsnNode -> append(" (" + node.name + ", " + node.desc + ")")
is JumpInsnNode -> append(" (L" + labelMappings[node.label.label] + ")")
is IntInsnNode -> append(" (" + node.operand + ")")
is MethodInsnNode -> append(" (" + node.owner + ", "+ node.name + ", " + node.desc + ")")
is VarInsnNode -> append(" (" + node.`var` + ")")
is LdcInsnNode -> append(" (" + node.cst + ")")
}
appendln()
}
private fun String.withMargin(margin: String = " "): String {
return lineSequence().map { margin + it }.joinToString(LINE_SEPARATOR)
}
private fun StringBuilder.renderVisibilityModifiers(access: Int) {
if ((access and ACC_PUBLIC) != 0) append("public ")
if ((access and ACC_PRIVATE) != 0) append("private ")
if ((access and ACC_PROTECTED) != 0) append("protected ")
}
private fun StringBuilder.renderModalityModifiers(access: Int) {
if ((access and ACC_FINAL) != 0) append("final ")
if ((access and ACC_ABSTRACT) != 0) append("abstract ")
if ((access and ACC_STATIC) != 0) append("static ")
}
private class LabelMappings {
private var mappings = hashMapOf<Int, Int>()
private var currentIndex = 0
operator fun get(label: Label): Int {
val hashCode = System.identityHashCode(label)
return mappings.getOrPut(hashCode) { currentIndex++ }
}
}
}
@@ -20,7 +20,7 @@ import org.jetbrains.kotlin.android.synthetic.AndroidComponentRegistrar
import org.jetbrains.kotlin.android.synthetic.test.addAndroidExtensionsRuntimeLibrary
import org.jetbrains.kotlin.cli.jvm.compiler.KotlinCoreEnvironment
import org.jetbrains.kotlin.cli.jvm.config.JvmClasspathRoot
import org.jetbrains.kotlin.codegen.extensions.ExpressionCodegenExtension
import org.jetbrains.kotlin.codegen.AbstractAsmLikeInstructionListingTest
import java.io.File
abstract class AbstractParcelBytecodeListingTest : AbstractAsmLikeInstructionListingTest() {
@@ -1,7 +1,7 @@
public final class User$Creator : java/lang/Object, android/os/Parcelable$Creator {
public void <init>()
public final java.lang.Object createFromParcel(android.os.Parcel p0) {
public final java.lang.Object createFromParcel(android.os.Parcel in) {
LABEL (L0)
ALOAD (1)
LDC (in)
@@ -46,7 +46,7 @@ public final class User$Creator : java/lang/Object, android/os/Parcelable$Creato
LABEL (L4)
}
public final java.lang.Object[] newArray(int p0)
public final java.lang.Object[] newArray(int size)
}
public final class User : java/lang/Object, android/os/Parcelable {
@@ -64,7 +64,7 @@ public final class User : java/lang/Object, android/os/Parcelable {
static void <clinit>()
public void <init>(android.os.IBinder p0, android.os.IBinder[] p1, java.util.List p2, java.util.ArrayList p3, android.os.IInterface p4)
public void <init>(android.os.IBinder binder, android.os.IBinder[] binderArray, java.util.List binderList, java.util.ArrayList binderArrayList, android.os.IInterface intf)
public int describeContents()
@@ -78,7 +78,7 @@ public final class User : java/lang/Object, android/os/Parcelable {
public final android.os.IInterface getIntf()
public void writeToParcel(android.os.Parcel p0, int p1) {
public void writeToParcel(android.os.Parcel parcel, int flags) {
LABEL (L0)
ALOAD (1)
LDC (parcel)
@@ -1,9 +1,9 @@
public final class User$Creator : java/lang/Object, android/os/Parcelable$Creator {
public void <init>()
public final java.lang.Object createFromParcel(android.os.Parcel p0)
public final java.lang.Object createFromParcel(android.os.Parcel in)
public final java.lang.Object[] newArray(int p0)
public final java.lang.Object[] newArray(int size)
}
public final class User : java/lang/Object, android/os/Parcelable {
@@ -19,7 +19,7 @@ public final class User : java/lang/Object, android/os/Parcelable {
static void <clinit>()
public void <init>(java.lang.String p0, java.lang.String p1, int p2, boolean p3)
public void <init>(java.lang.String firstName, java.lang.String lastName, int age, boolean isProUser)
public int describeContents() {
LABEL (L0)
@@ -37,5 +37,5 @@ public final class User : java/lang/Object, android/os/Parcelable {
public final boolean isProUser()
public void writeToParcel(android.os.Parcel p0, int p1)
public void writeToParcel(android.os.Parcel parcel, int flags)
}
@@ -1,7 +1,7 @@
public final class test/Foo$Creator : java/lang/Object, android/os/Parcelable$Creator {
public void <init>()
public final java.lang.Object createFromParcel(android.os.Parcel p0) {
public final java.lang.Object createFromParcel(android.os.Parcel in) {
LABEL (L0)
ALOAD (1)
LDC (in)
@@ -18,7 +18,7 @@ public final class test/Foo$Creator : java/lang/Object, android/os/Parcelable$Cr
LABEL (L1)
}
public final java.lang.Object[] newArray(int p0)
public final java.lang.Object[] newArray(int size)
}
public final class test/Foo : java/lang/Object, android/os/Parcelable {
@@ -34,13 +34,13 @@ public final class test/Foo : java/lang/Object, android/os/Parcelable {
RETURN
}
public void <init>(android.accounts.Account p0)
public void <init>(android.accounts.Account kp)
public int describeContents()
public final android.accounts.Account getKp()
public void writeToParcel(android.os.Parcel p0, int p1) {
public void writeToParcel(android.os.Parcel parcel, int flags) {
LABEL (L0)
ALOAD (1)
LDC (parcel)
@@ -1,13 +1,13 @@
public final class k/KotlinParcelable$Companion : java/lang/Object {
private void <init>()
public void <init>(kotlin.jvm.internal.DefaultConstructorMarker p0)
public void <init>(kotlin.jvm.internal.DefaultConstructorMarker $constructor_marker)
}
public final class k/KotlinParcelable$Creator : java/lang/Object, android/os/Parcelable$Creator {
public void <init>()
public k.KotlinParcelable createFromParcel(android.os.Parcel p0) {
public k.KotlinParcelable createFromParcel(android.os.Parcel this) {
LABEL (L0)
ALOAD (1)
LDC (source)
@@ -36,7 +36,7 @@ public final class k/KotlinParcelable$Creator : java/lang/Object, android/os/Par
ARETURN
}
public k.KotlinParcelable[] newArray(int p0)
public k.KotlinParcelable[] newArray(int size)
public java.lang.Object[] newArray(int p0)
}
@@ -63,11 +63,11 @@ public final class k/KotlinParcelable : java/lang/Object, android/os/Parcelable
RETURN
}
public void <init>(int p0)
public void <init>(int data)
public final int component1()
public final k.KotlinParcelable copy(int p0)
public final k.KotlinParcelable copy(int data)
public static k.KotlinParcelable copy$default(k.KotlinParcelable p0, int p1, int p2, java.lang.Object p3)
@@ -79,11 +79,11 @@ public final class k/KotlinParcelable : java/lang/Object, android/os/Parcelable
public int hashCode()
public final void setData(int p0)
public final void setData(int <set-?>)
public java.lang.String toString()
public void writeToParcel(android.os.Parcel p0, int p1) {
public void writeToParcel(android.os.Parcel dest, int flags) {
LABEL (L0)
ALOAD (1)
LDC (dest)
@@ -104,7 +104,7 @@ public final class k/KotlinParcelable : java/lang/Object, android/os/Parcelable
public final class test/Foo$Creator : java/lang/Object, android/os/Parcelable$Creator {
public void <init>()
public final java.lang.Object createFromParcel(android.os.Parcel p0) {
public final java.lang.Object createFromParcel(android.os.Parcel in) {
LABEL (L0)
ALOAD (1)
LDC (in)
@@ -121,7 +121,7 @@ public final class test/Foo$Creator : java/lang/Object, android/os/Parcelable$Cr
LABEL (L1)
}
public final java.lang.Object[] newArray(int p0)
public final java.lang.Object[] newArray(int size)
}
public final class test/Foo : java/lang/Object, android/os/Parcelable {
@@ -137,13 +137,13 @@ public final class test/Foo : java/lang/Object, android/os/Parcelable {
RETURN
}
public void <init>(k.KotlinParcelable p0)
public void <init>(k.KotlinParcelable kp)
public int describeContents()
public final k.KotlinParcelable getKp()
public void writeToParcel(android.os.Parcel p0, int p1) {
public void writeToParcel(android.os.Parcel parcel, int flags) {
LABEL (L0)
ALOAD (1)
LDC (parcel)
@@ -1,13 +1,13 @@
final class User$Companion : java/lang/Object, kotlinx/android/parcel/Parceler {
private void <init>()
public void <init>(kotlin.jvm.internal.DefaultConstructorMarker p0)
public void <init>(kotlin.jvm.internal.DefaultConstructorMarker $constructor_marker)
public User create(android.os.Parcel p0)
public User create(android.os.Parcel parcel)
public java.lang.Object create(android.os.Parcel p0)
public User[] newArray(int p0) {
public User[] newArray(int size) {
LABEL (L0)
LINENUMBER (10)
ALOAD (0)
@@ -27,7 +27,7 @@ final class User$Companion : java/lang/Object, kotlinx/android/parcel/Parceler {
ARETURN
}
public void write(User p0, android.os.Parcel p1, int p2)
public void write(User this@write, android.os.Parcel parcel, int flags)
public void write(java.lang.Object p0, android.os.Parcel p1, int p2)
}
@@ -35,7 +35,7 @@ final class User$Companion : java/lang/Object, kotlinx/android/parcel/Parceler {
public final class User$Creator : java/lang/Object, android/os/Parcelable$Creator {
public void <init>()
public final java.lang.Object createFromParcel(android.os.Parcel p0) {
public final java.lang.Object createFromParcel(android.os.Parcel in) {
LABEL (L0)
ALOAD (1)
LDC (in)
@@ -47,7 +47,7 @@ public final class User$Creator : java/lang/Object, android/os/Parcelable$Creato
LABEL (L1)
}
public final java.lang.Object[] newArray(int p0) {
public final java.lang.Object[] newArray(int size) {
LABEL (L0)
ILOAD (1)
ANEWARRAY
@@ -69,7 +69,7 @@ public final class User : java/lang/Object, android/os/Parcelable {
static void <clinit>()
public void <init>(java.lang.String p0, java.lang.String p1, int p2)
public void <init>(java.lang.String firstName, java.lang.String lastName, int age)
public int describeContents()
@@ -79,7 +79,7 @@ public final class User : java/lang/Object, android/os/Parcelable {
public final java.lang.String getLastName()
public void writeToParcel(android.os.Parcel p0, int p1) {
public void writeToParcel(android.os.Parcel parcel, int flags) {
LABEL (L0)
ALOAD (1)
LDC (parcel)
@@ -1,13 +1,13 @@
final class User$Companion : java/lang/Object, kotlinx/android/parcel/Parceler {
private void <init>()
public void <init>(kotlin.jvm.internal.DefaultConstructorMarker p0)
public void <init>(kotlin.jvm.internal.DefaultConstructorMarker $constructor_marker)
public User create(android.os.Parcel p0)
public User create(android.os.Parcel parcel)
public java.lang.Object create(android.os.Parcel p0)
public User[] newArray(int p0) {
public User[] newArray(int size) {
LABEL (L0)
LINENUMBER (19)
ILOAD (1)
@@ -25,7 +25,7 @@ final class User$Companion : java/lang/Object, kotlinx/android/parcel/Parceler {
ARETURN
}
public void write(User p0, android.os.Parcel p1, int p2)
public void write(User this@write, android.os.Parcel parcel, int flags)
public void write(java.lang.Object p0, android.os.Parcel p1, int p2)
}
@@ -33,9 +33,9 @@ final class User$Companion : java/lang/Object, kotlinx/android/parcel/Parceler {
public final class User$Creator : java/lang/Object, android/os/Parcelable$Creator {
public void <init>()
public final java.lang.Object createFromParcel(android.os.Parcel p0)
public final java.lang.Object createFromParcel(android.os.Parcel in)
public final java.lang.Object[] newArray(int p0) {
public final java.lang.Object[] newArray(int size) {
LABEL (L0)
GETSTATIC (Companion, LUser$Companion;)
ILOAD (1)
@@ -58,7 +58,7 @@ public final class User : java/lang/Object, android/os/Parcelable {
static void <clinit>()
public void <init>(java.lang.String p0, java.lang.String p1, int p2)
public void <init>(java.lang.String firstName, java.lang.String lastName, int age)
public int describeContents()
@@ -68,5 +68,5 @@ public final class User : java/lang/Object, android/os/Parcelable {
public final java.lang.String getLastName()
public void writeToParcel(android.os.Parcel p0, int p1)
public void writeToParcel(android.os.Parcel parcel, int flags)
}
@@ -13,9 +13,9 @@ public abstract class AbstractUser : java/lang/Object, android/os/Parcelable {
public final class User$Creator : java/lang/Object, android/os/Parcelable$Creator {
public void <init>()
public final java.lang.Object createFromParcel(android.os.Parcel p0)
public final java.lang.Object createFromParcel(android.os.Parcel in)
public final java.lang.Object[] newArray(int p0)
public final java.lang.Object[] newArray(int size)
}
public final class User : AbstractUser {
@@ -31,7 +31,7 @@ public final class User : AbstractUser {
static void <clinit>()
public void <init>(java.lang.String p0, java.lang.String p1, int p2, boolean p3)
public void <init>(java.lang.String firstName, java.lang.String lastName, int age, boolean isProUser)
public final int getAge()
@@ -41,5 +41,5 @@ public final class User : AbstractUser {
public final boolean isProUser()
public void writeToParcel(android.os.Parcel p0, int p1)
public void writeToParcel(android.os.Parcel parcel, int flags)
}
@@ -1,7 +1,7 @@
public final class User$Companion : java/lang/Object {
private void <init>()
public void <init>(kotlin.jvm.internal.DefaultConstructorMarker p0)
public void <init>(kotlin.jvm.internal.DefaultConstructorMarker $constructor_marker)
private static void test$annotations()
}
@@ -9,9 +9,9 @@ public final class User$Companion : java/lang/Object {
public final class User$Creator : java/lang/Object, android/os/Parcelable$Creator {
public void <init>()
public final java.lang.Object createFromParcel(android.os.Parcel p0)
public final java.lang.Object createFromParcel(android.os.Parcel in)
public final java.lang.Object[] newArray(int p0)
public final java.lang.Object[] newArray(int size)
}
public final class User : java/lang/Object, android/os/Parcelable {
@@ -42,11 +42,11 @@ public final class User : java/lang/Object, android/os/Parcelable {
RETURN
}
public void <init>(java.lang.String p0)
public void <init>(java.lang.String firstName)
public int describeContents()
public final java.lang.String getFirstName()
public void writeToParcel(android.os.Parcel p0, int p1)
public void writeToParcel(android.os.Parcel parcel, int flags)
}
@@ -1,7 +1,7 @@
public final class test/SomeClass$Creator : java/lang/Object, android/os/Parcelable$Creator {
public void <init>()
public final java.lang.Object createFromParcel(android.os.Parcel p0) {
public final java.lang.Object createFromParcel(android.os.Parcel in) {
LABEL (L0)
ALOAD (1)
LDC (in)
@@ -23,7 +23,7 @@ public final class test/SomeClass$Creator : java/lang/Object, android/os/Parcela
LABEL (L4)
}
public final java.lang.Object[] newArray(int p0)
public final java.lang.Object[] newArray(int size)
}
public final class test/SomeClass : java/lang/Object, android/os/Parcelable {
@@ -35,7 +35,7 @@ public final class test/SomeClass : java/lang/Object, android/os/Parcelable {
public int describeContents()
public void writeToParcel(android.os.Parcel p0, int p1) {
public void writeToParcel(android.os.Parcel parcel, int flags) {
LABEL (L0)
ALOAD (1)
LDC (parcel)
@@ -1,9 +1,9 @@
public final class Test$Creator : java/lang/Object, android/os/Parcelable$Creator {
public void <init>()
public final java.lang.Object createFromParcel(android.os.Parcel p0)
public final java.lang.Object createFromParcel(android.os.Parcel in)
public final java.lang.Object[] newArray(int p0)
public final java.lang.Object[] newArray(int size)
}
public final class Test : java/lang/Object {
@@ -13,13 +13,13 @@ public final class Test : java/lang/Object {
static void <clinit>()
public void <init>(java.util.List p0)
public void <init>(java.util.List names)
public int describeContents()
public final java.util.List getNames()
public void writeToParcel(android.os.Parcel p0, int p1) {
public void writeToParcel(android.os.Parcel parcel, int flags) {
LABEL (L0)
ALOAD (1)
LDC (parcel)
@@ -1,9 +1,9 @@
public final class TestNotNull$Creator : java/lang/Object, android/os/Parcelable$Creator {
public void <init>()
public final java.lang.Object createFromParcel(android.os.Parcel p0)
public final java.lang.Object createFromParcel(android.os.Parcel in)
public final java.lang.Object[] newArray(int p0)
public final java.lang.Object[] newArray(int size)
}
public final class TestNotNull : java/lang/Object {
@@ -13,13 +13,13 @@ public final class TestNotNull : java/lang/Object {
static void <clinit>()
public void <init>(android.util.Size p0)
public void <init>(android.util.Size a)
public int describeContents()
public final android.util.Size getA()
public void writeToParcel(android.os.Parcel p0, int p1) {
public void writeToParcel(android.os.Parcel parcel, int flags) {
LABEL (L0)
ALOAD (1)
LDC (parcel)
@@ -36,9 +36,9 @@ public final class TestNotNull : java/lang/Object {
public final class TestNullable$Creator : java/lang/Object, android/os/Parcelable$Creator {
public void <init>()
public final java.lang.Object createFromParcel(android.os.Parcel p0)
public final java.lang.Object createFromParcel(android.os.Parcel in)
public final java.lang.Object[] newArray(int p0)
public final java.lang.Object[] newArray(int size)
}
public final class TestNullable : java/lang/Object {
@@ -48,13 +48,13 @@ public final class TestNullable : java/lang/Object {
static void <clinit>()
public void <init>(android.util.Size p0)
public void <init>(android.util.Size a)
public int describeContents()
public final android.util.Size getA()
public void writeToParcel(android.os.Parcel p0, int p1) {
public void writeToParcel(android.os.Parcel parcel, int flags) {
LABEL (L0)
ALOAD (1)
LDC (parcel)
@@ -1,7 +1,7 @@
public final class test/Foo$Creator : java/lang/Object, android/os/Parcelable$Creator {
public void <init>()
public final java.lang.Object createFromParcel(android.os.Parcel p0) {
public final java.lang.Object createFromParcel(android.os.Parcel in) {
LABEL (L0)
ALOAD (1)
LDC (in)
@@ -17,7 +17,7 @@ public final class test/Foo$Creator : java/lang/Object, android/os/Parcelable$Cr
LABEL (L1)
}
public final java.lang.Object[] newArray(int p0)
public final java.lang.Object[] newArray(int size)
}
public final class test/Foo : java/lang/Object, android/os/Parcelable {
@@ -33,13 +33,13 @@ public final class test/Foo : java/lang/Object, android/os/Parcelable {
RETURN
}
public void <init>(android.os.Parcelable p0)
public void <init>(android.os.Parcelable parcelable)
public int describeContents()
public final android.os.Parcelable getParcelable()
public void writeToParcel(android.os.Parcel p0, int p1) {
public void writeToParcel(android.os.Parcel parcel, int flags) {
LABEL (L0)
ALOAD (1)
LDC (parcel)
@@ -3,7 +3,7 @@ public final class SerializableSimple : java/lang/Object, java/io/Serializable {
private final java.lang.String b
public void <init>(java.lang.String p0, java.lang.String p1)
public void <init>(java.lang.String a, java.lang.String b)
public final java.lang.String getA()
@@ -13,7 +13,7 @@ public final class SerializableSimple : java/lang/Object, java/io/Serializable {
public final class User$Creator : java/lang/Object, android/os/Parcelable$Creator {
public void <init>()
public final java.lang.Object createFromParcel(android.os.Parcel p0) {
public final java.lang.Object createFromParcel(android.os.Parcel in) {
LABEL (L0)
ALOAD (1)
LDC (in)
@@ -31,7 +31,7 @@ public final class User$Creator : java/lang/Object, android/os/Parcelable$Creato
LABEL (L1)
}
public final java.lang.Object[] newArray(int p0)
public final java.lang.Object[] newArray(int size)
}
public final class User : java/lang/Object, android/os/Parcelable {
@@ -49,7 +49,7 @@ public final class User : java/lang/Object, android/os/Parcelable {
RETURN
}
public void <init>(SerializableSimple p0, SerializableSimple p1)
public void <init>(SerializableSimple notNull, SerializableSimple nullable)
public int describeContents()
@@ -57,7 +57,7 @@ public final class User : java/lang/Object, android/os/Parcelable {
public final SerializableSimple getNullable()
public void writeToParcel(android.os.Parcel p0, int p1) {
public void writeToParcel(android.os.Parcel parcel, int flags) {
LABEL (L0)
ALOAD (1)
LDC (parcel)
@@ -1,6 +1,6 @@
// CURIOUS_ABOUT writeToParcel, createFromParcel, <clinit>, describeContents
// WITH_RUNTIME
// LOCAL_VARIABLES_TABLE
// LOCAL_VARIABLE_TABLE
import kotlinx.android.parcel.*
import android.os.Parcelable
@@ -1,7 +1,14 @@
public final class User$Creator : java/lang/Object, android/os/Parcelable$Creator {
public void <init>()
public void <init>() {
Local variables:
0 this: LUser$Creator;
}
public final java.lang.Object createFromParcel(android.os.Parcel in) {
Local variables:
0 this: LUser$Creator;
1 in: Landroid/os/Parcel;
public final java.lang.Object createFromParcel(android.os.Parcel p0) {
LABEL (L0)
ALOAD (1)
LDC (in)
@@ -26,13 +33,13 @@ public final class User$Creator : java/lang/Object, android/os/Parcelable$Creato
INVOKESPECIAL (User, <init>, (Ljava/lang/String;Ljava/lang/String;IZ)V)
ARETURN
LABEL (L4)
Local variables:
this: LUser$Creator;
in: Landroid/os/Parcel;
}
public final java.lang.Object[] newArray(int p0)
public final java.lang.Object[] newArray(int size) {
Local variables:
0 this: LUser$Creator;
1 size: I
}
}
public final class User : java/lang/Object, android/os/Parcelable {
@@ -54,27 +61,50 @@ public final class User : java/lang/Object, android/os/Parcelable {
RETURN
}
public void <init>(java.lang.String p0, java.lang.String p1, int p2, boolean p3)
public void <init>(java.lang.String firstName, java.lang.String lastName, int age, boolean isProUser) {
Local variables:
0 this: LUser;
1 firstName: Ljava/lang/String;
2 lastName: Ljava/lang/String;
3 age: I
4 isProUser: Z
}
public int describeContents() {
Local variables:
0 this: LUser;
LABEL (L0)
LDC (0)
IRETURN
LABEL (L1)
Local variables:
this: LUser;
}
public final int getAge()
public final int getAge() {
Local variables:
0 this: LUser;
}
public final java.lang.String getFirstName()
public final java.lang.String getFirstName() {
Local variables:
0 this: LUser;
}
public final java.lang.String getLastName()
public final java.lang.String getLastName() {
Local variables:
0 this: LUser;
}
public final boolean isProUser()
public final boolean isProUser() {
Local variables:
0 this: LUser;
}
public void writeToParcel(android.os.Parcel parcel, int flags) {
Local variables:
0 this: LUser;
1 parcel: Landroid/os/Parcel;
2 flags: I
public void writeToParcel(android.os.Parcel p0, int p1) {
LABEL (L0)
ALOAD (1)
LDC (parcel)
@@ -97,10 +127,5 @@ public final class User : java/lang/Object, android/os/Parcelable {
INVOKEVIRTUAL (android/os/Parcel, writeInt, (I)V)
RETURN
LABEL (L1)
Local variables:
this: LUser;
parcel: Landroid/os/Parcel;
flags: I
}
}
@@ -1,9 +1,9 @@
public final class Test$Creator : java/lang/Object, android/os/Parcelable$Creator {
public void <init>()
public final java.lang.Object createFromParcel(android.os.Parcel p0)
public final java.lang.Object createFromParcel(android.os.Parcel in)
public final java.lang.Object[] newArray(int p0)
public final java.lang.Object[] newArray(int size)
}
public final class Test : java/lang/Object {
@@ -13,13 +13,13 @@ public final class Test : java/lang/Object {
static void <clinit>()
public void <init>(java.util.List p0)
public void <init>(java.util.List names)
public int describeContents()
public final java.util.List getNames()
public void writeToParcel(android.os.Parcel p0, int p1) {
public void writeToParcel(android.os.Parcel parcel, int flags) {
LABEL (L0)
ALOAD (1)
LDC (parcel)
@@ -1,7 +1,7 @@
public final class Test$Creator : java/lang/Object, android/os/Parcelable$Creator {
public void <init>()
public final java.lang.Object createFromParcel(android.os.Parcel p0) {
public final java.lang.Object createFromParcel(android.os.Parcel in) {
LABEL (L0)
ALOAD (1)
LDC (in)
@@ -25,7 +25,7 @@ public final class Test$Creator : java/lang/Object, android/os/Parcelable$Creato
LABEL (L4)
}
public final java.lang.Object[] newArray(int p0)
public final java.lang.Object[] newArray(int size)
}
public final class Test : java/lang/Object, android/os/Parcelable {
@@ -37,13 +37,13 @@ public final class Test : java/lang/Object, android/os/Parcelable {
static void <clinit>()
public void <init>(android.util.Size p0, android.util.Size p1)
public void <init>(android.util.Size size, android.util.Size nullable)
public final android.util.Size component1()
public final android.util.Size component2()
public final Test copy(android.util.Size p0, android.util.Size p1)
public final Test copy(android.util.Size size, android.util.Size nullable)
public static Test copy$default(Test p0, android.util.Size p1, android.util.Size p2, int p3, java.lang.Object p4)
@@ -59,7 +59,7 @@ public final class Test : java/lang/Object, android/os/Parcelable {
public java.lang.String toString()
public void writeToParcel(android.os.Parcel p0, int p1) {
public void writeToParcel(android.os.Parcel parcel, int flags) {
LABEL (L0)
ALOAD (1)
LDC (parcel)
@@ -91,7 +91,7 @@ public final class Test : java/lang/Object, android/os/Parcelable {
public final class TestF$Creator : java/lang/Object, android/os/Parcelable$Creator {
public void <init>()
public final java.lang.Object createFromParcel(android.os.Parcel p0) {
public final java.lang.Object createFromParcel(android.os.Parcel in) {
LABEL (L0)
ALOAD (1)
LDC (in)
@@ -115,7 +115,7 @@ public final class TestF$Creator : java/lang/Object, android/os/Parcelable$Creat
LABEL (L4)
}
public final java.lang.Object[] newArray(int p0)
public final java.lang.Object[] newArray(int size)
}
public final class TestF : java/lang/Object, android/os/Parcelable {
@@ -127,13 +127,13 @@ public final class TestF : java/lang/Object, android/os/Parcelable {
static void <clinit>()
public void <init>(android.util.SizeF p0, android.util.SizeF p1)
public void <init>(android.util.SizeF size, android.util.SizeF nullable)
public final android.util.SizeF component1()
public final android.util.SizeF component2()
public final TestF copy(android.util.SizeF p0, android.util.SizeF p1)
public final TestF copy(android.util.SizeF size, android.util.SizeF nullable)
public static TestF copy$default(TestF p0, android.util.SizeF p1, android.util.SizeF p2, int p3, java.lang.Object p4)
@@ -149,7 +149,7 @@ public final class TestF : java/lang/Object, android/os/Parcelable {
public java.lang.String toString()
public void writeToParcel(android.os.Parcel p0, int p1) {
public void writeToParcel(android.os.Parcel parcel, int flags) {
LABEL (L0)
ALOAD (1)
LDC (parcel)