From 0d8f64353afe08a5cb0df11f681363188ba892c7 Mon Sep 17 00:00:00 2001 From: Denis Zharkov Date: Fri, 17 Feb 2017 17:50:43 +0300 Subject: [PATCH] Fix JVM signature mapping for multi-dimensional arrays #KT-11314 Fixed --- .../codegen/signature/JvmSignatureWriter.java | 3 ++- .../genericArrayInObjectLiteralConstructor.kt | 14 ++++++++++++++ .../genericArrayInObjectLiteralConstructor.txt | 11 +++++++++++ .../codegen/ir/IrBlackBoxCodegenTestGenerated.java | 6 ++++++ .../codegen/BlackBoxCodegenTestGenerated.java | 6 ++++++ .../test/semantics/JsCodegenBoxTestGenerated.java | 6 ++++++ 6 files changed, 45 insertions(+), 1 deletion(-) create mode 100644 compiler/testData/codegen/box/arrays/genericArrayInObjectLiteralConstructor.kt create mode 100644 compiler/testData/codegen/light-analysis/arrays/genericArrayInObjectLiteralConstructor.txt diff --git a/compiler/backend/src/org/jetbrains/kotlin/codegen/signature/JvmSignatureWriter.java b/compiler/backend/src/org/jetbrains/kotlin/codegen/signature/JvmSignatureWriter.java index f67b797e25b..341100dfc15 100644 --- a/compiler/backend/src/org/jetbrains/kotlin/codegen/signature/JvmSignatureWriter.java +++ b/compiler/backend/src/org/jetbrains/kotlin/codegen/signature/JvmSignatureWriter.java @@ -18,6 +18,7 @@ package org.jetbrains.kotlin.codegen.signature; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; +import org.jetbrains.kotlin.codegen.AsmUtil; import org.jetbrains.kotlin.load.kotlin.JvmDescriptorTypeWriter; import org.jetbrains.kotlin.resolve.jvm.jvmSignature.JvmMethodGenericSignature; import org.jetbrains.kotlin.resolve.jvm.jvmSignature.JvmMethodParameterKind; @@ -57,7 +58,7 @@ public class JvmSignatureWriter extends JvmDescriptorTypeWriter { return; case Type.ARRAY: writeArrayType(); - writeAsmType(asmType.getElementType()); + writeAsmType(AsmUtil.correctElementType(asmType)); writeArrayEnd(); return; default: diff --git a/compiler/testData/codegen/box/arrays/genericArrayInObjectLiteralConstructor.kt b/compiler/testData/codegen/box/arrays/genericArrayInObjectLiteralConstructor.kt new file mode 100644 index 00000000000..0493164e585 --- /dev/null +++ b/compiler/testData/codegen/box/arrays/genericArrayInObjectLiteralConstructor.kt @@ -0,0 +1,14 @@ +// WITH_RUNTIME +abstract class Table( + val content: Array> +) + +fun box(): String { + val x = object : Table( + Array(1, { + x-> Array(1, {y -> "OK"}) + }) + ) {} + + return x.content[0][0] +} diff --git a/compiler/testData/codegen/light-analysis/arrays/genericArrayInObjectLiteralConstructor.txt b/compiler/testData/codegen/light-analysis/arrays/genericArrayInObjectLiteralConstructor.txt new file mode 100644 index 00000000000..786bce33058 --- /dev/null +++ b/compiler/testData/codegen/light-analysis/arrays/genericArrayInObjectLiteralConstructor.txt @@ -0,0 +1,11 @@ +@kotlin.Metadata +public final class GenericArrayInObjectLiteralConstructorKt { + public final static @org.jetbrains.annotations.NotNull method box(): java.lang.String +} + +@kotlin.Metadata +public abstract class Table { + private final @org.jetbrains.annotations.NotNull field content: java.lang.Object[][] + public method (@org.jetbrains.annotations.NotNull p0: java.lang.Object[][]): void + public final @org.jetbrains.annotations.NotNull method getContent(): java.lang.Object[][] +} diff --git a/compiler/tests-ir-jvm/tests/org/jetbrains/kotlin/codegen/ir/IrBlackBoxCodegenTestGenerated.java b/compiler/tests-ir-jvm/tests/org/jetbrains/kotlin/codegen/ir/IrBlackBoxCodegenTestGenerated.java index a45f16e79f1..db194bc194b 100644 --- a/compiler/tests-ir-jvm/tests/org/jetbrains/kotlin/codegen/ir/IrBlackBoxCodegenTestGenerated.java +++ b/compiler/tests-ir-jvm/tests/org/jetbrains/kotlin/codegen/ir/IrBlackBoxCodegenTestGenerated.java @@ -377,6 +377,12 @@ public class IrBlackBoxCodegenTestGenerated extends AbstractIrBlackBoxCodegenTes doTest(fileName); } + @TestMetadata("genericArrayInObjectLiteralConstructor.kt") + public void testGenericArrayInObjectLiteralConstructor() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/codegen/box/arrays/genericArrayInObjectLiteralConstructor.kt"); + doTest(fileName); + } + @TestMetadata("hashMap.kt") public void testHashMap() throws Exception { String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/codegen/box/arrays/hashMap.kt"); diff --git a/compiler/tests/org/jetbrains/kotlin/codegen/BlackBoxCodegenTestGenerated.java b/compiler/tests/org/jetbrains/kotlin/codegen/BlackBoxCodegenTestGenerated.java index 78c5dd2e2be..f03a06917d4 100644 --- a/compiler/tests/org/jetbrains/kotlin/codegen/BlackBoxCodegenTestGenerated.java +++ b/compiler/tests/org/jetbrains/kotlin/codegen/BlackBoxCodegenTestGenerated.java @@ -377,6 +377,12 @@ public class BlackBoxCodegenTestGenerated extends AbstractBlackBoxCodegenTest { doTest(fileName); } + @TestMetadata("genericArrayInObjectLiteralConstructor.kt") + public void testGenericArrayInObjectLiteralConstructor() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/codegen/box/arrays/genericArrayInObjectLiteralConstructor.kt"); + doTest(fileName); + } + @TestMetadata("hashMap.kt") public void testHashMap() throws Exception { String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/codegen/box/arrays/hashMap.kt"); diff --git a/js/js.tests/test/org/jetbrains/kotlin/js/test/semantics/JsCodegenBoxTestGenerated.java b/js/js.tests/test/org/jetbrains/kotlin/js/test/semantics/JsCodegenBoxTestGenerated.java index 5c247ae2c0c..87bb476ace3 100644 --- a/js/js.tests/test/org/jetbrains/kotlin/js/test/semantics/JsCodegenBoxTestGenerated.java +++ b/js/js.tests/test/org/jetbrains/kotlin/js/test/semantics/JsCodegenBoxTestGenerated.java @@ -527,6 +527,12 @@ public class JsCodegenBoxTestGenerated extends AbstractJsCodegenBoxTest { doTest(fileName); } + @TestMetadata("genericArrayInObjectLiteralConstructor.kt") + public void testGenericArrayInObjectLiteralConstructor() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/codegen/box/arrays/genericArrayInObjectLiteralConstructor.kt"); + doTest(fileName); + } + @TestMetadata("hashMap.kt") public void testHashMap() throws Exception { String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/codegen/box/arrays/hashMap.kt");