From f6d7a1722776dceee0fd83bacbbc02471f6caedb Mon Sep 17 00:00:00 2001 From: Yan Zhulanow Date: Tue, 5 Sep 2017 00:51:00 +0300 Subject: [PATCH] Parcelable: Remove 'ACC_STATIC' flag from Creator class, Dalvik dex checker hates it, and it's illegal anyway (KT-20034) --- .../android/parcel/ParcelableCodegenExtension.kt | 5 ++++- .../testData/parcel/codegen/IBinderIInterface.txt | 2 +- .../parcel/codegen/customDescribeContents.txt | 4 ++-- .../testData/parcel/codegen/customSimple.txt | 6 +++--- .../parcel/codegen/customSimpleWithNewArray.txt | 6 +++--- .../codegen/describeContentsFromSuperType.txt | 12 ++---------- .../testData/parcel/codegen/duplicatingClinit.txt | 2 +- .../testData/parcel/codegen/listInsideList.txt | 2 +- .../parcel/codegen/nullableNotNullSize.txt | 4 ++-- .../testData/parcel/codegen/parcelable.txt | 15 +-------------- .../testData/parcel/codegen/serializable.txt | 2 +- .../testData/parcel/codegen/simple.txt | 2 +- .../testData/parcel/codegen/simpleList.txt | 2 +- .../testData/parcel/codegen/size.txt | 4 ++-- 14 files changed, 25 insertions(+), 43 deletions(-) diff --git a/plugins/android-extensions/android-extensions-compiler/src/org/jetbrains/kotlin/android/parcel/ParcelableCodegenExtension.kt b/plugins/android-extensions/android-extensions-compiler/src/org/jetbrains/kotlin/android/parcel/ParcelableCodegenExtension.kt index 21adaa32169..1d70c5155cc 100644 --- a/plugins/android-extensions/android-extensions-compiler/src/org/jetbrains/kotlin/android/parcel/ParcelableCodegenExtension.kt +++ b/plugins/android-extensions/android-extensions-compiler/src/org/jetbrains/kotlin/android/parcel/ParcelableCodegenExtension.kt @@ -250,10 +250,13 @@ open class ParcelableCodegenExtension : ExpressionCodegenExtension { codegen.v.visitInnerClass(creatorAsmType.internalName, containerAsmType.internalName, "Creator", ACC_PUBLIC or ACC_STATIC) codegenForCreator.v.visitInnerClass(creatorAsmType.internalName, containerAsmType.internalName, "Creator", ACC_PUBLIC or ACC_STATIC) - classBuilderForCreator.defineClass(null, V1_6, ACC_PUBLIC or ACC_STATIC, + classBuilderForCreator.defineClass(null, V1_6, ACC_PUBLIC or ACC_FINAL or ACC_SUPER, creatorAsmType.internalName, null, "java/lang/Object", arrayOf("android/os/Parcelable\$Creator")) + codegen.v.visitInnerClass(creatorAsmType.internalName, containerAsmType.internalName, "Creator", ACC_PUBLIC or ACC_STATIC) + codegenForCreator.v.visitInnerClass(creatorAsmType.internalName, containerAsmType.internalName, "Creator", ACC_PUBLIC or ACC_STATIC) + writeSyntheticClassMetadata(classBuilderForCreator, codegen.state) writeCreatorConstructor(codegenForCreator, creatorClass, creatorAsmType) diff --git a/plugins/android-extensions/android-extensions-compiler/testData/parcel/codegen/IBinderIInterface.txt b/plugins/android-extensions/android-extensions-compiler/testData/parcel/codegen/IBinderIInterface.txt index 1648f4ffd96..1d79236066c 100644 --- a/plugins/android-extensions/android-extensions-compiler/testData/parcel/codegen/IBinderIInterface.txt +++ b/plugins/android-extensions/android-extensions-compiler/testData/parcel/codegen/IBinderIInterface.txt @@ -1,4 +1,4 @@ -public static class User$Creator : java/lang/Object, android/os/Parcelable$Creator { +public final class User$Creator : java/lang/Object, android/os/Parcelable$Creator { public void () public final java.lang.Object createFromParcel(android.os.Parcel p0) { diff --git a/plugins/android-extensions/android-extensions-compiler/testData/parcel/codegen/customDescribeContents.txt b/plugins/android-extensions/android-extensions-compiler/testData/parcel/codegen/customDescribeContents.txt index 13c201e8df0..fdb0d3ae4dd 100644 --- a/plugins/android-extensions/android-extensions-compiler/testData/parcel/codegen/customDescribeContents.txt +++ b/plugins/android-extensions/android-extensions-compiler/testData/parcel/codegen/customDescribeContents.txt @@ -1,4 +1,4 @@ -public static class User$Creator : java/lang/Object, android/os/Parcelable$Creator { +public final class User$Creator : java/lang/Object, android/os/Parcelable$Creator { public void () public final java.lang.Object createFromParcel(android.os.Parcel p0) @@ -23,7 +23,7 @@ public final class User : java/lang/Object, android/os/Parcelable { public int describeContents() { LABEL (L0) - LINENUMBER (8) + LINENUMBER (9) BIPUSH (100) IRETURN LABEL (L1) diff --git a/plugins/android-extensions/android-extensions-compiler/testData/parcel/codegen/customSimple.txt b/plugins/android-extensions/android-extensions-compiler/testData/parcel/codegen/customSimple.txt index 212e6f55206..0c4fcf21b15 100644 --- a/plugins/android-extensions/android-extensions-compiler/testData/parcel/codegen/customSimple.txt +++ b/plugins/android-extensions/android-extensions-compiler/testData/parcel/codegen/customSimple.txt @@ -9,7 +9,7 @@ final class User$Companion : java/lang/Object, kotlinx/android/parcel/Parceler { public User[] newArray(int p0) { LABEL (L0) - LINENUMBER (9) + LINENUMBER (10) ALOAD (0) ILOAD (1) INVOKESTATIC (kotlinx/android/parcel/Parceler$DefaultImpls, newArray, (Lkotlinx/android/parcel/Parceler;I)[Landroid/os/Parcelable;) @@ -20,7 +20,7 @@ final class User$Companion : java/lang/Object, kotlinx/android/parcel/Parceler { public android.os.Parcelable[] newArray(int p0) { LABEL (L0) - LINENUMBER (9) + LINENUMBER (10) ALOAD (0) ILOAD (1) INVOKEVIRTUAL (User$Companion, newArray, (I)[LUser;) @@ -33,7 +33,7 @@ final class User$Companion : java/lang/Object, kotlinx/android/parcel/Parceler { public void write(android.os.Parcelable p0, android.os.Parcel p1, int p2) } -public static class User$Creator : java/lang/Object, android/os/Parcelable$Creator { +public final class User$Creator : java/lang/Object, android/os/Parcelable$Creator { public void () public final java.lang.Object createFromParcel(android.os.Parcel p0) { diff --git a/plugins/android-extensions/android-extensions-compiler/testData/parcel/codegen/customSimpleWithNewArray.txt b/plugins/android-extensions/android-extensions-compiler/testData/parcel/codegen/customSimpleWithNewArray.txt index 9e7343a3531..5b6fc6350aa 100644 --- a/plugins/android-extensions/android-extensions-compiler/testData/parcel/codegen/customSimpleWithNewArray.txt +++ b/plugins/android-extensions/android-extensions-compiler/testData/parcel/codegen/customSimpleWithNewArray.txt @@ -9,7 +9,7 @@ final class User$Companion : java/lang/Object, kotlinx/android/parcel/Parceler { public User[] newArray(int p0) { LABEL (L0) - LINENUMBER (18) + LINENUMBER (19) ILOAD (1) ANEWARRAY ARETURN @@ -18,7 +18,7 @@ final class User$Companion : java/lang/Object, kotlinx/android/parcel/Parceler { public android.os.Parcelable[] newArray(int p0) { LABEL (L0) - LINENUMBER (9) + LINENUMBER (10) ALOAD (0) ILOAD (1) INVOKEVIRTUAL (User$Companion, newArray, (I)[LUser;) @@ -31,7 +31,7 @@ final class User$Companion : java/lang/Object, kotlinx/android/parcel/Parceler { public void write(android.os.Parcelable p0, android.os.Parcel p1, int p2) } -public static class User$Creator : java/lang/Object, android/os/Parcelable$Creator { +public final class User$Creator : java/lang/Object, android/os/Parcelable$Creator { public void () public final java.lang.Object createFromParcel(android.os.Parcel p0) diff --git a/plugins/android-extensions/android-extensions-compiler/testData/parcel/codegen/describeContentsFromSuperType.txt b/plugins/android-extensions/android-extensions-compiler/testData/parcel/codegen/describeContentsFromSuperType.txt index 60e5809cea7..f197e391fdf 100644 --- a/plugins/android-extensions/android-extensions-compiler/testData/parcel/codegen/describeContentsFromSuperType.txt +++ b/plugins/android-extensions/android-extensions-compiler/testData/parcel/codegen/describeContentsFromSuperType.txt @@ -3,20 +3,14 @@ public abstract class AbstractUser : java/lang/Object, android/os/Parcelable { public int describeContents() { LABEL (L0) - LINENUMBER (7) + LINENUMBER (8) BIPUSH (100) IRETURN LABEL (L1) } } -public final class User$Companion : java/lang/Object { - private void () - - public void (kotlin.jvm.internal.DefaultConstructorMarker p0) -} - -public static class User$Creator : java/lang/Object, android/os/Parcelable$Creator { +public final class User$Creator : java/lang/Object, android/os/Parcelable$Creator { public void () public final java.lang.Object createFromParcel(android.os.Parcel p0) @@ -27,8 +21,6 @@ public static class User$Creator : java/lang/Object, android/os/Parcelable$Creat public final class User : AbstractUser { public final static User$Creator CREATOR - public final static User$Companion Companion - private final int age private final java.lang.String firstName diff --git a/plugins/android-extensions/android-extensions-compiler/testData/parcel/codegen/duplicatingClinit.txt b/plugins/android-extensions/android-extensions-compiler/testData/parcel/codegen/duplicatingClinit.txt index 5da1a980481..c3b6f267a22 100644 --- a/plugins/android-extensions/android-extensions-compiler/testData/parcel/codegen/duplicatingClinit.txt +++ b/plugins/android-extensions/android-extensions-compiler/testData/parcel/codegen/duplicatingClinit.txt @@ -10,7 +10,7 @@ public final class User$Companion : java/lang/Object { private static void test$annotations() } -public static class User$Creator : java/lang/Object, android/os/Parcelable$Creator { +public final class User$Creator : java/lang/Object, android/os/Parcelable$Creator { public void () public final java.lang.Object createFromParcel(android.os.Parcel p0) diff --git a/plugins/android-extensions/android-extensions-compiler/testData/parcel/codegen/listInsideList.txt b/plugins/android-extensions/android-extensions-compiler/testData/parcel/codegen/listInsideList.txt index 0c2bd5c5890..30cd0909dde 100644 --- a/plugins/android-extensions/android-extensions-compiler/testData/parcel/codegen/listInsideList.txt +++ b/plugins/android-extensions/android-extensions-compiler/testData/parcel/codegen/listInsideList.txt @@ -1,4 +1,4 @@ -public static class Test$Creator : java/lang/Object, android/os/Parcelable$Creator { +public final class Test$Creator : java/lang/Object, android/os/Parcelable$Creator { public void () public final java.lang.Object createFromParcel(android.os.Parcel p0) diff --git a/plugins/android-extensions/android-extensions-compiler/testData/parcel/codegen/nullableNotNullSize.txt b/plugins/android-extensions/android-extensions-compiler/testData/parcel/codegen/nullableNotNullSize.txt index 5e2bfc82c69..557e0874573 100644 --- a/plugins/android-extensions/android-extensions-compiler/testData/parcel/codegen/nullableNotNullSize.txt +++ b/plugins/android-extensions/android-extensions-compiler/testData/parcel/codegen/nullableNotNullSize.txt @@ -1,4 +1,4 @@ -public static class TestNotNull$Creator : java/lang/Object, android/os/Parcelable$Creator { +public final class TestNotNull$Creator : java/lang/Object, android/os/Parcelable$Creator { public void () public final java.lang.Object createFromParcel(android.os.Parcel p0) @@ -33,7 +33,7 @@ public final class TestNotNull : java/lang/Object { } } -public static class TestNullable$Creator : java/lang/Object, android/os/Parcelable$Creator { +public final class TestNullable$Creator : java/lang/Object, android/os/Parcelable$Creator { public void () public final java.lang.Object createFromParcel(android.os.Parcel p0) diff --git a/plugins/android-extensions/android-extensions-compiler/testData/parcel/codegen/parcelable.txt b/plugins/android-extensions/android-extensions-compiler/testData/parcel/codegen/parcelable.txt index 2d528fac15f..d8a0c924d03 100644 --- a/plugins/android-extensions/android-extensions-compiler/testData/parcel/codegen/parcelable.txt +++ b/plugins/android-extensions/android-extensions-compiler/testData/parcel/codegen/parcelable.txt @@ -1,10 +1,4 @@ -public final class test/Foo$Companion : java/lang/Object { - private void () - - public void (kotlin.jvm.internal.DefaultConstructorMarker p0) -} - -public static 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 () public final java.lang.Object createFromParcel(android.os.Parcel p0) { @@ -29,16 +23,9 @@ public static class test/Foo$Creator : java/lang/Object, android/os/Parcelable$C public final class test/Foo : java/lang/Object, android/os/Parcelable { public final static test.Foo$Creator CREATOR - public final static test.Foo$Companion Companion - private final android.os.Parcelable parcelable static void () { - NEW - DUP - ACONST_NULL - INVOKESPECIAL (test/Foo$Companion, , (Lkotlin/jvm/internal/DefaultConstructorMarker;)V) - PUTSTATIC (Companion, Ltest/Foo$Companion;) NEW DUP INVOKESPECIAL (test/Foo$Creator, , ()V) diff --git a/plugins/android-extensions/android-extensions-compiler/testData/parcel/codegen/serializable.txt b/plugins/android-extensions/android-extensions-compiler/testData/parcel/codegen/serializable.txt index ab3d0d97823..3277a721e4e 100644 --- a/plugins/android-extensions/android-extensions-compiler/testData/parcel/codegen/serializable.txt +++ b/plugins/android-extensions/android-extensions-compiler/testData/parcel/codegen/serializable.txt @@ -10,7 +10,7 @@ public final class SerializableSimple : java/lang/Object, java/io/Serializable { public final java.lang.String getB() } -public static class User$Creator : java/lang/Object, android/os/Parcelable$Creator { +public final class User$Creator : java/lang/Object, android/os/Parcelable$Creator { public void () public final java.lang.Object createFromParcel(android.os.Parcel p0) { diff --git a/plugins/android-extensions/android-extensions-compiler/testData/parcel/codegen/simple.txt b/plugins/android-extensions/android-extensions-compiler/testData/parcel/codegen/simple.txt index 469b6ba2919..b4aa3d433b3 100644 --- a/plugins/android-extensions/android-extensions-compiler/testData/parcel/codegen/simple.txt +++ b/plugins/android-extensions/android-extensions-compiler/testData/parcel/codegen/simple.txt @@ -1,4 +1,4 @@ -public static class User$Creator : java/lang/Object, android/os/Parcelable$Creator { +public final class User$Creator : java/lang/Object, android/os/Parcelable$Creator { public void () public final java.lang.Object createFromParcel(android.os.Parcel p0) { diff --git a/plugins/android-extensions/android-extensions-compiler/testData/parcel/codegen/simpleList.txt b/plugins/android-extensions/android-extensions-compiler/testData/parcel/codegen/simpleList.txt index 1d411580473..f3a8bd5384f 100644 --- a/plugins/android-extensions/android-extensions-compiler/testData/parcel/codegen/simpleList.txt +++ b/plugins/android-extensions/android-extensions-compiler/testData/parcel/codegen/simpleList.txt @@ -1,4 +1,4 @@ -public static class Test$Creator : java/lang/Object, android/os/Parcelable$Creator { +public final class Test$Creator : java/lang/Object, android/os/Parcelable$Creator { public void () public final java.lang.Object createFromParcel(android.os.Parcel p0) diff --git a/plugins/android-extensions/android-extensions-compiler/testData/parcel/codegen/size.txt b/plugins/android-extensions/android-extensions-compiler/testData/parcel/codegen/size.txt index 5f4119a43df..5fa32d85a3c 100644 --- a/plugins/android-extensions/android-extensions-compiler/testData/parcel/codegen/size.txt +++ b/plugins/android-extensions/android-extensions-compiler/testData/parcel/codegen/size.txt @@ -1,4 +1,4 @@ -public static class Test$Creator : java/lang/Object, android/os/Parcelable$Creator { +public final class Test$Creator : java/lang/Object, android/os/Parcelable$Creator { public void () public final java.lang.Object createFromParcel(android.os.Parcel p0) { @@ -88,7 +88,7 @@ public final class Test : java/lang/Object, android/os/Parcelable { } } -public static class TestF$Creator : java/lang/Object, android/os/Parcelable$Creator { +public final class TestF$Creator : java/lang/Object, android/os/Parcelable$Creator { public void () public final java.lang.Object createFromParcel(android.os.Parcel p0) {