Dropped ability to specify custom PrefixMatcher in LookupElementsCollector
This commit is contained in:
+14
-20
@@ -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)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+1
-1
@@ -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)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user