Minor refactoring of LookupElementsCollector

This commit is contained in:
Mikhail Glukhikh
2015-07-13 20:16:21 +03:00
parent 37b2e97e56
commit a84fe53256
@@ -29,6 +29,7 @@ import org.jetbrains.kotlin.descriptors.FunctionDescriptor
import org.jetbrains.kotlin.descriptors.PropertyDescriptor import org.jetbrains.kotlin.descriptors.PropertyDescriptor
import org.jetbrains.kotlin.idea.caches.resolve.ResolutionFacade import org.jetbrains.kotlin.idea.caches.resolve.ResolutionFacade
import org.jetbrains.kotlin.idea.completion.handlers.* import org.jetbrains.kotlin.idea.completion.handlers.*
import org.jetbrains.kotlin.types.JetType
import java.util.ArrayList import java.util.ArrayList
import java.util.LinkedHashMap import java.util.LinkedHashMap
@@ -103,12 +104,34 @@ class LookupElementsCollector(
// add special item for function with one argument of function type with more than one parameter // add special item for function with one argument of function type with more than one parameter
if (context != Context.INFIX_CALL && descriptor is FunctionDescriptor) { if (context != Context.INFIX_CALL && descriptor is FunctionDescriptor) {
addSpecialFunctionDescriptorElementIfNeeded(descriptor)
}
if (descriptor is PropertyDescriptor) {
var lookupElement = lookupElementFactory.createBackingFieldLookupElement(descriptor, inDescriptor, resolutionFacade)
if (lookupElement != null) {
if (context == Context.STRING_TEMPLATE_AFTER_DOLLAR) {
lookupElement = lookupElement.withBracesSurrounding()
}
addElement(lookupElement)
}
}
}
private fun addSpecialFunctionDescriptorElementIfNeeded(descriptor: FunctionDescriptor) {
val parameters = descriptor.getValueParameters() val parameters = descriptor.getValueParameters()
if (parameters.size() == 1) { if (parameters.size() == 1) {
val parameterType = parameters.get(0).getType() val parameterType = parameters.get(0).getType()
if (KotlinBuiltIns.isExactFunctionOrExtensionFunctionType(parameterType)) { if (KotlinBuiltIns.isExactFunctionOrExtensionFunctionType(parameterType)) {
val parameterCount = KotlinBuiltIns.getParameterTypeProjectionsFromFunctionType(parameterType).size() val parameterCount = KotlinBuiltIns.getParameterTypeProjectionsFromFunctionType(parameterType).size()
if (parameterCount > 1) { if (parameterCount > 1) {
addSpecialFunctionDescriptorElement(descriptor, parameterType)
}
}
}
}
private fun addSpecialFunctionDescriptorElement(descriptor: FunctionDescriptor, parameterType: JetType) {
var lookupElement = lookupElementFactory.createLookupElement(descriptor, true) var lookupElement = lookupElementFactory.createLookupElement(descriptor, true)
lookupElement = object : LookupElementDecorator<LookupElement>(lookupElement) { lookupElement = object : LookupElementDecorator<LookupElement>(lookupElement) {
@@ -132,20 +155,6 @@ class LookupElementsCollector(
addElement(lookupElement) addElement(lookupElement)
} }
}
}
}
if (descriptor is PropertyDescriptor) {
var lookupElement = lookupElementFactory.createBackingFieldLookupElement(descriptor, inDescriptor, resolutionFacade)
if (lookupElement != null) {
if (context == Context.STRING_TEMPLATE_AFTER_DOLLAR) {
lookupElement = lookupElement.withBracesSurrounding()
}
addElement(lookupElement)
}
}
}
public fun addElement(element: LookupElement, prefixMatcher: PrefixMatcher = defaultPrefixMatcher) { public fun addElement(element: LookupElement, prefixMatcher: PrefixMatcher = defaultPrefixMatcher) {
if (prefixMatcher.prefixMatches(element)) { if (prefixMatcher.prefixMatches(element)) {