Parcelable: newArray() result type should be Object[] (KT-20717)
This commit is contained in:
+3
-3
@@ -296,7 +296,7 @@ open class ParcelableCodegenExtension : ExpressionCodegenExtension {
|
|||||||
val parcelableAsmType = codegen.typeMapper.mapType(parcelableClass)
|
val parcelableAsmType = codegen.typeMapper.mapType(parcelableClass)
|
||||||
|
|
||||||
createMethod(creatorClass, NEW_ARRAY,
|
createMethod(creatorClass, NEW_ARRAY,
|
||||||
builtIns.getArrayType(Variance.INVARIANT, parcelableClass.defaultType),
|
builtIns.getArrayType(Variance.INVARIANT, builtIns.anyType),
|
||||||
"size" to builtIns.intType
|
"size" to builtIns.intType
|
||||||
).write(codegen) {
|
).write(codegen) {
|
||||||
if (parcelerObject != null) {
|
if (parcelerObject != null) {
|
||||||
@@ -315,8 +315,8 @@ open class ParcelableCodegenExtension : ExpressionCodegenExtension {
|
|||||||
|
|
||||||
v.getstatic(containerAsmType.internalName, companionFieldName, companionAsmType.descriptor)
|
v.getstatic(containerAsmType.internalName, companionFieldName, companionAsmType.descriptor)
|
||||||
v.load(1, Type.INT_TYPE)
|
v.load(1, Type.INT_TYPE)
|
||||||
v.invokevirtual(companionAsmType.internalName, "newArray", "(I)[${containerAsmType.descriptor}", false)
|
v.invokevirtual(companionAsmType.internalName, "newArray", "(I)[Ljava/lang/Object;", false)
|
||||||
v.areturn(Type.getType("[L$parcelableAsmType;"))
|
v.areturn(Type.getType("[Ljava/lang/Object;"))
|
||||||
|
|
||||||
return@write
|
return@write
|
||||||
}
|
}
|
||||||
|
|||||||
+1
-1
@@ -155,7 +155,7 @@ abstract class AbstractParcelBoxTest : CodegenTestCase() {
|
|||||||
|
|
||||||
process.waitFor(3, TimeUnit.MINUTES)
|
process.waitFor(3, TimeUnit.MINUTES)
|
||||||
if (process.exitValue() != 0) {
|
if (process.exitValue() != 0) {
|
||||||
throw AssertionError(classFileFactory.createText())
|
throw AssertionError("Process exited with exit code ${process.exitValue()} \n" + classFileFactory.createText())
|
||||||
}
|
}
|
||||||
} finally {
|
} finally {
|
||||||
if (!dirForTestClasses.deleteRecursively()) {
|
if (!dirForTestClasses.deleteRecursively()) {
|
||||||
|
|||||||
+1
@@ -53,6 +53,7 @@ class ParcelBoxTest : AbstractParcelBoxTest() {
|
|||||||
fun testCustomSerializerSimple() = doTest("customSerializerSimple")
|
fun testCustomSerializerSimple() = doTest("customSerializerSimple")
|
||||||
fun testCustomSerializerWriteWith() = doTest("customSerializerWriteWith")
|
fun testCustomSerializerWriteWith() = doTest("customSerializerWriteWith")
|
||||||
fun testCustomSerializerBoxing() = doTest("customSerializerBoxing")
|
fun testCustomSerializerBoxing() = doTest("customSerializerBoxing")
|
||||||
|
fun testKt20717() = doTest("kt20717")
|
||||||
}
|
}
|
||||||
|
|
||||||
class ParcelBoxTestWithSerializableLikeExtension : AbstractParcelBoxTest() {
|
class ParcelBoxTestWithSerializableLikeExtension : AbstractParcelBoxTest() {
|
||||||
|
|||||||
+30
@@ -0,0 +1,30 @@
|
|||||||
|
// WITH_RUNTIME
|
||||||
|
|
||||||
|
@file:JvmName("TestKt")
|
||||||
|
package test
|
||||||
|
|
||||||
|
import kotlinx.android.parcel.*
|
||||||
|
import android.os.Parcel
|
||||||
|
import android.os.Parcelable
|
||||||
|
|
||||||
|
fun box() = doTest { creator ->
|
||||||
|
assert(creator.newArray(5) != null)
|
||||||
|
}
|
||||||
|
|
||||||
|
fun doTest(work: (Parcelable.Creator<DummyParcelable>) -> Unit): String {
|
||||||
|
val dummy = DummyParcelable(42)
|
||||||
|
|
||||||
|
val clazz = dummy.javaClass
|
||||||
|
val field = clazz.getDeclaredField("CREATOR")
|
||||||
|
val creator = field.get(dummy) as Parcelable.Creator<DummyParcelable>
|
||||||
|
|
||||||
|
val parcel = Parcel.obtain()
|
||||||
|
dummy.writeToParcel(parcel, 0)
|
||||||
|
parcel.setDataPosition(0)
|
||||||
|
|
||||||
|
work(creator)
|
||||||
|
return "OK"
|
||||||
|
}
|
||||||
|
|
||||||
|
@Parcelize
|
||||||
|
data class DummyParcelable(val int: Int): Parcelable
|
||||||
plugins/android-extensions/android-extensions-compiler/testData/parcel/codegen/IBinderIInterface.txt
Vendored
+1
-1
@@ -47,7 +47,7 @@ public final class User$Creator : java/lang/Object, android/os/Parcelable$Creato
|
|||||||
LABEL (L4)
|
LABEL (L4)
|
||||||
}
|
}
|
||||||
|
|
||||||
public final User[] newArray(int p0)
|
public final java.lang.Object[] newArray(int p0)
|
||||||
}
|
}
|
||||||
|
|
||||||
public final class User : java/lang/Object, android/os/Parcelable {
|
public final class User : java/lang/Object, android/os/Parcelable {
|
||||||
|
|||||||
+1
-1
@@ -3,7 +3,7 @@ public final class User$Creator : java/lang/Object, android/os/Parcelable$Creato
|
|||||||
|
|
||||||
public final java.lang.Object createFromParcel(android.os.Parcel p0)
|
public final java.lang.Object createFromParcel(android.os.Parcel p0)
|
||||||
|
|
||||||
public final User[] newArray(int p0)
|
public final java.lang.Object[] newArray(int p0)
|
||||||
}
|
}
|
||||||
|
|
||||||
public final class User : java/lang/Object, android/os/Parcelable {
|
public final class User : java/lang/Object, android/os/Parcelable {
|
||||||
|
|||||||
+1
-1
@@ -18,7 +18,7 @@ public final class test/Foo$Creator : java/lang/Object, android/os/Parcelable$Cr
|
|||||||
LABEL (L1)
|
LABEL (L1)
|
||||||
}
|
}
|
||||||
|
|
||||||
public final test.Foo[] newArray(int p0)
|
public final java.lang.Object[] newArray(int p0)
|
||||||
}
|
}
|
||||||
|
|
||||||
public final class test/Foo : java/lang/Object, android/os/Parcelable {
|
public final class test/Foo : java/lang/Object, android/os/Parcelable {
|
||||||
|
|||||||
+1
-1
@@ -121,7 +121,7 @@ public final class test/Foo$Creator : java/lang/Object, android/os/Parcelable$Cr
|
|||||||
LABEL (L1)
|
LABEL (L1)
|
||||||
}
|
}
|
||||||
|
|
||||||
public final test.Foo[] newArray(int p0)
|
public final java.lang.Object[] newArray(int p0)
|
||||||
}
|
}
|
||||||
|
|
||||||
public final class test/Foo : java/lang/Object, android/os/Parcelable {
|
public final class test/Foo : java/lang/Object, android/os/Parcelable {
|
||||||
|
|||||||
Vendored
+1
-1
@@ -48,7 +48,7 @@ public final class User$Creator : java/lang/Object, android/os/Parcelable$Creato
|
|||||||
LABEL (L1)
|
LABEL (L1)
|
||||||
}
|
}
|
||||||
|
|
||||||
public final User[] newArray(int p0) {
|
public final java.lang.Object[] newArray(int p0) {
|
||||||
LABEL (L0)
|
LABEL (L0)
|
||||||
ILOAD (1)
|
ILOAD (1)
|
||||||
ANEWARRAY
|
ANEWARRAY
|
||||||
|
|||||||
+2
-2
@@ -36,11 +36,11 @@ public final class User$Creator : java/lang/Object, android/os/Parcelable$Creato
|
|||||||
|
|
||||||
public final java.lang.Object createFromParcel(android.os.Parcel p0)
|
public final java.lang.Object createFromParcel(android.os.Parcel p0)
|
||||||
|
|
||||||
public final User[] newArray(int p0) {
|
public final java.lang.Object[] newArray(int p0) {
|
||||||
LABEL (L0)
|
LABEL (L0)
|
||||||
GETSTATIC (Companion, LUser$Companion;)
|
GETSTATIC (Companion, LUser$Companion;)
|
||||||
ILOAD (1)
|
ILOAD (1)
|
||||||
INVOKEVIRTUAL (User$Companion, newArray, (I)[LUser;)
|
INVOKEVIRTUAL (User$Companion, newArray, (I)[Ljava/lang/Object;)
|
||||||
ARETURN
|
ARETURN
|
||||||
LABEL (L1)
|
LABEL (L1)
|
||||||
}
|
}
|
||||||
|
|||||||
+1
-1
@@ -15,7 +15,7 @@ public final class User$Creator : java/lang/Object, android/os/Parcelable$Creato
|
|||||||
|
|
||||||
public final java.lang.Object createFromParcel(android.os.Parcel p0)
|
public final java.lang.Object createFromParcel(android.os.Parcel p0)
|
||||||
|
|
||||||
public final User[] newArray(int p0)
|
public final java.lang.Object[] newArray(int p0)
|
||||||
}
|
}
|
||||||
|
|
||||||
public final class User : AbstractUser {
|
public final class User : AbstractUser {
|
||||||
|
|||||||
plugins/android-extensions/android-extensions-compiler/testData/parcel/codegen/duplicatingClinit.txt
Vendored
+1
-1
@@ -15,7 +15,7 @@ public final class User$Creator : java/lang/Object, android/os/Parcelable$Creato
|
|||||||
|
|
||||||
public final java.lang.Object createFromParcel(android.os.Parcel p0)
|
public final java.lang.Object createFromParcel(android.os.Parcel p0)
|
||||||
|
|
||||||
public final User[] newArray(int p0)
|
public final java.lang.Object[] newArray(int p0)
|
||||||
}
|
}
|
||||||
|
|
||||||
public final class User : java/lang/Object, android/os/Parcelable {
|
public final class User : java/lang/Object, android/os/Parcelable {
|
||||||
|
|||||||
Vendored
+1
-1
@@ -3,7 +3,7 @@ public final class Test$Creator : java/lang/Object, android/os/Parcelable$Creato
|
|||||||
|
|
||||||
public final java.lang.Object createFromParcel(android.os.Parcel p0)
|
public final java.lang.Object createFromParcel(android.os.Parcel p0)
|
||||||
|
|
||||||
public final Test[] newArray(int p0)
|
public final java.lang.Object[] newArray(int p0)
|
||||||
}
|
}
|
||||||
|
|
||||||
public final class Test : java/lang/Object {
|
public final class Test : java/lang/Object {
|
||||||
|
|||||||
+2
-2
@@ -3,7 +3,7 @@ public final class TestNotNull$Creator : java/lang/Object, android/os/Parcelable
|
|||||||
|
|
||||||
public final java.lang.Object createFromParcel(android.os.Parcel p0)
|
public final java.lang.Object createFromParcel(android.os.Parcel p0)
|
||||||
|
|
||||||
public final TestNotNull[] newArray(int p0)
|
public final java.lang.Object[] newArray(int p0)
|
||||||
}
|
}
|
||||||
|
|
||||||
public final class TestNotNull : java/lang/Object {
|
public final class TestNotNull : java/lang/Object {
|
||||||
@@ -38,7 +38,7 @@ public final class TestNullable$Creator : java/lang/Object, android/os/Parcelabl
|
|||||||
|
|
||||||
public final java.lang.Object createFromParcel(android.os.Parcel p0)
|
public final java.lang.Object createFromParcel(android.os.Parcel p0)
|
||||||
|
|
||||||
public final TestNullable[] newArray(int p0)
|
public final java.lang.Object[] newArray(int p0)
|
||||||
}
|
}
|
||||||
|
|
||||||
public final class TestNullable : java/lang/Object {
|
public final class TestNullable : java/lang/Object {
|
||||||
|
|||||||
Vendored
+1
-1
@@ -17,7 +17,7 @@ public final class test/Foo$Creator : java/lang/Object, android/os/Parcelable$Cr
|
|||||||
LABEL (L1)
|
LABEL (L1)
|
||||||
}
|
}
|
||||||
|
|
||||||
public final test.Foo[] newArray(int p0)
|
public final java.lang.Object[] newArray(int p0)
|
||||||
}
|
}
|
||||||
|
|
||||||
public final class test/Foo : java/lang/Object, android/os/Parcelable {
|
public final class test/Foo : java/lang/Object, android/os/Parcelable {
|
||||||
|
|||||||
Vendored
+1
-1
@@ -31,7 +31,7 @@ public final class User$Creator : java/lang/Object, android/os/Parcelable$Creato
|
|||||||
LABEL (L1)
|
LABEL (L1)
|
||||||
}
|
}
|
||||||
|
|
||||||
public final User[] newArray(int p0)
|
public final java.lang.Object[] newArray(int p0)
|
||||||
}
|
}
|
||||||
|
|
||||||
public final class User : java/lang/Object, android/os/Parcelable {
|
public final class User : java/lang/Object, android/os/Parcelable {
|
||||||
|
|||||||
+1
-1
@@ -25,7 +25,7 @@ public final class User$Creator : java/lang/Object, android/os/Parcelable$Creato
|
|||||||
in: Landroid/os/Parcel;
|
in: Landroid/os/Parcel;
|
||||||
}
|
}
|
||||||
|
|
||||||
public final User[] newArray(int p0)
|
public final java.lang.Object[] newArray(int p0)
|
||||||
}
|
}
|
||||||
|
|
||||||
public final class User : java/lang/Object, android/os/Parcelable {
|
public final class User : java/lang/Object, android/os/Parcelable {
|
||||||
|
|||||||
Vendored
+1
-1
@@ -3,7 +3,7 @@ public final class Test$Creator : java/lang/Object, android/os/Parcelable$Creato
|
|||||||
|
|
||||||
public final java.lang.Object createFromParcel(android.os.Parcel p0)
|
public final java.lang.Object createFromParcel(android.os.Parcel p0)
|
||||||
|
|
||||||
public final Test[] newArray(int p0)
|
public final java.lang.Object[] newArray(int p0)
|
||||||
}
|
}
|
||||||
|
|
||||||
public final class Test : java/lang/Object {
|
public final class Test : java/lang/Object {
|
||||||
|
|||||||
+2
-2
@@ -25,7 +25,7 @@ public final class Test$Creator : java/lang/Object, android/os/Parcelable$Creato
|
|||||||
LABEL (L4)
|
LABEL (L4)
|
||||||
}
|
}
|
||||||
|
|
||||||
public final Test[] newArray(int p0)
|
public final java.lang.Object[] newArray(int p0)
|
||||||
}
|
}
|
||||||
|
|
||||||
public final class Test : java/lang/Object, android/os/Parcelable {
|
public final class Test : java/lang/Object, android/os/Parcelable {
|
||||||
@@ -115,7 +115,7 @@ public final class TestF$Creator : java/lang/Object, android/os/Parcelable$Creat
|
|||||||
LABEL (L4)
|
LABEL (L4)
|
||||||
}
|
}
|
||||||
|
|
||||||
public final TestF[] newArray(int p0)
|
public final java.lang.Object[] newArray(int p0)
|
||||||
}
|
}
|
||||||
|
|
||||||
public final class TestF : java/lang/Object, android/os/Parcelable {
|
public final class TestF : java/lang/Object, android/os/Parcelable {
|
||||||
|
|||||||
Reference in New Issue
Block a user