diff --git a/idea/src/org/jetbrains/kotlin/idea/actions/generate/KotlinGenerateToStringAction.kt b/idea/src/org/jetbrains/kotlin/idea/actions/generate/KotlinGenerateToStringAction.kt index 52f92694da2..9de3ad2a465 100644 --- a/idea/src/org/jetbrains/kotlin/idea/actions/generate/KotlinGenerateToStringAction.kt +++ b/idea/src/org/jetbrains/kotlin/idea/actions/generate/KotlinGenerateToStringAction.kt @@ -43,6 +43,7 @@ import org.jetbrains.kotlin.resolve.BindingContext import org.jetbrains.kotlin.resolve.descriptorUtil.builtIns import org.jetbrains.kotlin.resolve.descriptorUtil.getSuperClassOrAny import org.jetbrains.kotlin.resolve.source.getPsi +import org.jetbrains.kotlin.types.isNullable import org.jetbrains.kotlin.utils.addToStdlib.lastIsInstanceOrNull private fun ClassDescriptor.findDeclaredToString(checkSupers: Boolean): FunctionDescriptor? { @@ -118,7 +119,10 @@ class KotlinGenerateToStringAction : KotlinGenerateMemberActionBase "\${java.util.Arrays.toString($ref)}" + KotlinBuiltIns.isArray(type) || KotlinBuiltIns.isPrimitiveArray(type) -> { + val dot = if (type.isNullable()) "?." else "." + "\${$ref${dot}contentToString()}" + } KotlinBuiltIns.isString(type) -> "'$$ref'" else -> "$$ref" } diff --git a/idea/testData/codeInsight/generate/toString/multipeTemplates/arrays.kt.after b/idea/testData/codeInsight/generate/toString/multipeTemplates/arrays.kt.after index bce33a0746b..a71e52ded8a 100644 --- a/idea/testData/codeInsight/generate/toString/multipeTemplates/arrays.kt.after +++ b/idea/testData/codeInsight/generate/toString/multipeTemplates/arrays.kt.after @@ -1,5 +1,3 @@ -import java.util.Arrays - // GENERATOR: MULTIPLE_TEMPLATES class A(val n: IntArray, val s: Array) { val f: Float = 1.0f @@ -10,8 +8,8 @@ class A(val n: IntArray, val s: Array) { override fun toString(): String { return "A(" + - "n=${Arrays.toString(n)}, " + - "s=${Arrays.toString(s)}, " + + "n=${n.contentToString()}, " + + "s=${s.contentToString()}, " + "f=$f" + ")" } diff --git a/idea/testData/codeInsight/generate/toString/singleTemplate/arrays.kt.after b/idea/testData/codeInsight/generate/toString/singleTemplate/arrays.kt.after index 415524a34f6..6088854e594 100644 --- a/idea/testData/codeInsight/generate/toString/singleTemplate/arrays.kt.after +++ b/idea/testData/codeInsight/generate/toString/singleTemplate/arrays.kt.after @@ -1,5 +1,3 @@ -import java.util.Arrays - // GENERATOR: SINGLE_TEMPLATE class A(val n: IntArray, val s: Array) { val f: Float = 1.0f @@ -9,6 +7,6 @@ class A(val n: IntArray, val s: Array) { } override fun toString(): String { - return "A(n=${Arrays.toString(n)}, s=${Arrays.toString(s)}, f=$f)" + return "A(n=${n.contentToString()}, s=${s.contentToString()}, f=$f)" } } \ No newline at end of file diff --git a/idea/testData/codeInsight/generate/toString/singleTemplate/nullableArrays.kt b/idea/testData/codeInsight/generate/toString/singleTemplate/nullableArrays.kt new file mode 100644 index 00000000000..bfae2808998 --- /dev/null +++ b/idea/testData/codeInsight/generate/toString/singleTemplate/nullableArrays.kt @@ -0,0 +1,8 @@ +// GENERATOR: SINGLE_TEMPLATE +class A(val n: IntArray?, val s: Array) { + val f: Float = 1.0f + + fun foo() { + + } +} \ No newline at end of file diff --git a/idea/testData/codeInsight/generate/toString/singleTemplate/nullableArrays.kt.after b/idea/testData/codeInsight/generate/toString/singleTemplate/nullableArrays.kt.after new file mode 100644 index 00000000000..d51f401e078 --- /dev/null +++ b/idea/testData/codeInsight/generate/toString/singleTemplate/nullableArrays.kt.after @@ -0,0 +1,12 @@ +// GENERATOR: SINGLE_TEMPLATE +class A(val n: IntArray?, val s: Array) { + val f: Float = 1.0f + + fun foo() { + + } + + override fun toString(): String { + return "A(n=${n?.contentToString()}, s=${s.contentToString()}, f=$f)" + } +} \ No newline at end of file diff --git a/idea/tests/org/jetbrains/kotlin/idea/codeInsight/generate/GenerateToStringActionTestGenerated.java b/idea/tests/org/jetbrains/kotlin/idea/codeInsight/generate/GenerateToStringActionTestGenerated.java index f31b2fe7ed5..d1ee0e2abe5 100644 --- a/idea/tests/org/jetbrains/kotlin/idea/codeInsight/generate/GenerateToStringActionTestGenerated.java +++ b/idea/tests/org/jetbrains/kotlin/idea/codeInsight/generate/GenerateToStringActionTestGenerated.java @@ -167,6 +167,11 @@ public class GenerateToStringActionTestGenerated extends AbstractGenerateToStrin runTest("idea/testData/codeInsight/generate/toString/singleTemplate/noVars.kt"); } + @TestMetadata("nullableArrays.kt") + public void testNullableArrays() throws Exception { + runTest("idea/testData/codeInsight/generate/toString/singleTemplate/nullableArrays.kt"); + } + @TestMetadata("singleVar.kt") public void testSingleVar() throws Exception { runTest("idea/testData/codeInsight/generate/toString/singleTemplate/singleVar.kt");