Dropped ability to specify custom PrefixMatcher in LookupElementsCollector

This commit is contained in:
Valentin Kipyatkov
2015-10-08 19:54:35 +03:00
parent aa0a68b4be
commit b549bc913a
2 changed files with 15 additions and 21 deletions
@@ -28,30 +28,24 @@ import org.jetbrains.kotlin.idea.core.completion.DeclarationLookupObject
import java.util.* import java.util.*
class LookupElementsCollector( class LookupElementsCollector(
private val defaultPrefixMatcher: PrefixMatcher, private val prefixMatcher: PrefixMatcher,
private val completionParameters: CompletionParameters, private val completionParameters: CompletionParameters,
resultSet: CompletionResultSet, resultSet: CompletionResultSet,
private val lookupElementFactory: LookupElementFactory, private val lookupElementFactory: LookupElementFactory,
private val sorter: CompletionSorter private val sorter: CompletionSorter
) { ) {
private val elements = LinkedHashMap<PrefixMatcher, ArrayList<LookupElement>>() private val elements = ArrayList<LookupElement>()
private val defaultResultSet = resultSet private val resultSet = resultSet
.withPrefixMatcher(defaultPrefixMatcher) .withPrefixMatcher(prefixMatcher)
.withRelevanceSorter(sorter) .withRelevanceSorter(sorter)
private val postProcessors = ArrayList<(LookupElement) -> LookupElement>() private val postProcessors = ArrayList<(LookupElement) -> LookupElement>()
public fun flushToResultSet() { public fun flushToResultSet() {
if (!elements.isEmpty()) { if (!elements.isEmpty()) {
for ((prefixMatcher, elements) in elements) { resultSet.addAllElements(elements)
val resultSet = if (prefixMatcher == defaultPrefixMatcher)
defaultResultSet
else
defaultResultSet.withPrefixMatcher(prefixMatcher)
resultSet.addAllElements(elements)
}
elements.clear() elements.clear()
isResultEmpty = false isResultEmpty = false
} }
@@ -81,20 +75,20 @@ class LookupElementsCollector(
lookupElements = lookupElements.map { it.withReceiverCast() } lookupElements = lookupElements.map { it.withReceiverCast() }
} }
addElements(lookupElements, notImported = notImported) addElements(lookupElements, notImported)
} }
} }
public fun addElement(element: LookupElement, prefixMatcher: PrefixMatcher = defaultPrefixMatcher, notImported: Boolean = false) { public fun addElement(element: LookupElement, notImported: Boolean = false) {
if (!prefixMatcher.prefixMatches(element)) return if (!prefixMatcher.prefixMatches(element)) return
if (notImported) { if (notImported) {
element.putUserData(NOT_IMPORTED_KEY, Unit) element.putUserData(NOT_IMPORTED_KEY, Unit)
if (isResultEmpty && elements.isEmpty()) { /* without these checks we may get duplicated items */ if (isResultEmpty && elements.isEmpty()) { /* without these checks we may get duplicated items */
addElement(element.suppressAutoInsertion(), prefixMatcher) addElement(element.suppressAutoInsertion())
} }
else { else {
addElement(element, prefixMatcher) addElement(element)
} }
return return
} }
@@ -131,7 +125,7 @@ class LookupElementsCollector(
} }
} }
elements.getOrPut(prefixMatcher) { ArrayList() }.add(result) elements.add(result)
} }
// used to avoid insertion of spaces before/after ',', '=' on just typing // used to avoid insertion of spaces before/after ',', '=' on just typing
@@ -141,15 +135,15 @@ class LookupElementsCollector(
return insertedText == element.getUserDataDeep(KotlinCompletionCharFilter.JUST_TYPING_PREFIX) return insertedText == element.getUserDataDeep(KotlinCompletionCharFilter.JUST_TYPING_PREFIX)
} }
public fun addElements(elements: Iterable<LookupElement>, prefixMatcher: PrefixMatcher = defaultPrefixMatcher, notImported: Boolean = false) { public fun addElements(elements: Iterable<LookupElement>, notImported: Boolean = false) {
elements.forEach { addElement(it, prefixMatcher, notImported) } elements.forEach { addElement(it, notImported) }
} }
public fun advertiseSecondCompletion() { public fun advertiseSecondCompletion() {
JavaCompletionContributor.advertiseSecondCompletion(completionParameters.getOriginalFile().getProject(), defaultResultSet) JavaCompletionContributor.advertiseSecondCompletion(completionParameters.getOriginalFile().getProject(), resultSet)
} }
public fun restartCompletionOnPrefixChange(prefixCondition: ElementPattern<String>) { public fun restartCompletionOnPrefixChange(prefixCondition: ElementPattern<String>) {
defaultResultSet.restartCompletionOnPrefixChange(prefixCondition) resultSet.restartCompletionOnPrefixChange(prefixCondition)
} }
} }
@@ -145,7 +145,7 @@ class ParameterNameAndTypeCompletion(
val lookupElement = MyLookupElement.create(parameterName, type, lookupElementFactory) val lookupElement = MyLookupElement.create(parameterName, type, lookupElementFactory)
if (lookupElement != null) { if (lookupElement != null) {
lookupElement.putUserData(PRIORITY_KEY, userPrefix.length()) // suggestions with longer user prefix get lower priority lookupElement.putUserData(PRIORITY_KEY, userPrefix.length()) // suggestions with longer user prefix get lower priority
collector.addElement(lookupElement, notImported = notImported) collector.addElement(lookupElement, notImported)
suggestionsByTypesAdded.add(type) suggestionsByTypesAdded.add(type)
} }
} }