diff --git a/idea/src/org/jetbrains/kotlin/idea/quickfix/expectactual/CreateExpectedFix.kt b/idea/src/org/jetbrains/kotlin/idea/quickfix/expectactual/CreateExpectedFix.kt index 34218f86378..9e92bfebb66 100644 --- a/idea/src/org/jetbrains/kotlin/idea/quickfix/expectactual/CreateExpectedFix.kt +++ b/idea/src/org/jetbrains/kotlin/idea/quickfix/expectactual/CreateExpectedFix.kt @@ -27,8 +27,8 @@ import org.jetbrains.kotlin.idea.core.toDescriptor import org.jetbrains.kotlin.idea.core.util.DescriptorMemberChooserObject import org.jetbrains.kotlin.idea.inspections.findExistingEditor import org.jetbrains.kotlin.idea.quickfix.KotlinIntentionActionsFactory +import org.jetbrains.kotlin.idea.refactoring.getExpressionShortText import org.jetbrains.kotlin.idea.refactoring.introduce.showErrorHint -import org.jetbrains.kotlin.idea.refactoring.renderTrimmed import org.jetbrains.kotlin.idea.util.application.executeWriteCommand import org.jetbrains.kotlin.idea.util.liftToExpected import org.jetbrains.kotlin.idea.util.module @@ -176,9 +176,11 @@ private tailrec fun findClasses(elements: List, module: Modu private fun showUnknownTypesDialog(project: Project, declarationsWithNonExistentClasses: List): Boolean = declarationsWithNonExistentClasses.isEmpty() || showOkNoDialog( "Unknown types", - declarationsWithNonExistentClasses.joinToString(prefix = "These declarations cannot be transformed:\n", separator = "\n") { - it.renderTrimmed() - }, + declarationsWithNonExistentClasses.joinToString( + prefix = "These declarations cannot be transformed:\n", + separator = "\n", + transform = ::getExpressionShortText + ), project ) @@ -187,7 +189,7 @@ private fun showUnknownTypesError(element: KtNamedDeclaration) { showErrorHint( element.project, editor, - "You cannot create the expect declaration from:\n${element.renderTrimmed()}", + "You cannot create the expect declaration from:\n${getExpressionShortText(element)}", "Unknown types" ) } diff --git a/idea/src/org/jetbrains/kotlin/idea/refactoring/elementRenderingUtils.kt b/idea/src/org/jetbrains/kotlin/idea/refactoring/elementRenderingUtils.kt index d2990406af1..ec7c7922956 100644 --- a/idea/src/org/jetbrains/kotlin/idea/refactoring/elementRenderingUtils.kt +++ b/idea/src/org/jetbrains/kotlin/idea/refactoring/elementRenderingUtils.kt @@ -59,6 +59,15 @@ fun KtElement.renderTrimmed(): String { builder.append(')') } + override fun visitParameterList(list: KtParameterList) { + list.parameters.join(prefix = "(", postfix = ")") + } + + override fun visitParameter(parameter: KtParameter) { + builder.append("${parameter.name}: ") + parameter.typeReference?.accept(this) + } + override fun visitLabeledExpression(expression: KtLabeledExpression) { expression.baseExpression?.accept(this) } @@ -116,6 +125,10 @@ fun KtElement.renderTrimmed(): String { expression.selectorExpression?.accept(this) } + override fun visitTypeReference(typeReference: KtTypeReference) { + builder.append(typeReference.text) + } + override fun visitThisExpression(expression: KtThisExpression) { builder.append("this") expression.getLabelName()?.let { builder.append("@$it") } @@ -233,7 +246,7 @@ fun KtElement.renderTrimmed(): String { it.accept(this) } function.name?.let { builder.append(" $it") } - function.valueParameters.asSequence().mapNotNull { it.typeReference }.joinTo(builder, prefix = "(", postfix = ")") + function.valueParameterList?.accept(this) function.equalsToken?.let { builder.append(" = ") } function.bodyExpression?.accept(this) } @@ -246,12 +259,12 @@ fun KtElement.renderTrimmed(): String { } override fun visitPrimaryConstructor(constructor: KtPrimaryConstructor) { - constructor.valueParameters.asSequence().mapNotNull { it.typeReference }.joinTo(builder, prefix = "(", postfix = ")") + constructor.valueParameterList?.accept(this) } override fun visitSecondaryConstructor(constructor: KtSecondaryConstructor) { builder.append("constructor") - constructor.valueParameters.asSequence().mapNotNull { it.typeReference }.joinTo(builder, prefix = "(", postfix = ")") + constructor.valueParameterList?.accept(this) constructor.bodyExpression?.accept(this) }