From 58bcb576a1d296817a6d4a35d7800c19e77b97dd Mon Sep 17 00:00:00 2001 From: Valentin Kipyatkov Date: Thu, 1 Oct 2015 22:01:22 +0300 Subject: [PATCH] Completion: grayed parameters and type in completion of imports and callable references (arguable) --- .../completion/BasicLookupElementFactory.kt | 18 ++++++++++-------- .../completion/KDocCompletionContributor.kt | 4 ++-- .../idea/completion/LookupElementFactory.kt | 11 +++++++---- .../idea/completion/smart/SmartCompletion.kt | 2 +- 4 files changed, 20 insertions(+), 15 deletions(-) diff --git a/idea/idea-completion/src/org/jetbrains/kotlin/idea/completion/BasicLookupElementFactory.kt b/idea/idea-completion/src/org/jetbrains/kotlin/idea/completion/BasicLookupElementFactory.kt index 5f4d456f71a..6aa4c9a2a28 100644 --- a/idea/idea-completion/src/org/jetbrains/kotlin/idea/completion/BasicLookupElementFactory.kt +++ b/idea/idea-completion/src/org/jetbrains/kotlin/idea/completion/BasicLookupElementFactory.kt @@ -43,14 +43,15 @@ class BasicLookupElementFactory( public fun createLookupElement( descriptor: DeclarationDescriptor, qualifyNestedClasses: Boolean = false, - includeClassTypeArguments: Boolean = true + includeClassTypeArguments: Boolean = true, + parametersAndTypeGrayed: Boolean = false ): LookupElement { val _descriptor = if (descriptor is CallableMemberDescriptor) DescriptorUtils.unwrapFakeOverride(descriptor) else descriptor val declaration = DescriptorToSourceUtilsIde.getAnyDeclaration(project, _descriptor) - return createLookupElement(_descriptor, declaration, qualifyNestedClasses, includeClassTypeArguments) + return createLookupElement(_descriptor, declaration, qualifyNestedClasses, includeClassTypeArguments, parametersAndTypeGrayed) } public fun createLookupElementForJavaClass(psiClass: PsiClass, qualifyNestedClasses: Boolean = false, includeClassTypeArguments: Boolean = true): LookupElement { @@ -107,7 +108,8 @@ class BasicLookupElementFactory( descriptor: DeclarationDescriptor, declaration: PsiElement?, qualifyNestedClasses: Boolean, - includeClassTypeArguments: Boolean + includeClassTypeArguments: Boolean, + parametersAndTypeGrayed: Boolean ): LookupElement { if (descriptor is ClassifierDescriptor && declaration is PsiClass && @@ -149,18 +151,18 @@ class BasicLookupElementFactory( when (descriptor) { is FunctionDescriptor -> { val returnType = descriptor.getReturnType() - element = element.withTypeText(if (returnType != null) DescriptorRenderer.SHORT_NAMES_IN_TYPES.renderType(returnType) else "") + element = element.withTypeText(if (returnType != null) DescriptorRenderer.SHORT_NAMES_IN_TYPES.renderType(returnType) else "", parametersAndTypeGrayed) val insertsLambda = (insertHandler as? KotlinFunctionInsertHandler.Normal)?.lambdaInfo != null if (insertsLambda) { - element = element.appendTailText(" {...} ", false) + element = element.appendTailText(" {...} ", parametersAndTypeGrayed) } - element = element.appendTailText(DescriptorRenderer.SHORT_NAMES_IN_TYPES.renderFunctionParameters(descriptor), insertsLambda) + element = element.appendTailText(DescriptorRenderer.SHORT_NAMES_IN_TYPES.renderFunctionParameters(descriptor), parametersAndTypeGrayed || insertsLambda) } is VariableDescriptor -> { - element = element.withTypeText(DescriptorRenderer.SHORT_NAMES_IN_TYPES.renderType(descriptor.getType())) + element = element.withTypeText(DescriptorRenderer.SHORT_NAMES_IN_TYPES.renderType(descriptor.getType()), parametersAndTypeGrayed) } is ClassDescriptor -> { @@ -189,7 +191,7 @@ class BasicLookupElementFactory( } else -> { - element = element.withTypeText(DescriptorRenderer.SHORT_NAMES_IN_TYPES.render(descriptor)) + element = element.withTypeText(DescriptorRenderer.SHORT_NAMES_IN_TYPES.render(descriptor), parametersAndTypeGrayed) } } diff --git a/idea/idea-completion/src/org/jetbrains/kotlin/idea/completion/KDocCompletionContributor.kt b/idea/idea-completion/src/org/jetbrains/kotlin/idea/completion/KDocCompletionContributor.kt index 3173b00d95a..76137855cbf 100644 --- a/idea/idea-completion/src/org/jetbrains/kotlin/idea/completion/KDocCompletionContributor.kt +++ b/idea/idea-completion/src/org/jetbrains/kotlin/idea/completion/KDocCompletionContributor.kt @@ -87,7 +87,7 @@ class KDocNameCompletionSession(parameters: CompletionParameters, .filter { it.getName().asString() !in documentedParameters } descriptors.forEach { - collector.addElement(lookupElementFactory.createLookupElement(it, useReceiverTypes = false)) + collector.addElement(lookupElementFactory.createLookupElement(it, useReceiverTypes = false, parametersAndTypeGrayed = true)) } } @@ -108,7 +108,7 @@ class KDocNameCompletionSession(parameters: CompletionParameters, } scope.getDescriptorsFiltered(nameFilter = descriptorNameFilter).filter(::isApplicable).forEach { - val element = lookupElementFactory.createLookupElement(it, useReceiverTypes = false) + val element = lookupElementFactory.createLookupElement(it, useReceiverTypes = false, parametersAndTypeGrayed = true) collector.addElement(object: LookupElementDecorator(element) { override fun handleInsert(context: InsertionContext?) { // insert only plain name here, no qualifier/parentheses/etc. diff --git a/idea/idea-completion/src/org/jetbrains/kotlin/idea/completion/LookupElementFactory.kt b/idea/idea-completion/src/org/jetbrains/kotlin/idea/completion/LookupElementFactory.kt index 393392dbfa5..78b853af3a5 100644 --- a/idea/idea-completion/src/org/jetbrains/kotlin/idea/completion/LookupElementFactory.kt +++ b/idea/idea-completion/src/org/jetbrains/kotlin/idea/completion/LookupElementFactory.kt @@ -59,14 +59,16 @@ class LookupElementFactory( public fun createStandardLookupElementsForDescriptor(descriptor: DeclarationDescriptor, useReceiverTypes: Boolean): Collection { val result = SmartList() - var lookupElement = createLookupElement(descriptor, useReceiverTypes) + val isNormalCall = callType == CallType.DEFAULT || callType == CallType.DOT || callType == CallType.SAFE + + var lookupElement = createLookupElement(descriptor, useReceiverTypes, parametersAndTypeGrayed = !isNormalCall && callType != CallType.INFIX) if (isInStringTemplateAfterDollar && (descriptor is FunctionDescriptor || descriptor is ClassifierDescriptor)) { lookupElement = lookupElement.withBracesSurrounding() } result.add(lookupElement) // add special item for function with one argument of function type with more than one parameter - if (descriptor is FunctionDescriptor && (callType == CallType.DEFAULT || callType == CallType.DOT || callType == CallType.SAFE)) { + if (descriptor is FunctionDescriptor && isNormalCall) { result.addSpecialFunctionCallElements(descriptor, useReceiverTypes) } @@ -183,9 +185,10 @@ class LookupElementFactory( descriptor: DeclarationDescriptor, useReceiverTypes: Boolean, qualifyNestedClasses: Boolean = false, - includeClassTypeArguments: Boolean = true + includeClassTypeArguments: Boolean = true, + parametersAndTypeGrayed: Boolean = false ): LookupElement { - var element = basicFactory.createLookupElement(descriptor, qualifyNestedClasses, includeClassTypeArguments) + var element = basicFactory.createLookupElement(descriptor, qualifyNestedClasses, includeClassTypeArguments, parametersAndTypeGrayed) if (useReceiverTypes) { val weight = callableWeight(descriptor) diff --git a/idea/idea-completion/src/org/jetbrains/kotlin/idea/completion/smart/SmartCompletion.kt b/idea/idea-completion/src/org/jetbrains/kotlin/idea/completion/smart/SmartCompletion.kt index 8f924eabc22..1ca36e87d5e 100644 --- a/idea/idea-completion/src/org/jetbrains/kotlin/idea/completion/smart/SmartCompletion.kt +++ b/idea/idea-completion/src/org/jetbrains/kotlin/idea/completion/smart/SmartCompletion.kt @@ -323,7 +323,7 @@ class SmartCompletion( val matchedExpectedInfos = functionExpectedInfos.filter { it.matchingSubstitutor(functionType) != null } if (matchedExpectedInfos.isEmpty()) return null - var lookupElement = lookupElementFactory.createLookupElement(descriptor, useReceiverTypes = false) + var lookupElement = lookupElementFactory.createLookupElement(descriptor, useReceiverTypes = false, parametersAndTypeGrayed = true) val text = "::" + (if (descriptor is ConstructorDescriptor) descriptor.getContainingDeclaration().getName() else descriptor.getName()) lookupElement = object: LookupElementDecorator(lookupElement) { override fun getLookupString() = text