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
@@ -37,9 +37,9 @@ import org.jetbrains.org.objectweb.asm.commons.InstructionAdapter
* parameter values substituted. * parameter values substituted.
*/ */
class DefaultParameterValueSubstitutor(val state: GenerationState) { class DefaultParameterValueSubstitutor(val state: GenerationState) {
private companion object { companion object {
// rename -> JvmOverloads // rename -> JvmOverloads
private val ANNOTATION_TYPE_DESCRIPTOR_FOR_JVM_OVERLOADS_GENERATED_METHODS: String = val ANNOTATION_TYPE_DESCRIPTOR_FOR_JVM_OVERLOADS_GENERATED_METHODS: String =
Type.getObjectType("synthetic/kotlin/jvm/GeneratedByJvmOverloads").descriptor Type.getObjectType("synthetic/kotlin/jvm/GeneratedByJvmOverloads").descriptor
} }
@@ -1,26 +1,14 @@
/* /*
* Copyright 2010-2017 JetBrains s.r.o. * Copyright 2010-2018 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license
* * that can be found in the license/LICENSE.txt file.
* 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 package org.jetbrains.kotlin.codegen
import org.jetbrains.kotlin.codegen.CodegenTestCase
import org.jetbrains.kotlin.codegen.getClassFiles
import org.jetbrains.kotlin.test.KotlinTestUtils import org.jetbrains.kotlin.test.KotlinTestUtils
import org.jetbrains.org.objectweb.asm.ClassReader import org.jetbrains.org.objectweb.asm.ClassReader
import org.jetbrains.org.objectweb.asm.Label import org.jetbrains.org.objectweb.asm.Label
import org.jetbrains.org.objectweb.asm.Opcodes
import org.jetbrains.org.objectweb.asm.Opcodes.* import org.jetbrains.org.objectweb.asm.Opcodes.*
import org.jetbrains.org.objectweb.asm.Type import org.jetbrains.org.objectweb.asm.Type
import org.jetbrains.org.objectweb.asm.tree.* import org.jetbrains.org.objectweb.asm.tree.*
@@ -32,7 +20,7 @@ private val LINE_SEPARATOR = System.getProperty("line.separator")
abstract class AbstractAsmLikeInstructionListingTest : CodegenTestCase() { abstract class AbstractAsmLikeInstructionListingTest : CodegenTestCase() {
private companion object { private companion object {
val CURIOUS_ABOUT_DIRECTIVE = "// CURIOUS_ABOUT " val CURIOUS_ABOUT_DIRECTIVE = "// CURIOUS_ABOUT "
val LOCAL_VARIABLES_TABLE_DIRECTIVE = "// LOCAL_VARIABLES_TABLE" val LOCAL_VARIABLE_TABLE_DIRECTIVE = "// LOCAL_VARIABLE_TABLE"
} }
override fun doMultiFileTest(wholeFile: File, files: List<TestFile>, javaFilesDir: File?) { override fun doMultiFileTest(wholeFile: File, files: List<TestFile>, javaFilesDir: File?) {
@@ -51,14 +39,14 @@ abstract class AbstractAsmLikeInstructionListingTest : CodegenTestCase() {
.map { it.substring(CURIOUS_ABOUT_DIRECTIVE.length) } .map { it.substring(CURIOUS_ABOUT_DIRECTIVE.length) }
.flatMap { it.split(',').map { it.trim() } } .flatMap { it.split(',').map { it.trim() } }
val showLocalVariables = testFileLines.any { it.trim() == LOCAL_VARIABLES_TABLE_DIRECTIVE } val showLocalVariables = testFileLines.any { it.trim() == LOCAL_VARIABLE_TABLE_DIRECTIVE }
KotlinTestUtils.assertEqualsToFile(txtFile, classes.joinToString(LINE_SEPARATOR.repeat(2)) { KotlinTestUtils.assertEqualsToFile(txtFile, classes.joinToString(LINE_SEPARATOR.repeat(2)) {
renderClassNode(it, printBytecodeForTheseMethods, showLocalVariables) renderClassNode(it, printBytecodeForTheseMethods, showLocalVariables)
}) })
} }
private fun renderClassNode(clazz: ClassNode, printBytecodeForTheseMethods: List<String>, showLocalVariables: Boolean): String { private fun renderClassNode(clazz: ClassNode, showBytecodeForTheseMethods: List<String>, showLocalVariables: Boolean): String {
val fields = (clazz.fields ?: emptyList()).sortedBy { it.name } val fields = (clazz.fields ?: emptyList()).sortedBy { it.name }
val methods = (clazz.methods ?: emptyList()).sortedBy { it.name } val methods = (clazz.methods ?: emptyList()).sortedBy { it.name }
@@ -83,8 +71,8 @@ abstract class AbstractAsmLikeInstructionListingTest : CodegenTestCase() {
} }
methods.joinTo(this, LINE_SEPARATOR.repeat(2)) { methods.joinTo(this, LINE_SEPARATOR.repeat(2)) {
val printBytecode = printBytecodeForTheseMethods.contains(it.name) val showBytecode = showBytecodeForTheseMethods.contains(it.name)
renderMethod(it, printBytecode, showLocalVariables).withMargin() renderMethod(it, showBytecode, showLocalVariables).withMargin()
} }
appendln().append("}") appendln().append("}")
@@ -98,36 +86,60 @@ abstract class AbstractAsmLikeInstructionListingTest : CodegenTestCase() {
append(field.name) append(field.name)
} }
private fun renderMethod(method: MethodNode, printBytecode: Boolean, showLocalVariables: Boolean) = buildString { private fun renderMethod(method: MethodNode, showBytecode: Boolean, showLocalVariables: Boolean) = buildString {
renderVisibilityModifiers(method.access) renderVisibilityModifiers(method.access)
renderModalityModifiers(method.access) renderModalityModifiers(method.access)
val (returnType, parameterTypes) = with(Type.getMethodType(method.desc)) { returnType to argumentTypes } val (returnType, parameterTypes) = with(Type.getMethodType(method.desc)) { returnType to argumentTypes }
append(returnType.className).append(' ') append(returnType.className).append(' ')
append(method.name) append(method.name)
parameterTypes.mapIndexed { index, type -> "${type.className} p$index" }.joinTo(this, prefix = "(", postfix = ")")
if (printBytecode && (method.access and ACC_ABSTRACT) == 0) { parameterTypes.mapIndexed { index, type ->
val name = getParameterName(index, method)
"${type.className} $name"
}.joinTo(this, prefix = "(", postfix = ")")
val actualShowBytecode = showBytecode && (method.access and ACC_ABSTRACT) == 0
val actualShowLocalVariables = showLocalVariables && method.localVariables?.takeIf { it.isNotEmpty() } != null
if (actualShowBytecode || actualShowLocalVariables) {
appendln(" {") appendln(" {")
append(renderBytecodeInstructions(method.instructions).trimEnd().withMargin())
if (showLocalVariables) { if (actualShowLocalVariables) {
val localVariableTable = buildLocalVariableTable(method) val localVariableTable = buildLocalVariableTable(method)
if (localVariableTable.isNotEmpty()) { if (localVariableTable.isNotEmpty()) {
appendln().appendln()
append(localVariableTable.withMargin()) append(localVariableTable.withMargin())
} }
} }
if (actualShowBytecode) {
if (actualShowLocalVariables) {
appendln().appendln()
}
append(renderBytecodeInstructions(method.instructions).trimEnd().withMargin())
}
appendln().append("}") appendln().append("}")
} }
} }
private fun getParameterName(index: Int, method: MethodNode): String {
val localVariableIndexOffset = when {
(method.access and Opcodes.ACC_STATIC) != 0 -> 0
method.isJvmOverloadsGenerated() -> 0
else -> 1
}
val actualIndex = index + localVariableIndexOffset
val localVariables = method.localVariables?.takeIf { it.size > actualIndex } ?: return "p$index"
return localVariables[actualIndex].name
}
private fun buildLocalVariableTable(method: MethodNode): String { private fun buildLocalVariableTable(method: MethodNode): String {
val localVariables = method.localVariables?.takeIf { it.isNotEmpty() } ?: return "" val localVariables = method.localVariables?.takeIf { it.isNotEmpty() } ?: return ""
return buildString { return buildString {
append("Local variables:") append("Local variables:")
for (variable in localVariables) { for (variable in localVariables) {
appendln().append((variable.name + ": " + variable.desc).withMargin()) appendln().append((variable.index.toString() + " " + variable.name + ": " + variable.desc).withMargin())
} }
} }
} }
@@ -195,3 +207,11 @@ abstract class AbstractAsmLikeInstructionListingTest : CodegenTestCase() {
} }
} }
} }
private fun MethodNode.isJvmOverloadsGenerated(): Boolean {
fun AnnotationNode.isJvmOverloadsGenerated() =
this.desc == DefaultParameterValueSubstitutor.ANNOTATION_TYPE_DESCRIPTOR_FOR_JVM_OVERLOADS_GENERATED_METHODS
return (visibleAnnotations?.any { it.isJvmOverloadsGenerated() } ?: false)
|| (invisibleAnnotations?.any { it.isJvmOverloadsGenerated() } ?: false)
}
@@ -20,7 +20,7 @@ import org.jetbrains.kotlin.android.synthetic.AndroidComponentRegistrar
import org.jetbrains.kotlin.android.synthetic.test.addAndroidExtensionsRuntimeLibrary import org.jetbrains.kotlin.android.synthetic.test.addAndroidExtensionsRuntimeLibrary
import org.jetbrains.kotlin.cli.jvm.compiler.KotlinCoreEnvironment import org.jetbrains.kotlin.cli.jvm.compiler.KotlinCoreEnvironment
import org.jetbrains.kotlin.cli.jvm.config.JvmClasspathRoot 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 import java.io.File
abstract class AbstractParcelBytecodeListingTest : AbstractAsmLikeInstructionListingTest() { abstract class AbstractParcelBytecodeListingTest : AbstractAsmLikeInstructionListingTest() {
@@ -1,7 +1,7 @@
public final class User$Creator : java/lang/Object, android/os/Parcelable$Creator { public final class User$Creator : java/lang/Object, android/os/Parcelable$Creator {
public void <init>() 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) LABEL (L0)
ALOAD (1) ALOAD (1)
LDC (in) LDC (in)
@@ -46,7 +46,7 @@ public final class User$Creator : java/lang/Object, android/os/Parcelable$Creato
LABEL (L4) 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 { 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>() 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() public int describeContents()
@@ -78,7 +78,7 @@ public final class User : java/lang/Object, android/os/Parcelable {
public final android.os.IInterface getIntf() 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) LABEL (L0)
ALOAD (1) ALOAD (1)
LDC (parcel) LDC (parcel)
@@ -1,9 +1,9 @@
public final class User$Creator : java/lang/Object, android/os/Parcelable$Creator { public final class User$Creator : java/lang/Object, android/os/Parcelable$Creator {
public void <init>() 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 { 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>() 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() { public int describeContents() {
LABEL (L0) LABEL (L0)
@@ -37,5 +37,5 @@ public final class User : java/lang/Object, android/os/Parcelable {
public final boolean isProUser() 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 final class test/Foo$Creator : java/lang/Object, android/os/Parcelable$Creator {
public void <init>() 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) LABEL (L0)
ALOAD (1) ALOAD (1)
LDC (in) LDC (in)
@@ -18,7 +18,7 @@ public final class test/Foo$Creator : java/lang/Object, android/os/Parcelable$Cr
LABEL (L1) 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 { 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 RETURN
} }
public void <init>(android.accounts.Account p0) public void <init>(android.accounts.Account kp)
public int describeContents() public int describeContents()
public final android.accounts.Account getKp() 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) LABEL (L0)
ALOAD (1) ALOAD (1)
LDC (parcel) LDC (parcel)
@@ -1,13 +1,13 @@
public final class k/KotlinParcelable$Companion : java/lang/Object { public final class k/KotlinParcelable$Companion : java/lang/Object {
private void <init>() 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 final class k/KotlinParcelable$Creator : java/lang/Object, android/os/Parcelable$Creator {
public void <init>() public void <init>()
public k.KotlinParcelable createFromParcel(android.os.Parcel p0) { public k.KotlinParcelable createFromParcel(android.os.Parcel this) {
LABEL (L0) LABEL (L0)
ALOAD (1) ALOAD (1)
LDC (source) LDC (source)
@@ -36,7 +36,7 @@ public final class k/KotlinParcelable$Creator : java/lang/Object, android/os/Par
ARETURN ARETURN
} }
public k.KotlinParcelable[] newArray(int p0) public k.KotlinParcelable[] newArray(int size)
public java.lang.Object[] newArray(int p0) public java.lang.Object[] newArray(int p0)
} }
@@ -63,11 +63,11 @@ public final class k/KotlinParcelable : java/lang/Object, android/os/Parcelable
RETURN RETURN
} }
public void <init>(int p0) public void <init>(int data)
public final int component1() 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) 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 int hashCode()
public final void setData(int p0) public final void setData(int <set-?>)
public java.lang.String toString() 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) LABEL (L0)
ALOAD (1) ALOAD (1)
LDC (dest) 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 final class test/Foo$Creator : java/lang/Object, android/os/Parcelable$Creator {
public void <init>() 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) LABEL (L0)
ALOAD (1) ALOAD (1)
LDC (in) LDC (in)
@@ -121,7 +121,7 @@ public final class test/Foo$Creator : java/lang/Object, android/os/Parcelable$Cr
LABEL (L1) 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 { 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 RETURN
} }
public void <init>(k.KotlinParcelable p0) public void <init>(k.KotlinParcelable kp)
public int describeContents() public int describeContents()
public final k.KotlinParcelable getKp() 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) LABEL (L0)
ALOAD (1) ALOAD (1)
LDC (parcel) LDC (parcel)
@@ -1,13 +1,13 @@
final class User$Companion : java/lang/Object, kotlinx/android/parcel/Parceler { final class User$Companion : java/lang/Object, kotlinx/android/parcel/Parceler {
private void <init>() 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 java.lang.Object create(android.os.Parcel p0)
public User[] newArray(int p0) { public User[] newArray(int size) {
LABEL (L0) LABEL (L0)
LINENUMBER (10) LINENUMBER (10)
ALOAD (0) ALOAD (0)
@@ -27,7 +27,7 @@ final class User$Companion : java/lang/Object, kotlinx/android/parcel/Parceler {
ARETURN 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) 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 final class User$Creator : java/lang/Object, android/os/Parcelable$Creator {
public void <init>() 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) LABEL (L0)
ALOAD (1) ALOAD (1)
LDC (in) LDC (in)
@@ -47,7 +47,7 @@ public final class User$Creator : java/lang/Object, android/os/Parcelable$Creato
LABEL (L1) LABEL (L1)
} }
public final java.lang.Object[] newArray(int p0) { public final java.lang.Object[] newArray(int size) {
LABEL (L0) LABEL (L0)
ILOAD (1) ILOAD (1)
ANEWARRAY ANEWARRAY
@@ -69,7 +69,7 @@ public final class User : java/lang/Object, android/os/Parcelable {
static void <clinit>() 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() public int describeContents()
@@ -79,7 +79,7 @@ public final class User : java/lang/Object, android/os/Parcelable {
public final java.lang.String getLastName() 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) LABEL (L0)
ALOAD (1) ALOAD (1)
LDC (parcel) LDC (parcel)
@@ -1,13 +1,13 @@
final class User$Companion : java/lang/Object, kotlinx/android/parcel/Parceler { final class User$Companion : java/lang/Object, kotlinx/android/parcel/Parceler {
private void <init>() 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 java.lang.Object create(android.os.Parcel p0)
public User[] newArray(int p0) { public User[] newArray(int size) {
LABEL (L0) LABEL (L0)
LINENUMBER (19) LINENUMBER (19)
ILOAD (1) ILOAD (1)
@@ -25,7 +25,7 @@ final class User$Companion : java/lang/Object, kotlinx/android/parcel/Parceler {
ARETURN 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) 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 final class User$Creator : java/lang/Object, android/os/Parcelable$Creator {
public void <init>() 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) LABEL (L0)
GETSTATIC (Companion, LUser$Companion;) GETSTATIC (Companion, LUser$Companion;)
ILOAD (1) ILOAD (1)
@@ -58,7 +58,7 @@ public final class User : java/lang/Object, android/os/Parcelable {
static void <clinit>() 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() public int describeContents()
@@ -68,5 +68,5 @@ public final class User : java/lang/Object, android/os/Parcelable {
public final java.lang.String getLastName() 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 final class User$Creator : java/lang/Object, android/os/Parcelable$Creator {
public void <init>() 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 { public final class User : AbstractUser {
@@ -31,7 +31,7 @@ public final class User : AbstractUser {
static void <clinit>() 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() public final int getAge()
@@ -41,5 +41,5 @@ public final class User : AbstractUser {
public final boolean isProUser() 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 { public final class User$Companion : java/lang/Object {
private void <init>() 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() 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 final class User$Creator : java/lang/Object, android/os/Parcelable$Creator {
public void <init>() 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 { 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 RETURN
} }
public void <init>(java.lang.String p0) public void <init>(java.lang.String firstName)
public int describeContents() public int describeContents()
public final java.lang.String getFirstName() 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 final class test/SomeClass$Creator : java/lang/Object, android/os/Parcelable$Creator {
public void <init>() 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) LABEL (L0)
ALOAD (1) ALOAD (1)
LDC (in) LDC (in)
@@ -23,7 +23,7 @@ public final class test/SomeClass$Creator : java/lang/Object, android/os/Parcela
LABEL (L4) 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 { 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 int describeContents()
public void writeToParcel(android.os.Parcel p0, int p1) { public void writeToParcel(android.os.Parcel parcel, int flags) {
LABEL (L0) LABEL (L0)
ALOAD (1) ALOAD (1)
LDC (parcel) LDC (parcel)
@@ -1,9 +1,9 @@
public final class Test$Creator : java/lang/Object, android/os/Parcelable$Creator { public final class Test$Creator : java/lang/Object, android/os/Parcelable$Creator {
public void <init>() 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 { public final class Test : java/lang/Object {
@@ -13,13 +13,13 @@ public final class Test : java/lang/Object {
static void <clinit>() static void <clinit>()
public void <init>(java.util.List p0) public void <init>(java.util.List names)
public int describeContents() public int describeContents()
public final java.util.List getNames() 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) LABEL (L0)
ALOAD (1) ALOAD (1)
LDC (parcel) LDC (parcel)
@@ -1,9 +1,9 @@
public final class TestNotNull$Creator : java/lang/Object, android/os/Parcelable$Creator { public final class TestNotNull$Creator : java/lang/Object, android/os/Parcelable$Creator {
public void <init>() 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 { public final class TestNotNull : java/lang/Object {
@@ -13,13 +13,13 @@ public final class TestNotNull : java/lang/Object {
static void <clinit>() static void <clinit>()
public void <init>(android.util.Size p0) public void <init>(android.util.Size a)
public int describeContents() public int describeContents()
public final android.util.Size getA() 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) LABEL (L0)
ALOAD (1) ALOAD (1)
LDC (parcel) 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 final class TestNullable$Creator : java/lang/Object, android/os/Parcelable$Creator {
public void <init>() 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 { public final class TestNullable : java/lang/Object {
@@ -48,13 +48,13 @@ public final class TestNullable : java/lang/Object {
static void <clinit>() static void <clinit>()
public void <init>(android.util.Size p0) public void <init>(android.util.Size a)
public int describeContents() public int describeContents()
public final android.util.Size getA() 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) LABEL (L0)
ALOAD (1) ALOAD (1)
LDC (parcel) LDC (parcel)
@@ -1,7 +1,7 @@
public final class test/Foo$Creator : java/lang/Object, android/os/Parcelable$Creator { public final class test/Foo$Creator : java/lang/Object, android/os/Parcelable$Creator {
public void <init>() 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) LABEL (L0)
ALOAD (1) ALOAD (1)
LDC (in) LDC (in)
@@ -17,7 +17,7 @@ public final class test/Foo$Creator : java/lang/Object, android/os/Parcelable$Cr
LABEL (L1) 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 { 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 RETURN
} }
public void <init>(android.os.Parcelable p0) public void <init>(android.os.Parcelable parcelable)
public int describeContents() public int describeContents()
public final android.os.Parcelable getParcelable() 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) LABEL (L0)
ALOAD (1) ALOAD (1)
LDC (parcel) LDC (parcel)
@@ -3,7 +3,7 @@ public final class SerializableSimple : java/lang/Object, java/io/Serializable {
private final java.lang.String b 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() 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 final class User$Creator : java/lang/Object, android/os/Parcelable$Creator {
public void <init>() 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) LABEL (L0)
ALOAD (1) ALOAD (1)
LDC (in) LDC (in)
@@ -31,7 +31,7 @@ public final class User$Creator : java/lang/Object, android/os/Parcelable$Creato
LABEL (L1) 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 { 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 RETURN
} }
public void <init>(SerializableSimple p0, SerializableSimple p1) public void <init>(SerializableSimple notNull, SerializableSimple nullable)
public int describeContents() public int describeContents()
@@ -57,7 +57,7 @@ public final class User : java/lang/Object, android/os/Parcelable {
public final SerializableSimple getNullable() public final SerializableSimple getNullable()
public void writeToParcel(android.os.Parcel p0, int p1) { public void writeToParcel(android.os.Parcel parcel, int flags) {
LABEL (L0) LABEL (L0)
ALOAD (1) ALOAD (1)
LDC (parcel) LDC (parcel)
@@ -1,6 +1,6 @@
// CURIOUS_ABOUT writeToParcel, createFromParcel, <clinit>, describeContents // CURIOUS_ABOUT writeToParcel, createFromParcel, <clinit>, describeContents
// WITH_RUNTIME // WITH_RUNTIME
// LOCAL_VARIABLES_TABLE // LOCAL_VARIABLE_TABLE
import kotlinx.android.parcel.* import kotlinx.android.parcel.*
import android.os.Parcelable import android.os.Parcelable
@@ -1,7 +1,14 @@
public final class User$Creator : java/lang/Object, android/os/Parcelable$Creator { 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) LABEL (L0)
ALOAD (1) ALOAD (1)
LDC (in) 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) INVOKESPECIAL (User, <init>, (Ljava/lang/String;Ljava/lang/String;IZ)V)
ARETURN ARETURN
LABEL (L4) 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 { 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 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() { public int describeContents() {
Local variables:
0 this: LUser;
LABEL (L0) LABEL (L0)
LDC (0) LDC (0)
IRETURN IRETURN
LABEL (L1) 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) LABEL (L0)
ALOAD (1) ALOAD (1)
LDC (parcel) LDC (parcel)
@@ -97,10 +127,5 @@ public final class User : java/lang/Object, android/os/Parcelable {
INVOKEVIRTUAL (android/os/Parcel, writeInt, (I)V) INVOKEVIRTUAL (android/os/Parcel, writeInt, (I)V)
RETURN RETURN
LABEL (L1) 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 final class Test$Creator : java/lang/Object, android/os/Parcelable$Creator {
public void <init>() 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 { public final class Test : java/lang/Object {
@@ -13,13 +13,13 @@ public final class Test : java/lang/Object {
static void <clinit>() static void <clinit>()
public void <init>(java.util.List p0) public void <init>(java.util.List names)
public int describeContents() public int describeContents()
public final java.util.List getNames() 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) LABEL (L0)
ALOAD (1) ALOAD (1)
LDC (parcel) LDC (parcel)
@@ -1,7 +1,7 @@
public final class Test$Creator : java/lang/Object, android/os/Parcelable$Creator { public final class Test$Creator : java/lang/Object, android/os/Parcelable$Creator {
public void <init>() 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) LABEL (L0)
ALOAD (1) ALOAD (1)
LDC (in) LDC (in)
@@ -25,7 +25,7 @@ public final class Test$Creator : java/lang/Object, android/os/Parcelable$Creato
LABEL (L4) 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 { 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>() 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 component1()
public final android.util.Size component2() 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) 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 java.lang.String toString()
public void writeToParcel(android.os.Parcel p0, int p1) { public void writeToParcel(android.os.Parcel parcel, int flags) {
LABEL (L0) LABEL (L0)
ALOAD (1) ALOAD (1)
LDC (parcel) 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 final class TestF$Creator : java/lang/Object, android/os/Parcelable$Creator {
public void <init>() 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) LABEL (L0)
ALOAD (1) ALOAD (1)
LDC (in) LDC (in)
@@ -115,7 +115,7 @@ public final class TestF$Creator : java/lang/Object, android/os/Parcelable$Creat
LABEL (L4) 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 { 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>() 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 component1()
public final android.util.SizeF component2() 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) 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 java.lang.String toString()
public void writeToParcel(android.os.Parcel p0, int p1) { public void writeToParcel(android.os.Parcel parcel, int flags) {
LABEL (L0) LABEL (L0)
ALOAD (1) ALOAD (1)
LDC (parcel) LDC (parcel)