From d955f8e0d3a1e2e730519a39ffeea462d1e032bc Mon Sep 17 00:00:00 2001 From: Roman Golyshev Date: Mon, 1 Mar 2021 17:55:20 +0300 Subject: [PATCH] FIR IDE: Add simple shortening completion handler for properties --- .../multifile/TopLevelPropertyImport-1.kt | 1 + .../multifile/TopLevelPropertyImport.kt.after | 1 + .../KotlinFirLookupElementFactory.kt | 19 ++++++++++++++++++- 3 files changed, 20 insertions(+), 1 deletion(-) diff --git a/idea/idea-completion/testData/handlers/multifile/TopLevelPropertyImport-1.kt b/idea/idea-completion/testData/handlers/multifile/TopLevelPropertyImport-1.kt index 4cd77425af1..01bc8f1e782 100644 --- a/idea/idea-completion/testData/handlers/multifile/TopLevelPropertyImport-1.kt +++ b/idea/idea-completion/testData/handlers/multifile/TopLevelPropertyImport-1.kt @@ -1,3 +1,4 @@ +// FIR_COMPARISON package some fun other() { diff --git a/idea/idea-completion/testData/handlers/multifile/TopLevelPropertyImport.kt.after b/idea/idea-completion/testData/handlers/multifile/TopLevelPropertyImport.kt.after index 951975fd6a8..ab307ae7d49 100644 --- a/idea/idea-completion/testData/handlers/multifile/TopLevelPropertyImport.kt.after +++ b/idea/idea-completion/testData/handlers/multifile/TopLevelPropertyImport.kt.after @@ -1,3 +1,4 @@ +// FIR_COMPARISON package some import other.someProp diff --git a/idea/idea-fir/src/org/jetbrains/kotlin/idea/completion/KotlinFirLookupElementFactory.kt b/idea/idea-fir/src/org/jetbrains/kotlin/idea/completion/KotlinFirLookupElementFactory.kt index 78a2c71d95d..a80ee208cec 100644 --- a/idea/idea-fir/src/org/jetbrains/kotlin/idea/completion/KotlinFirLookupElementFactory.kt +++ b/idea/idea-fir/src/org/jetbrains/kotlin/idea/completion/KotlinFirLookupElementFactory.kt @@ -115,7 +115,9 @@ private class VariableLookupElementFactory { if (setterName != null) "$getterName()/$setterName()" else "$getterName()" private fun createInsertHandler(symbol: KtVariableLikeSymbol): InsertHandler { - return QuotedNamesAwareInsertionHandler(symbol.name) + val callableId = symbol.callableIdIfExists ?: return QuotedNamesAwareInsertionHandler(symbol.name) + + return ShorteningVariableInsertionHandler(callableId) } private val KtVariableLikeSymbol.callableIdIfExists: FqName? @@ -320,6 +322,21 @@ private class ShorteningFunctionInsertionHandler( } } +private class ShorteningVariableInsertionHandler(private val name: FqName) : InsertHandler { + override fun handleInsert(context: InsertionContext, item: LookupElement) { + val targetFile = context.file as? KtFile ?: return + + context.document.replaceString( + context.startOffset, + context.tailOffset, + name.withRootPrefixIfNeeded().render() + ) + context.commitDocument() + + shortenReferences(targetFile, TextRange(context.startOffset, context.tailOffset)) + } +} + private open class QuotedNamesAwareInsertionHandler(private val name: Name) : InsertHandler { override fun handleInsert(context: InsertionContext, item: LookupElement) { val startOffset = context.startOffset