From da5c963a437fa316f326a6ef2b16f0931065f597 Mon Sep 17 00:00:00 2001 From: Kirill Rakhman Date: Wed, 6 Apr 2016 23:03:31 +0200 Subject: [PATCH] Fix let implement quickfix label for object expressions Fixes #KT-11782 --- .../kotlin/idea/quickfix/LetImplementInterfaceFix.kt | 6 ++++-- .../letObjectImplementAdditionalInterface.kt | 11 +++++++++++ .../letObjectImplementAdditionalInterface.kt.after | 11 +++++++++++ .../kotlin/idea/quickfix/QuickFixTestGenerated.java | 6 ++++++ 4 files changed, 32 insertions(+), 2 deletions(-) create mode 100644 idea/testData/quickfix/typeMismatch/letObjectImplementAdditionalInterface.kt create mode 100644 idea/testData/quickfix/typeMismatch/letObjectImplementAdditionalInterface.kt.after diff --git a/idea/src/org/jetbrains/kotlin/idea/quickfix/LetImplementInterfaceFix.kt b/idea/src/org/jetbrains/kotlin/idea/quickfix/LetImplementInterfaceFix.kt index f10588fdd25..a977394b8b5 100644 --- a/idea/src/org/jetbrains/kotlin/idea/quickfix/LetImplementInterfaceFix.kt +++ b/idea/src/org/jetbrains/kotlin/idea/quickfix/LetImplementInterfaceFix.kt @@ -26,6 +26,7 @@ import org.jetbrains.kotlin.idea.util.ShortenReferences import org.jetbrains.kotlin.psi.KtClassOrObject import org.jetbrains.kotlin.psi.KtFile import org.jetbrains.kotlin.psi.KtPsiFactory +import org.jetbrains.kotlin.psi.psiUtil.isObjectLiteral import org.jetbrains.kotlin.types.KotlinType import org.jetbrains.kotlin.types.TypeUtils import org.jetbrains.kotlin.types.typeUtil.isInterface @@ -52,7 +53,8 @@ class LetImplementInterfaceFix( expectedTypeNameSourceCode = IdeDescriptorRenderers.SOURCE_CODE.renderType(expectedTypeNotNullable) val verb = if (expressionType.isInterface()) "extend" else "implement" - prefix = "Let '${expressionType.renderShort()}' $verb" + val typeDescription = if (element.isObjectLiteral()) "the anonymous object" else "'${expressionType.renderShort()}'" + prefix = "Let $typeDescription $verb" validExpectedType = with (expectedType) { isInterface() && @@ -72,4 +74,4 @@ class LetImplementInterfaceFix( val entryElement = element.addSuperTypeListEntry(superTypeEntry) ShortenReferences.DEFAULT.process(entryElement) } -} \ No newline at end of file +} diff --git a/idea/testData/quickfix/typeMismatch/letObjectImplementAdditionalInterface.kt b/idea/testData/quickfix/typeMismatch/letObjectImplementAdditionalInterface.kt new file mode 100644 index 00000000000..7c5baa9ddd3 --- /dev/null +++ b/idea/testData/quickfix/typeMismatch/letObjectImplementAdditionalInterface.kt @@ -0,0 +1,11 @@ +// "Let the anonymous object implement interface 'A'" "true" +package let.implement + +fun bar() { + foo(object {}) +} + +fun foo(a: A) { +} + +interface A \ No newline at end of file diff --git a/idea/testData/quickfix/typeMismatch/letObjectImplementAdditionalInterface.kt.after b/idea/testData/quickfix/typeMismatch/letObjectImplementAdditionalInterface.kt.after new file mode 100644 index 00000000000..8b08e715ca8 --- /dev/null +++ b/idea/testData/quickfix/typeMismatch/letObjectImplementAdditionalInterface.kt.after @@ -0,0 +1,11 @@ +// "Let the anonymous object implement interface 'A'" "true" +package let.implement + +fun bar() { + foo(object : A {}) +} + +fun foo(a: A) { +} + +interface A \ No newline at end of file diff --git a/idea/tests/org/jetbrains/kotlin/idea/quickfix/QuickFixTestGenerated.java b/idea/tests/org/jetbrains/kotlin/idea/quickfix/QuickFixTestGenerated.java index f559a6ea01c..f0ff5ed4be0 100644 --- a/idea/tests/org/jetbrains/kotlin/idea/quickfix/QuickFixTestGenerated.java +++ b/idea/tests/org/jetbrains/kotlin/idea/quickfix/QuickFixTestGenerated.java @@ -7405,6 +7405,12 @@ public class QuickFixTestGenerated extends AbstractQuickFixTest { doTest(fileName); } + @TestMetadata("letObjectImplementAdditionalInterface.kt") + public void testLetObjectImplementAdditionalInterface() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("idea/testData/quickfix/typeMismatch/letObjectImplementAdditionalInterface.kt"); + doTest(fileName); + } + @TestMetadata("letStringImplementInterface.kt") public void testLetStringImplementInterface() throws Exception { String fileName = KotlinTestUtils.navigationMetadata("idea/testData/quickfix/typeMismatch/letStringImplementInterface.kt");