Fixed completion to not render functional types with parameter names in lookup items
This commit is contained in:
+12
-6
@@ -40,6 +40,11 @@ class BasicLookupElementFactory(
|
|||||||
private val project: Project,
|
private val project: Project,
|
||||||
val insertHandlerProvider: InsertHandlerProvider
|
val insertHandlerProvider: InsertHandlerProvider
|
||||||
) {
|
) {
|
||||||
|
companion object {
|
||||||
|
// we skip parameter names in functional types in most of cases for shortness
|
||||||
|
val SHORT_NAMES_RENDERER = DescriptorRenderer.SHORT_NAMES_IN_TYPES.withOptions { parameterNamesInFunctionalTypes = false }
|
||||||
|
}
|
||||||
|
|
||||||
fun createLookupElement(
|
fun createLookupElement(
|
||||||
descriptor: DeclarationDescriptor,
|
descriptor: DeclarationDescriptor,
|
||||||
qualifyNestedClasses: Boolean = false,
|
qualifyNestedClasses: Boolean = false,
|
||||||
@@ -155,18 +160,18 @@ class BasicLookupElementFactory(
|
|||||||
when (descriptor) {
|
when (descriptor) {
|
||||||
is FunctionDescriptor -> {
|
is FunctionDescriptor -> {
|
||||||
val returnType = descriptor.returnType
|
val returnType = descriptor.returnType
|
||||||
element = element.withTypeText(if (returnType != null) DescriptorRenderer.SHORT_NAMES_IN_TYPES.renderType(returnType) else "", parametersAndTypeGrayed)
|
element = element.withTypeText(if (returnType != null) SHORT_NAMES_RENDERER.renderType(returnType) else "", parametersAndTypeGrayed)
|
||||||
|
|
||||||
val insertsLambda = (insertHandler as? KotlinFunctionInsertHandler.Normal)?.lambdaInfo != null
|
val insertsLambda = (insertHandler as? KotlinFunctionInsertHandler.Normal)?.lambdaInfo != null
|
||||||
if (insertsLambda) {
|
if (insertsLambda) {
|
||||||
element = element.appendTailText(" {...} ", parametersAndTypeGrayed)
|
element = element.appendTailText(" {...} ", parametersAndTypeGrayed)
|
||||||
}
|
}
|
||||||
|
|
||||||
element = element.appendTailText(DescriptorRenderer.SHORT_NAMES_IN_TYPES.renderFunctionParameters(descriptor), parametersAndTypeGrayed || insertsLambda)
|
element = element.appendTailText(SHORT_NAMES_RENDERER.renderFunctionParameters(descriptor), parametersAndTypeGrayed || insertsLambda)
|
||||||
}
|
}
|
||||||
|
|
||||||
is VariableDescriptor -> {
|
is VariableDescriptor -> {
|
||||||
element = element.withTypeText(DescriptorRenderer.SHORT_NAMES_IN_TYPES.renderType(descriptor.type), parametersAndTypeGrayed)
|
element = element.withTypeText(SHORT_NAMES_RENDERER.renderType(descriptor.type), parametersAndTypeGrayed)
|
||||||
}
|
}
|
||||||
|
|
||||||
is ClassifierDescriptorWithTypeParameters -> {
|
is ClassifierDescriptorWithTypeParameters -> {
|
||||||
@@ -178,7 +183,7 @@ class BasicLookupElementFactory(
|
|||||||
var container = descriptor.containingDeclaration
|
var container = descriptor.containingDeclaration
|
||||||
|
|
||||||
if (qualifyNestedClasses) {
|
if (qualifyNestedClasses) {
|
||||||
element = element.withPresentableText(DescriptorRenderer.SHORT_NAMES_IN_TYPES.renderClassifierName(descriptor))
|
element = element.withPresentableText(SHORT_NAMES_RENDERER.renderClassifierName(descriptor))
|
||||||
|
|
||||||
while (container is ClassDescriptor) {
|
while (container is ClassDescriptor) {
|
||||||
val containerName = container.name
|
val containerName = container.name
|
||||||
@@ -194,12 +199,13 @@ class BasicLookupElementFactory(
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (descriptor is TypeAliasDescriptor) {
|
if (descriptor is TypeAliasDescriptor) {
|
||||||
|
// here we render with DescriptorRenderer.SHORT_NAMES_IN_TYPES to include parameter names in functional types
|
||||||
element = element.withTypeText(DescriptorRenderer.SHORT_NAMES_IN_TYPES.renderType(descriptor.underlyingType), false)
|
element = element.withTypeText(DescriptorRenderer.SHORT_NAMES_IN_TYPES.renderType(descriptor.underlyingType), false)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
else -> {
|
else -> {
|
||||||
element = element.withTypeText(DescriptorRenderer.SHORT_NAMES_IN_TYPES.render(descriptor), parametersAndTypeGrayed)
|
element = element.withTypeText(SHORT_NAMES_RENDERER.render(descriptor), parametersAndTypeGrayed)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -242,7 +248,7 @@ class BasicLookupElementFactory(
|
|||||||
}
|
}
|
||||||
|
|
||||||
extensionReceiver != null -> {
|
extensionReceiver != null -> {
|
||||||
val receiverPresentation = DescriptorRenderer.SHORT_NAMES_IN_TYPES.renderType(extensionReceiver.type)
|
val receiverPresentation = SHORT_NAMES_RENDERER.renderType(extensionReceiver.type)
|
||||||
appendTailText(" for $receiverPresentation")
|
appendTailText(" for $receiverPresentation")
|
||||||
|
|
||||||
val container = descriptor.containingDeclaration
|
val container = descriptor.containingDeclaration
|
||||||
|
|||||||
@@ -168,7 +168,7 @@ fun shouldCompleteThisItems(prefixMatcher: PrefixMatcher): Boolean {
|
|||||||
class ThisItemLookupObject(val receiverParameter: ReceiverParameterDescriptor, val labelName: Name?) : KeywordLookupObject()
|
class ThisItemLookupObject(val receiverParameter: ReceiverParameterDescriptor, val labelName: Name?) : KeywordLookupObject()
|
||||||
|
|
||||||
fun ThisItemLookupObject.createLookupElement() = createKeywordElement("this", labelName.labelNameToTail(), lookupObject = this)
|
fun ThisItemLookupObject.createLookupElement() = createKeywordElement("this", labelName.labelNameToTail(), lookupObject = this)
|
||||||
.withTypeText(DescriptorRenderer.SHORT_NAMES_IN_TYPES.renderType(receiverParameter.type))
|
.withTypeText(BasicLookupElementFactory.SHORT_NAMES_RENDERER.renderType(receiverParameter.type))
|
||||||
|
|
||||||
fun thisExpressionItems(bindingContext: BindingContext, position: KtExpression, prefix: String, resolutionFacade: ResolutionFacade): Collection<ThisItemLookupObject> {
|
fun thisExpressionItems(bindingContext: BindingContext, position: KtExpression, prefix: String, resolutionFacade: ResolutionFacade): Collection<ThisItemLookupObject> {
|
||||||
val scope = position.getResolutionScope(bindingContext, resolutionFacade)
|
val scope = position.getResolutionScope(bindingContext, resolutionFacade)
|
||||||
@@ -381,7 +381,7 @@ fun LookupElement.decorateAsStaticMember(
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (presentation.typeText.isNullOrEmpty()) {
|
if (presentation.typeText.isNullOrEmpty()) {
|
||||||
presentation.typeText = DescriptorRenderer.SHORT_NAMES_IN_TYPES.renderType(classDescriptor.defaultType)
|
presentation.typeText = BasicLookupElementFactory.SHORT_NAMES_RENDERER.renderType(classDescriptor.defaultType)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+1
-1
@@ -167,7 +167,7 @@ class LookupElementFactory(
|
|||||||
val lambdaPresentation = lambdaPresentation(if (explicitLambdaParameters) parameterType else null)
|
val lambdaPresentation = lambdaPresentation(if (explicitLambdaParameters) parameterType else null)
|
||||||
|
|
||||||
// render only the last parameter because all other should be optional and will be omitted
|
// render only the last parameter because all other should be optional and will be omitted
|
||||||
var parametersRenderer = DescriptorRenderer.SHORT_NAMES_IN_TYPES
|
var parametersRenderer = BasicLookupElementFactory.SHORT_NAMES_RENDERER
|
||||||
if (descriptor.valueParameters.size > 1) {
|
if (descriptor.valueParameters.size > 1) {
|
||||||
parametersRenderer = parametersRenderer.withOptions {
|
parametersRenderer = parametersRenderer.withOptions {
|
||||||
valueParametersHandler = object: DescriptorRenderer.ValueParametersHandler by this.valueParametersHandler {
|
valueParametersHandler = object: DescriptorRenderer.ValueParametersHandler by this.valueParametersHandler {
|
||||||
|
|||||||
+1
-1
@@ -59,7 +59,7 @@ object NamedArgumentCompletion {
|
|||||||
}
|
}
|
||||||
|
|
||||||
for ((name, types) in nameToParameterType) {
|
for ((name, types) in nameToParameterType) {
|
||||||
val typeText = types.singleOrNull()?.let { DescriptorRenderer.SHORT_NAMES_IN_TYPES.renderType(it) } ?: "..."
|
val typeText = types.singleOrNull()?.let { BasicLookupElementFactory.SHORT_NAMES_RENDERER.renderType(it) } ?: "..."
|
||||||
val nameString = name.asString()
|
val nameString = name.asString()
|
||||||
val lookupElement = LookupElementBuilder.create(nameString)
|
val lookupElement = LookupElementBuilder.create(nameString)
|
||||||
.withPresentableText("$nameString =")
|
.withPresentableText("$nameString =")
|
||||||
|
|||||||
+1
-1
@@ -211,7 +211,7 @@ class TypeInstantiationItems(
|
|||||||
val constructor = visibleConstructors.single()
|
val constructor = visibleConstructors.single()
|
||||||
val substitutor = TypeSubstitutor.create(fuzzyType.presentationType())
|
val substitutor = TypeSubstitutor.create(fuzzyType.presentationType())
|
||||||
val substitutedConstructor = constructor.substitute(substitutor)
|
val substitutedConstructor = constructor.substitute(substitutor)
|
||||||
DescriptorRenderer.SHORT_NAMES_IN_TYPES.renderFunctionParameters(substitutedConstructor)
|
BasicLookupElementFactory.SHORT_NAMES_RENDERER.renderFunctionParameters(substitutedConstructor)
|
||||||
}
|
}
|
||||||
|
|
||||||
else -> "(...)"
|
else -> "(...)"
|
||||||
|
|||||||
Reference in New Issue
Block a user