diff --git a/idea/src/org/jetbrains/kotlin/idea/completion/KotlinCompletionCharFilter.kt b/idea/src/org/jetbrains/kotlin/idea/completion/KotlinCompletionCharFilter.kt index d128933bbe5..54f40cd40e5 100644 --- a/idea/src/org/jetbrains/kotlin/idea/completion/KotlinCompletionCharFilter.kt +++ b/idea/src/org/jetbrains/kotlin/idea/completion/KotlinCompletionCharFilter.kt @@ -21,6 +21,8 @@ import com.intellij.codeInsight.lookup.Lookup import com.intellij.codeInsight.lookup.CharFilter.Result import org.jetbrains.kotlin.psi.JetFile import com.intellij.openapi.util.Key +import com.intellij.codeInsight.completion.CompletionService +import com.intellij.codeInsight.completion.CompletionProgressIndicator public class KotlinCompletionCharFilter() : CharFilter() { class object { @@ -32,6 +34,9 @@ public class KotlinCompletionCharFilter() : CharFilter() { override fun acceptChar(c : Char, prefixLength : Int, lookup : Lookup) : Result? { if (lookup.getPsiFile() !is JetFile) return null if (!lookup.isCompletion()) return null + // it does not work in tests, so we use other way +// val isAutopopup = CompletionService.getCompletionService().getCurrentCompletion().isAutopopupCompletion() + val isAutopopup = (CompletionService.getCompletionService().getCurrentCompletion() as CompletionProgressIndicator).getParameters().getInvocationCount() == 0 if (Character.isJavaIdentifierPart(c) || c == ':' /* used in '::xxx'*/ || c == '@') { return CharFilter.Result.ADD_TO_PREFIX @@ -44,8 +49,7 @@ public class KotlinCompletionCharFilter() : CharFilter() { return when (c) { '.' -> { - //TODO: this heuristics better to be only used for auto-popup completion but I see no way to check this - if (prefixLength == 0 && !lookup.isSelectionTouched()) { + if (prefixLength == 0 && isAutopopup && !lookup.isSelectionTouched()) { val caret = lookup.getEditor().getCaretModel().getOffset() if (caret > 0 && lookup.getEditor().getDocument().getCharsSequence()[caret - 1] == '.') { return Result.HIDE_LOOKUP