diff --git a/plugins/android-extensions/android-extensions-compiler/src/org/jetbrains/kotlin/android/parcel/ParcelableDeclarationChecker.kt b/plugins/android-extensions/android-extensions-compiler/src/org/jetbrains/kotlin/android/parcel/ParcelableDeclarationChecker.kt
index 6be70cb7f5c..83a2b0abd5c 100644
--- a/plugins/android-extensions/android-extensions-compiler/src/org/jetbrains/kotlin/android/parcel/ParcelableDeclarationChecker.kt
+++ b/plugins/android-extensions/android-extensions-compiler/src/org/jetbrains/kotlin/android/parcel/ParcelableDeclarationChecker.kt
@@ -40,8 +40,9 @@ import org.jetbrains.kotlin.resolve.jvm.annotations.findJvmFieldAnnotation
import org.jetbrains.kotlin.types.TypeUtils
import org.jetbrains.kotlin.types.isError
-private val ANDROID_PARCELABLE_CLASS_FQNAME = FqName("android.os.Parcelable")
-internal val ANDROID_PARCEL_CLASS_FQNAME = FqName("android.os.Parcel")
+val ANDROID_PARCELABLE_CLASS_FQNAME = FqName("android.os.Parcelable")
+val ANDROID_PARCELABLE_CREATOR_CLASS_FQNAME = FqName("android.os.Parcelable.Creator")
+val ANDROID_PARCEL_CLASS_FQNAME = FqName("android.os.Parcel")
class ParcelableDeclarationChecker : SimpleDeclarationChecker {
private companion object {
@@ -132,6 +133,13 @@ class ParcelableDeclarationChecker : SimpleDeclarationChecker {
return
}
+ for (companion in declaration.companionObjects) {
+ if (companion.name == "CREATOR") {
+ val reportElement = companion.nameIdentifier ?: companion
+ diagnosticHolder.reportFromPlugin(ErrorsAndroid.CREATOR_DEFINITION_IS_NOT_ALLOWED.on(reportElement), DefaultErrorMessagesAndroid)
+ }
+ }
+
val sealedOrAbstract = declaration.modifierList?.let { it.getModifier(KtTokens.ABSTRACT_KEYWORD) ?: it.getModifier(KtTokens.SEALED_KEYWORD) }
if (sealedOrAbstract != null) {
diagnosticHolder.reportFromPlugin(ErrorsAndroid.PARCELABLE_SHOULD_BE_INSTANTIABLE.on(sealedOrAbstract), DefaultErrorMessagesAndroid)
diff --git a/plugins/android-extensions/android-extensions-idea/testData/android/parcel/checker/customCreator.kt b/plugins/android-extensions/android-extensions-idea/testData/android/parcel/checker/customCreator.kt
index a7937556d1e..ea673620b15 100644
--- a/plugins/android-extensions/android-extensions-idea/testData/android/parcel/checker/customCreator.kt
+++ b/plugins/android-extensions/android-extensions-idea/testData/android/parcel/checker/customCreator.kt
@@ -8,9 +8,17 @@ import android.os.Parcel
class A(val a: String) : Parcelable {
companion object {
@JvmField
- val CREATOR = object : Parcelable.Creator {
+ val CREATOR = object : Parcelable.Creator {
override fun createFromParcel(source: Parcel): A = A("")
override fun newArray(size: Int) = arrayOfNulls(size)
}
}
+}
+
+@Parcelize
+class B(val b: String) : Parcelable {
+ companion object CREATOR : Parcelable.Creator {
+ override fun createFromParcel(source: Parcel): B = B("")
+ override fun newArray(size: Int) = arrayOfNulls(size)
+ }
}
\ No newline at end of file