Code completion: more precise detection of "just typing"
This commit is contained in:
@@ -62,7 +62,7 @@ abstract class CompletionSessionBase(protected val configuration: CompletionSess
|
||||
|
||||
protected val prefixMatcher: PrefixMatcher = this.resultSet.getPrefixMatcher()
|
||||
|
||||
protected val collector: LookupElementsCollector = LookupElementsCollector(prefixMatcher, resolveSession)
|
||||
protected val collector: LookupElementsCollector = LookupElementsCollector(prefixMatcher, parameters, resolveSession)
|
||||
|
||||
protected val project: Project = position.getProject()
|
||||
|
||||
|
||||
@@ -27,7 +27,7 @@ public class KotlinCompletionCharFilter() : CharFilter() {
|
||||
class object {
|
||||
public val ACCEPT_OPENING_BRACE: Key<Boolean> = Key("KotlinCompletionCharFilter.ACCEPT_OPENNING_BRACE")
|
||||
|
||||
public val SELECTED_ITEM_PREFIX: Key<String> = Key("KotlinCompletionCharFilter.SELECTED_ITEM_PREFIX")
|
||||
public val JUST_TYPING_PREFIX: Key<String> = Key("KotlinCompletionCharFilter.JUST_TYPING_PREFIX")
|
||||
}
|
||||
|
||||
override fun acceptChar(c : Char, prefixLength : Int, lookup : Lookup) : Result? {
|
||||
@@ -39,7 +39,9 @@ public class KotlinCompletionCharFilter() : CharFilter() {
|
||||
}
|
||||
|
||||
val currentItem = lookup.getCurrentItem()
|
||||
currentItem?.putUserData(SELECTED_ITEM_PREFIX, lookup.itemPattern(currentItem))
|
||||
if (!lookup.isSelectionTouched()) {
|
||||
currentItem?.putUserData(JUST_TYPING_PREFIX, lookup.itemPattern(currentItem))
|
||||
}
|
||||
|
||||
return when (c) {
|
||||
'.' -> {
|
||||
|
||||
@@ -29,8 +29,13 @@ import java.util.ArrayList
|
||||
import com.intellij.codeInsight.completion.CompletionResultSet
|
||||
import org.jetbrains.jet.lang.descriptors.FunctionDescriptor
|
||||
import com.intellij.openapi.util.TextRange
|
||||
import com.intellij.codeInsight.completion.CompletionParameters
|
||||
|
||||
class LookupElementsCollector(private val prefixMatcher: PrefixMatcher, private val resolveSession: ResolveSessionForBodies) {
|
||||
class LookupElementsCollector(
|
||||
private val prefixMatcher: PrefixMatcher,
|
||||
private val completionParameters: CompletionParameters,
|
||||
private val resolveSession: ResolveSessionForBodies
|
||||
) {
|
||||
private val elements = ArrayList<LookupElement>()
|
||||
|
||||
public fun flushToResultSet(resultSet: CompletionResultSet) {
|
||||
@@ -109,8 +114,9 @@ class LookupElementsCollector(private val prefixMatcher: PrefixMatcher, private
|
||||
|
||||
// used to avoid insertion of spaces before/after ',', '=' on just typing
|
||||
private fun isJustTyping(context: InsertionContext, element: LookupElement): Boolean {
|
||||
if (!completionParameters.isAutoPopup()) return false
|
||||
val insertedText = context.getDocument().getText(TextRange(context.getStartOffset(), context.getTailOffset()))
|
||||
return insertedText == element.getUserData(KotlinCompletionCharFilter.SELECTED_ITEM_PREFIX)
|
||||
return insertedText == element.getUserData(KotlinCompletionCharFilter.JUST_TYPING_PREFIX)
|
||||
}
|
||||
|
||||
public fun addElementWithAutoInsertionSuppressed(element: LookupElement) {
|
||||
|
||||
@@ -4,5 +4,6 @@ fun bar(nullable: Int?) {
|
||||
foo(null<caret>)
|
||||
}
|
||||
|
||||
// INVOCATION_COUNT: 0
|
||||
// ELEMENT: *
|
||||
// CHAR: ','
|
||||
|
||||
@@ -4,5 +4,6 @@ fun bar(nullable: Int?) {
|
||||
foo(null,<caret>)
|
||||
}
|
||||
|
||||
// INVOCATION_COUNT: 0
|
||||
// ELEMENT: *
|
||||
// CHAR: ','
|
||||
|
||||
Reference in New Issue
Block a user