From 64187b40c9f12e8c583832a94e82172f8a7805c0 Mon Sep 17 00:00:00 2001 From: Roman Golyshev Date: Tue, 28 Jul 2020 19:10:39 +0300 Subject: [PATCH] FIR Completion: Prevent immediate completion in number literals - This is copied from the original KotlinCompletionContributor --- .../noCompletionAfterNumberLiteral1.kt | 5 ++++ .../noCompletionAfterNumberLiteral2.kt | 6 +++++ .../test/JSBasicCompletionTestGenerated.java | 10 +++++++ .../test/JvmBasicCompletionTestGenerated.java | 10 +++++++ .../KotlinFirCompletionContributor.kt | 27 +++++++++++++++++++ 5 files changed, 58 insertions(+) create mode 100644 idea/idea-completion/testData/basic/common/primitiveCompletion/noCompletionAfterNumberLiteral1.kt create mode 100644 idea/idea-completion/testData/basic/common/primitiveCompletion/noCompletionAfterNumberLiteral2.kt diff --git a/idea/idea-completion/testData/basic/common/primitiveCompletion/noCompletionAfterNumberLiteral1.kt b/idea/idea-completion/testData/basic/common/primitiveCompletion/noCompletionAfterNumberLiteral1.kt new file mode 100644 index 00000000000..d0defd9c382 --- /dev/null +++ b/idea/idea-completion/testData/basic/common/primitiveCompletion/noCompletionAfterNumberLiteral1.kt @@ -0,0 +1,5 @@ +fun test() { + 3 +} + +// NOTHING_ELSE \ No newline at end of file diff --git a/idea/idea-completion/testData/basic/common/primitiveCompletion/noCompletionAfterNumberLiteral2.kt b/idea/idea-completion/testData/basic/common/primitiveCompletion/noCompletionAfterNumberLiteral2.kt new file mode 100644 index 00000000000..129e6b6accd --- /dev/null +++ b/idea/idea-completion/testData/basic/common/primitiveCompletion/noCompletionAfterNumberLiteral2.kt @@ -0,0 +1,6 @@ +fun test() { + 3. +} + +// INVOCATION_COUNT: 0 +// NOTHING_ELSE \ No newline at end of file diff --git a/idea/idea-completion/tests/org/jetbrains/kotlin/idea/completion/test/JSBasicCompletionTestGenerated.java b/idea/idea-completion/tests/org/jetbrains/kotlin/idea/completion/test/JSBasicCompletionTestGenerated.java index 0dacaf4cc65..fea699bbb3e 100644 --- a/idea/idea-completion/tests/org/jetbrains/kotlin/idea/completion/test/JSBasicCompletionTestGenerated.java +++ b/idea/idea-completion/tests/org/jetbrains/kotlin/idea/completion/test/JSBasicCompletionTestGenerated.java @@ -2307,6 +2307,16 @@ public class JSBasicCompletionTestGenerated extends AbstractJSBasicCompletionTes runTest("idea/idea-completion/testData/basic/common/primitiveCompletion/localVariablesAndFunctionsFromNestedScope.kt"); } + @TestMetadata("noCompletionAfterNumberLiteral1.kt") + public void testNoCompletionAfterNumberLiteral1() throws Exception { + runTest("idea/idea-completion/testData/basic/common/primitiveCompletion/noCompletionAfterNumberLiteral1.kt"); + } + + @TestMetadata("noCompletionAfterNumberLiteral2.kt") + public void testNoCompletionAfterNumberLiteral2() throws Exception { + runTest("idea/idea-completion/testData/basic/common/primitiveCompletion/noCompletionAfterNumberLiteral2.kt"); + } + @TestMetadata("nullableCompletion.kt") public void testNullableCompletion() throws Exception { runTest("idea/idea-completion/testData/basic/common/primitiveCompletion/nullableCompletion.kt"); diff --git a/idea/idea-completion/tests/org/jetbrains/kotlin/idea/completion/test/JvmBasicCompletionTestGenerated.java b/idea/idea-completion/tests/org/jetbrains/kotlin/idea/completion/test/JvmBasicCompletionTestGenerated.java index e4121862b82..6c1cb0c5074 100644 --- a/idea/idea-completion/tests/org/jetbrains/kotlin/idea/completion/test/JvmBasicCompletionTestGenerated.java +++ b/idea/idea-completion/tests/org/jetbrains/kotlin/idea/completion/test/JvmBasicCompletionTestGenerated.java @@ -2307,6 +2307,16 @@ public class JvmBasicCompletionTestGenerated extends AbstractJvmBasicCompletionT runTest("idea/idea-completion/testData/basic/common/primitiveCompletion/localVariablesAndFunctionsFromNestedScope.kt"); } + @TestMetadata("noCompletionAfterNumberLiteral1.kt") + public void testNoCompletionAfterNumberLiteral1() throws Exception { + runTest("idea/idea-completion/testData/basic/common/primitiveCompletion/noCompletionAfterNumberLiteral1.kt"); + } + + @TestMetadata("noCompletionAfterNumberLiteral2.kt") + public void testNoCompletionAfterNumberLiteral2() throws Exception { + runTest("idea/idea-completion/testData/basic/common/primitiveCompletion/noCompletionAfterNumberLiteral2.kt"); + } + @TestMetadata("nullableCompletion.kt") public void testNullableCompletion() throws Exception { runTest("idea/idea-completion/testData/basic/common/primitiveCompletion/nullableCompletion.kt"); diff --git a/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/completion/KotlinFirCompletionContributor.kt b/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/completion/KotlinFirCompletionContributor.kt index be4bf4491d0..e1ed35c8f01 100644 --- a/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/completion/KotlinFirCompletionContributor.kt +++ b/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/completion/KotlinFirCompletionContributor.kt @@ -8,11 +8,13 @@ package org.jetbrains.kotlin.idea.completion import com.intellij.codeInsight.completion.* import com.intellij.codeInsight.lookup.LookupElementBuilder import com.intellij.patterns.PlatformPatterns +import com.intellij.patterns.PsiJavaPatterns import com.intellij.util.ProcessingContext import org.jetbrains.kotlin.idea.frontend.api.getAnalysisSessionFor import org.jetbrains.kotlin.idea.frontend.api.symbols.* import org.jetbrains.kotlin.idea.frontend.api.types.KtType import org.jetbrains.kotlin.idea.references.mainReference +import org.jetbrains.kotlin.lexer.KtTokens import org.jetbrains.kotlin.psi.KtFile import org.jetbrains.kotlin.psi.KtLabelReferenceExpression import org.jetbrains.kotlin.psi.KtSimpleNameExpression @@ -26,6 +28,8 @@ class KotlinFirCompletionContributor : CompletionContributor() { private object KotlinHighLevelApiContributor : CompletionProvider() { override fun addCompletions(parameters: CompletionParameters, context: ProcessingContext, result: CompletionResultSet) { + if (shouldSuppressCompletion(parameters, result.prefixMatcher)) return + val originalFile = parameters.originalFile as? KtFile ?: return val reference = (parameters.position.parent as? KtSimpleNameExpression)?.mainReference ?: return @@ -69,6 +73,29 @@ private object KotlinHighLevelApiContributor : CompletionProvider): Boolean {