From 240ff08069fda8d9b5a958f8da0bce7ca32b3769 Mon Sep 17 00:00:00 2001 From: Toshiaki Kameyama Date: Tue, 5 Feb 2019 12:51:54 +0900 Subject: [PATCH] Specify type: escape with backticks if need #KT-29677 Fixed --- .../intentions/SpecifyTypeExplicitlyIntention.kt | 15 ++++++++++++++- .../specifyTypeExplicitly/backticked.kt | 2 ++ .../specifyTypeExplicitly/backticked.kt.after | 2 ++ .../idea/intentions/IntentionTestGenerated.java | 5 +++++ 4 files changed, 23 insertions(+), 1 deletion(-) create mode 100644 idea/testData/intentions/specifyTypeExplicitly/backticked.kt create mode 100644 idea/testData/intentions/specifyTypeExplicitly/backticked.kt.after diff --git a/idea/src/org/jetbrains/kotlin/idea/intentions/SpecifyTypeExplicitlyIntention.kt b/idea/src/org/jetbrains/kotlin/idea/intentions/SpecifyTypeExplicitlyIntention.kt index 16753dc047f..cf829faab71 100644 --- a/idea/src/org/jetbrains/kotlin/idea/intentions/SpecifyTypeExplicitlyIntention.kt +++ b/idea/src/org/jetbrains/kotlin/idea/intentions/SpecifyTypeExplicitlyIntention.kt @@ -33,12 +33,14 @@ import org.jetbrains.kotlin.idea.caches.resolve.getResolutionFacade import org.jetbrains.kotlin.idea.caches.resolve.resolveToDescriptorIfAny import org.jetbrains.kotlin.idea.core.ShortenReferences import org.jetbrains.kotlin.idea.core.setType +import org.jetbrains.kotlin.idea.core.unquote import org.jetbrains.kotlin.idea.util.IdeDescriptorRenderers import org.jetbrains.kotlin.idea.util.application.runWriteAction import org.jetbrains.kotlin.idea.util.getResolutionScope import org.jetbrains.kotlin.idea.util.getResolvableApproximations import org.jetbrains.kotlin.psi.* import org.jetbrains.kotlin.psi.psiUtil.* +import org.jetbrains.kotlin.resolve.DescriptorToSourceUtils import org.jetbrains.kotlin.resolve.lazy.BodyResolveMode import org.jetbrains.kotlin.types.* import org.jetbrains.kotlin.types.typeUtil.makeNotNullable @@ -183,7 +185,18 @@ class SpecifyTypeExplicitlyIntention : SelfTargetingRangeIntention, defaultItem: KotlinType ) : ChooseValueExpression(items, defaultItem) { override fun getLookupString(element: KotlinType) = IdeDescriptorRenderers.SOURCE_CODE_SHORT_NAMES_NO_ANNOTATIONS.renderType(element) - override fun getResult(element: KotlinType) = IdeDescriptorRenderers.SOURCE_CODE.renderType(element) + + override fun getResult(element: KotlinType): String { + val renderType = IdeDescriptorRenderers.SOURCE_CODE.renderType(element) + val descriptor = element.constructor.declarationDescriptor + if (descriptor?.name?.asString() == renderType) { + val className = (DescriptorToSourceUtils.descriptorToDeclaration(descriptor) as? KtClass)?.nameIdentifier?.text + if (className != null && className != className.unquote()) { + return className + } + } + return renderType + } } fun addTypeAnnotation(editor: Editor?, declaration: KtCallableDeclaration, exprType: KotlinType) { diff --git a/idea/testData/intentions/specifyTypeExplicitly/backticked.kt b/idea/testData/intentions/specifyTypeExplicitly/backticked.kt new file mode 100644 index 00000000000..66be7b9ab5f --- /dev/null +++ b/idea/testData/intentions/specifyTypeExplicitly/backticked.kt @@ -0,0 +1,2 @@ +class `1` +val x = `1`() \ No newline at end of file diff --git a/idea/testData/intentions/specifyTypeExplicitly/backticked.kt.after b/idea/testData/intentions/specifyTypeExplicitly/backticked.kt.after new file mode 100644 index 00000000000..158fdd3c91c --- /dev/null +++ b/idea/testData/intentions/specifyTypeExplicitly/backticked.kt.after @@ -0,0 +1,2 @@ +class `1` +val x: `1` = `1`() \ No newline at end of file diff --git a/idea/tests/org/jetbrains/kotlin/idea/intentions/IntentionTestGenerated.java b/idea/tests/org/jetbrains/kotlin/idea/intentions/IntentionTestGenerated.java index 4d34d83eed0..6b9a6c3b4b9 100644 --- a/idea/tests/org/jetbrains/kotlin/idea/intentions/IntentionTestGenerated.java +++ b/idea/tests/org/jetbrains/kotlin/idea/intentions/IntentionTestGenerated.java @@ -16216,6 +16216,11 @@ public class IntentionTestGenerated extends AbstractIntentionTest { runTest("idea/testData/intentions/specifyTypeExplicitly/anonymousObject.kt"); } + @TestMetadata("backticked.kt") + public void testBackticked() throws Exception { + runTest("idea/testData/intentions/specifyTypeExplicitly/backticked.kt"); + } + @TestMetadata("badCaretPosition.kt") public void testBadCaretPosition() throws Exception { runTest("idea/testData/intentions/specifyTypeExplicitly/badCaretPosition.kt");