From 48fb3db7bab8c104a679ad43b6fb7d3ea830bf73 Mon Sep 17 00:00:00 2001 From: Simon Ogorodnik Date: Fri, 2 Mar 2018 20:07:32 +0300 Subject: [PATCH] Fix inserting variable name suggestion on non-enter char typing #KT-21933 fixed --- .../idea/completion/BasicCompletionSession.kt | 10 ---------- ...ariableOrParameterNameWithTypeCompletion.kt | 4 ++++ .../handlers/charFilter/VariableName.kt | 10 ++++++++++ .../handlers/charFilter/VariableName.kt.after | 10 ++++++++++ .../handlers/charFilter/VariableName2.kt | 10 ++++++++++ .../handlers/charFilter/VariableName2.kt.after | 10 ++++++++++ .../handlers/charFilter/VariableName3.kt | 10 ++++++++++ .../handlers/charFilter/VariableName3.kt.after | 10 ++++++++++ .../CompletionCharFilterTestGenerated.java | 18 ++++++++++++++++++ 9 files changed, 82 insertions(+), 10 deletions(-) create mode 100644 idea/idea-completion/testData/handlers/charFilter/VariableName.kt create mode 100644 idea/idea-completion/testData/handlers/charFilter/VariableName.kt.after create mode 100644 idea/idea-completion/testData/handlers/charFilter/VariableName2.kt create mode 100644 idea/idea-completion/testData/handlers/charFilter/VariableName2.kt.after create mode 100644 idea/idea-completion/testData/handlers/charFilter/VariableName3.kt create mode 100644 idea/idea-completion/testData/handlers/charFilter/VariableName3.kt.after diff --git a/idea/idea-completion/src/org/jetbrains/kotlin/idea/completion/BasicCompletionSession.kt b/idea/idea-completion/src/org/jetbrains/kotlin/idea/completion/BasicCompletionSession.kt index b7cbd5e1dc1..fec48f84851 100644 --- a/idea/idea-completion/src/org/jetbrains/kotlin/idea/completion/BasicCompletionSession.kt +++ b/idea/idea-completion/src/org/jetbrains/kotlin/idea/completion/BasicCompletionSession.kt @@ -501,11 +501,6 @@ class BasicCompletionSession( }) collector.restartCompletionOnPrefixChange(prefixPattern) - collector.addLookupElementPostProcessor { lookupElement -> - lookupElement.putUserData(KotlinCompletionCharFilter.HIDE_LOOKUP_ON_COLON, Unit) - lookupElement - } - variableNameAndTypeCompletion.addFromParametersInFile(position, resolutionFacade, isVisibleFilterCheckAlways) flushToResultSet() @@ -694,11 +689,6 @@ class BasicCompletionSession( }) collector.restartCompletionOnPrefixChange(prefixPattern) - collector.addLookupElementPostProcessor { lookupElement -> - lookupElement.putUserData(KotlinCompletionCharFilter.HIDE_LOOKUP_ON_COLON, Unit) - lookupElement - } - parameterNameAndTypeCompletion.addFromParametersInFile(position, resolutionFacade, isVisibleFilterCheckAlways) flushToResultSet() diff --git a/idea/idea-completion/src/org/jetbrains/kotlin/idea/completion/VariableOrParameterNameWithTypeCompletion.kt b/idea/idea-completion/src/org/jetbrains/kotlin/idea/completion/VariableOrParameterNameWithTypeCompletion.kt index 28d4140c8c5..4f6bae8dbf0 100644 --- a/idea/idea-completion/src/org/jetbrains/kotlin/idea/completion/VariableOrParameterNameWithTypeCompletion.kt +++ b/idea/idea-completion/src/org/jetbrains/kotlin/idea/completion/VariableOrParameterNameWithTypeCompletion.kt @@ -194,6 +194,10 @@ class VariableOrParameterNameWithTypeCompletion( fun create(parameterName: String, type: Type, shouldInsertType: Boolean, factory: BasicLookupElementFactory): LookupElement? { val typeLookupElement = type.createTypeLookupElement(factory) ?: return null val lookupElement = MyLookupElement(parameterName, type, typeLookupElement, shouldInsertType) + if (!shouldInsertType) { + lookupElement.putUserData(KotlinCompletionCharFilter.SUPPRESS_ITEM_SELECTION_BY_CHARS_ON_TYPING, Unit) + } + lookupElement.putUserData(KotlinCompletionCharFilter.HIDE_LOOKUP_ON_COLON, Unit) return lookupElement.suppressAutoInsertion() } } diff --git a/idea/idea-completion/testData/handlers/charFilter/VariableName.kt b/idea/idea-completion/testData/handlers/charFilter/VariableName.kt new file mode 100644 index 00000000000..6ed5b7f61aa --- /dev/null +++ b/idea/idea-completion/testData/handlers/charFilter/VariableName.kt @@ -0,0 +1,10 @@ +class Clz + + +fun foo() { + val cl +} + +// INVOCATION_COUNT: 0 +// ELEMENT_TEXT: clz +// CHAR: ' ' \ No newline at end of file diff --git a/idea/idea-completion/testData/handlers/charFilter/VariableName.kt.after b/idea/idea-completion/testData/handlers/charFilter/VariableName.kt.after new file mode 100644 index 00000000000..780017b34e4 --- /dev/null +++ b/idea/idea-completion/testData/handlers/charFilter/VariableName.kt.after @@ -0,0 +1,10 @@ +class Clz + + +fun foo() { + val cl +} + +// INVOCATION_COUNT: 0 +// ELEMENT_TEXT: clz +// CHAR: ' ' \ No newline at end of file diff --git a/idea/idea-completion/testData/handlers/charFilter/VariableName2.kt b/idea/idea-completion/testData/handlers/charFilter/VariableName2.kt new file mode 100644 index 00000000000..ba783c8fff9 --- /dev/null +++ b/idea/idea-completion/testData/handlers/charFilter/VariableName2.kt @@ -0,0 +1,10 @@ +class Clz + + +fun foo() { + val cl +} + +// INVOCATION_COUNT: 0 +// ELEMENT_TEXT: clz +// CHAR: ':' \ No newline at end of file diff --git a/idea/idea-completion/testData/handlers/charFilter/VariableName2.kt.after b/idea/idea-completion/testData/handlers/charFilter/VariableName2.kt.after new file mode 100644 index 00000000000..1ac5a63e6b8 --- /dev/null +++ b/idea/idea-completion/testData/handlers/charFilter/VariableName2.kt.after @@ -0,0 +1,10 @@ +class Clz + + +fun foo() { + val cl: +} + +// INVOCATION_COUNT: 0 +// ELEMENT_TEXT: clz +// CHAR: ':' \ No newline at end of file diff --git a/idea/idea-completion/testData/handlers/charFilter/VariableName3.kt b/idea/idea-completion/testData/handlers/charFilter/VariableName3.kt new file mode 100644 index 00000000000..75356f43ddb --- /dev/null +++ b/idea/idea-completion/testData/handlers/charFilter/VariableName3.kt @@ -0,0 +1,10 @@ +class Clz + + +fun foo() { + val cl +} + +// INVOCATION_COUNT: 0 +// ELEMENT_TEXT: clz +// CHAR: '=' \ No newline at end of file diff --git a/idea/idea-completion/testData/handlers/charFilter/VariableName3.kt.after b/idea/idea-completion/testData/handlers/charFilter/VariableName3.kt.after new file mode 100644 index 00000000000..5a2179c4d02 --- /dev/null +++ b/idea/idea-completion/testData/handlers/charFilter/VariableName3.kt.after @@ -0,0 +1,10 @@ +class Clz + + +fun foo() { + val cl= +} + +// INVOCATION_COUNT: 0 +// ELEMENT_TEXT: clz +// CHAR: '=' \ No newline at end of file diff --git a/idea/idea-completion/tests/org/jetbrains/kotlin/idea/completion/test/handlers/CompletionCharFilterTestGenerated.java b/idea/idea-completion/tests/org/jetbrains/kotlin/idea/completion/test/handlers/CompletionCharFilterTestGenerated.java index 62b035c68df..fcb4bfe25ce 100644 --- a/idea/idea-completion/tests/org/jetbrains/kotlin/idea/completion/test/handlers/CompletionCharFilterTestGenerated.java +++ b/idea/idea-completion/tests/org/jetbrains/kotlin/idea/completion/test/handlers/CompletionCharFilterTestGenerated.java @@ -192,4 +192,22 @@ public class CompletionCharFilterTestGenerated extends AbstractCompletionCharFil String fileName = KotlinTestUtils.navigationMetadata("idea/idea-completion/testData/handlers/charFilter/Space.kt"); doTest(fileName); } + + @TestMetadata("VariableName.kt") + public void testVariableName() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("idea/idea-completion/testData/handlers/charFilter/VariableName.kt"); + doTest(fileName); + } + + @TestMetadata("VariableName2.kt") + public void testVariableName2() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("idea/idea-completion/testData/handlers/charFilter/VariableName2.kt"); + doTest(fileName); + } + + @TestMetadata("VariableName3.kt") + public void testVariableName3() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("idea/idea-completion/testData/handlers/charFilter/VariableName3.kt"); + doTest(fileName); + } }