Write generic signature for autogenerated toArray

#KT-14195 Fixed
This commit is contained in:
Denis Zharkov
2016-10-05 15:43:44 +03:00
parent 3a100d4139
commit 900c442efd
3 changed files with 40 additions and 1 deletions
@@ -457,7 +457,8 @@ public class ImplementationBodyCodegen extends ClassBodyCodegen {
}
if (!hasGenericToArray) {
MethodVisitor mv = v.newMethod(NO_ORIGIN, ACC_PUBLIC, "toArray", "([Ljava/lang/Object;)[Ljava/lang/Object;", null, null);
MethodVisitor mv = v.newMethod(
NO_ORIGIN, ACC_PUBLIC, "toArray", "([Ljava/lang/Object;)[Ljava/lang/Object;", "<T:Ljava/lang/Object;>([TT;)[TT;", null);
InstructionAdapter iv = new InstructionAdapter(mv);
mv.visitCode();
@@ -0,0 +1,32 @@
// WITH_RUNTIME
// FILE: B.java
public class B<E> extends A<E> {
@Override
public <T> T[] toArray(T[] a) {
return a;
}
}
// FILE: main.kt
open class A<T> : Collection<T> {
override val size: Int
get() = TODO("not implemented") //To change initializer of created properties use File | Settings | File Templates.
override fun contains(element: T): Boolean {
TODO("not implemented") //To change body of created functions use File | Settings | File Templates.
}
override fun containsAll(elements: Collection<T>): Boolean {
TODO("not implemented") //To change body of created functions use File | Settings | File Templates.
}
override fun isEmpty(): Boolean {
TODO("not implemented") //To change body of created functions use File | Settings | File Templates.
}
override fun iterator(): Iterator<T> {
TODO("not implemented") //To change body of created functions use File | Settings | File Templates.
}
}
fun box() = B<String>().toArray(arrayOf("OK"))[0]
@@ -3615,6 +3615,12 @@ public class BlackBoxCodegenTestGenerated extends AbstractBlackBoxCodegenTest {
String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/codegen/box/collections/strList.kt");
doTest(fileName);
}
@TestMetadata("toArrayInJavaClass.kt")
public void testToArrayInJavaClass() throws Exception {
String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/codegen/box/collections/toArrayInJavaClass.kt");
doTest(fileName);
}
}
@TestMetadata("compiler/testData/codegen/box/compatibility")