From d93e5d3dc03508155f0d4ba117403b5b4e6f8f4d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Steven=20Sch=C3=A4fer?= Date: Wed, 13 May 2020 16:08:18 +0200 Subject: [PATCH] Parcelize: Enable ParcelableDeclarationChecker with the parcelize plugin Previously, the ParcelableDeclarationChecker was only enabled as part of the view extensions. In particular, the checker was not enabled for the parcelize test suite. --- .../synthetic/AndroidComponentRegistrar.kt | 22 ++++++++++++++----- .../parcel/box/customSerializerBoxing.kt | 2 +- .../parcel/box/customSerializerSimple.kt | 2 +- .../parcel/box/customSerializerWriteWith.kt | 2 +- .../parcel/codegen/listInsideList.ir.txt | 2 +- .../testData/parcel/codegen/listInsideList.kt | 3 ++- .../parcel/codegen/listInsideList.txt | 2 +- .../parcel/codegen/nullableNotNullSize.ir.txt | 4 ++-- .../parcel/codegen/nullableNotNullSize.kt | 5 +++-- .../parcel/codegen/nullableNotNullSize.txt | 4 ++-- .../testData/parcel/codegen/serializeValue.kt | 5 +---- .../testData/parcel/codegen/simpleList.ir.txt | 2 +- .../testData/parcel/codegen/simpleList.kt | 3 ++- .../testData/parcel/codegen/simpleList.txt | 2 +- 14 files changed, 35 insertions(+), 25 deletions(-) diff --git a/plugins/android-extensions/android-extensions-compiler/src/org/jetbrains/kotlin/android/synthetic/AndroidComponentRegistrar.kt b/plugins/android-extensions/android-extensions-compiler/src/org/jetbrains/kotlin/android/synthetic/AndroidComponentRegistrar.kt index 80bf8ec78a9..e6f63264cf8 100644 --- a/plugins/android-extensions/android-extensions-compiler/src/org/jetbrains/kotlin/android/synthetic/AndroidComponentRegistrar.kt +++ b/plugins/android-extensions/android-extensions-compiler/src/org/jetbrains/kotlin/android/synthetic/AndroidComponentRegistrar.kt @@ -107,6 +107,7 @@ class AndroidComponentRegistrar : ComponentRegistrar { IrGenerationExtension.registerExtension(project, ParcelableIrGeneratorExtension()) SyntheticResolveExtension.registerExtension(project, ParcelableResolveExtension()) ClassBuilderInterceptorExtension.registerExtension(project, ParcelableClinitClassBuilderInterceptorExtension()) + StorageComponentContainerContributor.registerExtension(project, ParcelizeDeclarationCheckerComponentContainerContributor()) } private fun parseVariant(s: String): AndroidVariant? { @@ -168,10 +169,19 @@ class AndroidExtensionPropertiesComponentContainerContributor : StorageComponent override fun registerModuleComponents( container: StorageComponentContainer, platform: TargetPlatform, moduleDescriptor: ModuleDescriptor ) { - if (!platform.isJvm()) return - - container.useInstance(AndroidExtensionPropertiesCallChecker()) - container.useInstance(ParcelableDeclarationChecker()) - container.useInstance(ParcelableAnnotationChecker()) + if (platform.isJvm()) { + container.useInstance(AndroidExtensionPropertiesCallChecker()) + } } -} \ No newline at end of file +} + +class ParcelizeDeclarationCheckerComponentContainerContributor : StorageComponentContainerContributor { + override fun registerModuleComponents( + container: StorageComponentContainer, platform: TargetPlatform, moduleDescriptor: ModuleDescriptor + ) { + if (platform.isJvm()) { + container.useInstance(ParcelableDeclarationChecker()) + container.useInstance(ParcelableAnnotationChecker()) + } + } +} diff --git a/plugins/android-extensions/android-extensions-compiler/testData/parcel/box/customSerializerBoxing.kt b/plugins/android-extensions/android-extensions-compiler/testData/parcel/box/customSerializerBoxing.kt index 357da96c8b6..afc8a135f8c 100644 --- a/plugins/android-extensions/android-extensions-compiler/testData/parcel/box/customSerializerBoxing.kt +++ b/plugins/android-extensions/android-extensions-compiler/testData/parcel/box/customSerializerBoxing.kt @@ -31,7 +31,7 @@ data class Test( @TypeParceler val c: Long, @TypeParceler val d: List, @TypeParceler val e: LongArray -) +) : Parcelable fun box() = parcelTest { parcel -> val test = Test(5, 5, 50L, listOf(1, 2, 3), longArrayOf(3, 2, 1)) diff --git a/plugins/android-extensions/android-extensions-compiler/testData/parcel/box/customSerializerSimple.kt b/plugins/android-extensions/android-extensions-compiler/testData/parcel/box/customSerializerSimple.kt index a3220bbf871..6368592ae64 100644 --- a/plugins/android-extensions/android-extensions-compiler/testData/parcel/box/customSerializerSimple.kt +++ b/plugins/android-extensions/android-extensions-compiler/testData/parcel/box/customSerializerSimple.kt @@ -32,7 +32,7 @@ data class Test( @TypeParceler val b: String, @TypeParceler val c: CharSequence, val d: @WriteWith String -) +) : Parcelable fun box() = parcelTest { parcel -> val test = Test("Abc", "Abc", "Abc", "Abc") diff --git a/plugins/android-extensions/android-extensions-compiler/testData/parcel/box/customSerializerWriteWith.kt b/plugins/android-extensions/android-extensions-compiler/testData/parcel/box/customSerializerWriteWith.kt index 8d079a14308..7c0203593b9 100644 --- a/plugins/android-extensions/android-extensions-compiler/testData/parcel/box/customSerializerWriteWith.kt +++ b/plugins/android-extensions/android-extensions-compiler/testData/parcel/box/customSerializerWriteWith.kt @@ -33,7 +33,7 @@ data class Test( val c: List<@WriteWith String>, val d: @WriteWith List, val e: @WriteWith List<@WriteWith String> -) +) : Parcelable fun box() = parcelTest { parcel -> val test = Test("Abc", "Abc", listOf("A", "bc"), listOf("A", "bc"), listOf("A", "bc")) diff --git a/plugins/android-extensions/android-extensions-compiler/testData/parcel/codegen/listInsideList.ir.txt b/plugins/android-extensions/android-extensions-compiler/testData/parcel/codegen/listInsideList.ir.txt index 91bd24c2a11..3d85188cabf 100644 --- a/plugins/android-extensions/android-extensions-compiler/testData/parcel/codegen/listInsideList.ir.txt +++ b/plugins/android-extensions/android-extensions-compiler/testData/parcel/codegen/listInsideList.ir.txt @@ -10,7 +10,7 @@ public final class Test$Creator : java/lang/Object, android/os/Parcelable$Creato public java.lang.Object[] newArray(int size) } -public final class Test : java/lang/Object { +public final class Test : java/lang/Object, android/os/Parcelable { public final static android.os.Parcelable$Creator CREATOR private final java.util.List names diff --git a/plugins/android-extensions/android-extensions-compiler/testData/parcel/codegen/listInsideList.kt b/plugins/android-extensions/android-extensions-compiler/testData/parcel/codegen/listInsideList.kt index 810a885debe..97e63e293b2 100644 --- a/plugins/android-extensions/android-extensions-compiler/testData/parcel/codegen/listInsideList.kt +++ b/plugins/android-extensions/android-extensions-compiler/testData/parcel/codegen/listInsideList.kt @@ -2,6 +2,7 @@ // WITH_RUNTIME import kotlinx.android.parcel.* +import android.os.Parcelable @Parcelize -class Test(val names: List>>) \ No newline at end of file +class Test(val names: List>>) : Parcelable \ No newline at end of file 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 c7beee8c920..dbd89b6639d 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 @@ -10,7 +10,7 @@ public final class Test$Creator : java/lang/Object, android/os/Parcelable$Creato public java.lang.Object[] newArray(int p0) } -public final class Test : java/lang/Object { +public final class Test : java/lang/Object, android/os/Parcelable { public final static android.os.Parcelable$Creator CREATOR private final java.util.List names diff --git a/plugins/android-extensions/android-extensions-compiler/testData/parcel/codegen/nullableNotNullSize.ir.txt b/plugins/android-extensions/android-extensions-compiler/testData/parcel/codegen/nullableNotNullSize.ir.txt index 3ec1af12ad1..0b1b0b8eab2 100644 --- a/plugins/android-extensions/android-extensions-compiler/testData/parcel/codegen/nullableNotNullSize.ir.txt +++ b/plugins/android-extensions/android-extensions-compiler/testData/parcel/codegen/nullableNotNullSize.ir.txt @@ -10,7 +10,7 @@ public final class TestNotNull$Creator : java/lang/Object, android/os/Parcelable public java.lang.Object[] newArray(int size) } -public final class TestNotNull : java/lang/Object { +public final class TestNotNull : java/lang/Object, android/os/Parcelable { public final static android.os.Parcelable$Creator CREATOR private final android.util.Size a @@ -49,7 +49,7 @@ public final class TestNullable$Creator : java/lang/Object, android/os/Parcelabl public java.lang.Object[] newArray(int size) } -public final class TestNullable : java/lang/Object { +public final class TestNullable : java/lang/Object, android/os/Parcelable { public final static android.os.Parcelable$Creator CREATOR private final android.util.Size a diff --git a/plugins/android-extensions/android-extensions-compiler/testData/parcel/codegen/nullableNotNullSize.kt b/plugins/android-extensions/android-extensions-compiler/testData/parcel/codegen/nullableNotNullSize.kt index 4b02fc3be6d..239db4e4444 100644 --- a/plugins/android-extensions/android-extensions-compiler/testData/parcel/codegen/nullableNotNullSize.kt +++ b/plugins/android-extensions/android-extensions-compiler/testData/parcel/codegen/nullableNotNullSize.kt @@ -3,9 +3,10 @@ import android.util.Size import kotlinx.android.parcel.* +import android.os.Parcelable @Parcelize -class TestNullable(val a: Size?) +class TestNullable(val a: Size?) : Parcelable @Parcelize -class TestNotNull(val a: Size) \ No newline at end of file +class TestNotNull(val a: Size) : Parcelable \ No newline at end of file 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 055a613755f..e43097d3454 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 @@ -10,7 +10,7 @@ public final class TestNotNull$Creator : java/lang/Object, android/os/Parcelable public java.lang.Object[] newArray(int p0) } -public final class TestNotNull : java/lang/Object { +public final class TestNotNull : java/lang/Object, android/os/Parcelable { public final static android.os.Parcelable$Creator CREATOR private final android.util.Size a @@ -49,7 +49,7 @@ public final class TestNullable$Creator : java/lang/Object, android/os/Parcelabl public java.lang.Object[] newArray(int p0) } -public final class TestNullable : java/lang/Object { +public final class TestNullable : java/lang/Object, android/os/Parcelable { public final static android.os.Parcelable$Creator CREATOR private final android.util.Size a diff --git a/plugins/android-extensions/android-extensions-compiler/testData/parcel/codegen/serializeValue.kt b/plugins/android-extensions/android-extensions-compiler/testData/parcel/codegen/serializeValue.kt index 283f22c223d..1fcbd142a9f 100644 --- a/plugins/android-extensions/android-extensions-compiler/testData/parcel/codegen/serializeValue.kt +++ b/plugins/android-extensions/android-extensions-compiler/testData/parcel/codegen/serializeValue.kt @@ -1,6 +1,3 @@ -// This test checks that we create calls to readValue/writeValue if there is no other -// way of serializing properties. In this case, this would fail at runtime. - // CURIOUS_ABOUT writeToParcel, createFromParcel, , describeContents // WITH_RUNTIME @@ -10,4 +7,4 @@ import android.os.Parcelable class Value(val x: Int) @Parcelize -class Test(val value: Value) : Parcelable +class Test(val value: @RawValue Value) : Parcelable diff --git a/plugins/android-extensions/android-extensions-compiler/testData/parcel/codegen/simpleList.ir.txt b/plugins/android-extensions/android-extensions-compiler/testData/parcel/codegen/simpleList.ir.txt index df0aced59a4..ac7e0b89047 100644 --- a/plugins/android-extensions/android-extensions-compiler/testData/parcel/codegen/simpleList.ir.txt +++ b/plugins/android-extensions/android-extensions-compiler/testData/parcel/codegen/simpleList.ir.txt @@ -10,7 +10,7 @@ public final class Test$Creator : java/lang/Object, android/os/Parcelable$Creato public java.lang.Object[] newArray(int size) } -public final class Test : java/lang/Object { +public final class Test : java/lang/Object, android/os/Parcelable { public final static android.os.Parcelable$Creator CREATOR private final java.util.List names diff --git a/plugins/android-extensions/android-extensions-compiler/testData/parcel/codegen/simpleList.kt b/plugins/android-extensions/android-extensions-compiler/testData/parcel/codegen/simpleList.kt index e0a2080312a..47f0c667927 100644 --- a/plugins/android-extensions/android-extensions-compiler/testData/parcel/codegen/simpleList.kt +++ b/plugins/android-extensions/android-extensions-compiler/testData/parcel/codegen/simpleList.kt @@ -2,6 +2,7 @@ // WITH_RUNTIME import kotlinx.android.parcel.* +import android.os.Parcelable @Parcelize -class Test(val names: List) \ No newline at end of file +class Test(val names: List) : Parcelable \ No newline at end of file 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 8f13546f1c8..610ee2ebf81 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 @@ -10,7 +10,7 @@ public final class Test$Creator : java/lang/Object, android/os/Parcelable$Creato public java.lang.Object[] newArray(int p0) } -public final class Test : java/lang/Object { +public final class Test : java/lang/Object, android/os/Parcelable { public final static android.os.Parcelable$Creator CREATOR private final java.util.List names