From 400ea13f074e905d5fa7a298576b6051c17a40ca Mon Sep 17 00:00:00 2001 From: Ilya Muradyan Date: Fri, 17 Apr 2020 01:38:24 +0300 Subject: [PATCH] Fix scripting REPL completion after literals --- .../ReplCompletionAndErrorsAnalysisTest.kt | 17 +++++++++++++++++ .../compiler/impl/KJvmReplCompleter.kt | 14 +++++++++++++- 2 files changed, 30 insertions(+), 1 deletion(-) diff --git a/plugins/scripting/scripting-ide-services-test/test/org/jetbrains/kotlin/scripting/ide_services/ReplCompletionAndErrorsAnalysisTest.kt b/plugins/scripting/scripting-ide-services-test/test/org/jetbrains/kotlin/scripting/ide_services/ReplCompletionAndErrorsAnalysisTest.kt index 203a14bbbe7..56977d2e15a 100644 --- a/plugins/scripting/scripting-ide-services-test/test/org/jetbrains/kotlin/scripting/ide_services/ReplCompletionAndErrorsAnalysisTest.kt +++ b/plugins/scripting/scripting-ide-services-test/test/org/jetbrains/kotlin/scripting/ide_services/ReplCompletionAndErrorsAnalysisTest.kt @@ -62,6 +62,23 @@ class ReplCompletionAndErrorsAnalysisTest : TestCase() { } } + @Test + fun testNoVariantsAfterLiterals() = test { + fun testNoVariants(testCode: String, testCursor: Int? = null) = run { + doComplete + code = testCode + cursor = testCursor ?: testCode.length + expect { + completionsMode(ComparisonType.EQUALS) + } + } + + testNoVariants("val x1 = 42") + testNoVariants("val x2 = 42.42") + testNoVariants("val x3 = 'v'") + testNoVariants("val x4 = \"str42\"") + } + @Test fun testPackagesImport() = test { diff --git a/plugins/scripting/scripting-ide-services/src/org/jetbrains/kotlin/scripting/ide_services/compiler/impl/KJvmReplCompleter.kt b/plugins/scripting/scripting-ide-services/src/org/jetbrains/kotlin/scripting/ide_services/compiler/impl/KJvmReplCompleter.kt index 5a502dbb73b..33d2752e9ca 100644 --- a/plugins/scripting/scripting-ide-services/src/org/jetbrains/kotlin/scripting/ide_services/compiler/impl/KJvmReplCompleter.kt +++ b/plugins/scripting/scripting-ide-services/src/org/jetbrains/kotlin/scripting/ide_services/compiler/impl/KJvmReplCompleter.kt @@ -23,6 +23,7 @@ import org.jetbrains.kotlin.psi.* import org.jetbrains.kotlin.psi.psiUtil.endOffset import org.jetbrains.kotlin.psi.psiUtil.quoteIfNeeded import org.jetbrains.kotlin.psi.psiUtil.startOffset +import org.jetbrains.kotlin.psi.stubs.elements.KtStubElementTypes import org.jetbrains.kotlin.renderer.ClassifierNamePolicy import org.jetbrains.kotlin.renderer.ParameterNameRenderingPolicy import org.jetbrains.kotlin.resolve.BindingContext @@ -90,6 +91,17 @@ private class KJvmReplCompleter( if (simpleExpression != null) { val inDescriptor: DeclarationDescriptor = simpleExpression.getResolutionScope(bindingContext, resolutionFacade).ownerDescriptor val prefix = element.text.substring(0, cursor - element.startOffset) + + val elementParent = element.parent + if (prefix.isEmpty() && elementParent is KtBinaryExpression) { + when (elementParent.node.firstChildNode.elementType) { + KtStubElementTypes.INTEGER_CONSTANT, + KtStubElementTypes.FLOAT_CONSTANT, + KtStubElementTypes.CHARACTER_CONSTANT, + KtStubElementTypes.STRING_TEMPLATE -> return@gen + } + } + isSortNeeded = false descriptors = ReferenceVariantsHelper( bindingContext, @@ -246,7 +258,7 @@ private class KJvmReplCompleter( } } - private inner class VisibilityFilter( + private class VisibilityFilter( private val inDescriptor: DeclarationDescriptor ) : (DeclarationDescriptor) -> Boolean { override fun invoke(descriptor: DeclarationDescriptor): Boolean {