From 9df3bb8a06684ab6bf8aa6e86b25bb1440f2d145 Mon Sep 17 00:00:00 2001 From: Valentin Kipyatkov Date: Thu, 27 Aug 2015 22:55:05 +0300 Subject: [PATCH] More correct sorting of parameter name&type suggestions in completion --- .../ParameterNameAndTypeCompletion.kt | 23 +++++++++---------- .../ImportedFirst.Data1.kt | 3 +++ .../parameterNameAndType/ImportedFirst.kt | 1 + 3 files changed, 15 insertions(+), 12 deletions(-) create mode 100644 idea/idea-completion/testData/weighers/basic/parameterNameAndType/ImportedFirst.Data1.kt diff --git a/idea/idea-completion/src/org/jetbrains/kotlin/idea/completion/ParameterNameAndTypeCompletion.kt b/idea/idea-completion/src/org/jetbrains/kotlin/idea/completion/ParameterNameAndTypeCompletion.kt index bb662376d66..bb8d602115d 100644 --- a/idea/idea-completion/src/org/jetbrains/kotlin/idea/completion/ParameterNameAndTypeCompletion.kt +++ b/idea/idea-completion/src/org/jetbrains/kotlin/idea/completion/ParameterNameAndTypeCompletion.kt @@ -30,11 +30,11 @@ import com.intellij.psi.codeStyle.CodeStyleSettingsManager import com.intellij.psi.codeStyle.NameUtil import org.jetbrains.kotlin.descriptors.ClassifierDescriptor import org.jetbrains.kotlin.descriptors.DeclarationDescriptor -import org.jetbrains.kotlin.idea.resolve.ResolutionFacade import org.jetbrains.kotlin.idea.core.KotlinIndicesHelper import org.jetbrains.kotlin.idea.core.KotlinNameSuggester import org.jetbrains.kotlin.idea.core.formatter.JetCodeStyleSettings import org.jetbrains.kotlin.idea.core.getResolutionScope +import org.jetbrains.kotlin.idea.resolve.ResolutionFacade import org.jetbrains.kotlin.idea.util.IdeDescriptorRenderers import org.jetbrains.kotlin.psi.JetDeclaration import org.jetbrains.kotlin.psi.JetExpression @@ -44,8 +44,7 @@ import org.jetbrains.kotlin.resolve.BindingContext import org.jetbrains.kotlin.resolve.scopes.DescriptorKindFilter import org.jetbrains.kotlin.resolve.scopes.getDescriptorsFiltered import org.jetbrains.kotlin.types.JetType -import java.util.HashSet -import java.util.LinkedHashMap +import java.util.* class ParameterNameAndTypeCompletion( private val collector: LookupElementsCollector, @@ -81,7 +80,7 @@ class ParameterNameAndTypeCompletion( for (classifier in classifiers) { if (visibilityFilter(classifier)) { - addSuggestionsForClassifier(classifier, userPrefixes[i], prefixMatcher) + addSuggestionsForClassifier(classifier, userPrefixes[i], prefixMatcher, notImported = false) } } @@ -93,8 +92,8 @@ class ParameterNameAndTypeCompletion( for ((i, prefixMatcher) in nameSuggestionPrefixMatchers.withIndex()) { AllClassesCompletion(parameters, indicesHelper, prefixMatcher.toClassifierNamePrefixMatcher(), { !it.isSingleton() }) .collect( - { addSuggestionsForClassifier(it, userPrefixes[i], prefixMatcher) }, - { addSuggestionsForJavaClass(it, userPrefixes[i], prefixMatcher) } + { addSuggestionsForClassifier(it, userPrefixes[i], prefixMatcher, notImported = true) }, + { addSuggestionsForJavaClass(it, userPrefixes[i], prefixMatcher, notImported = true) } ) collector.flushToResultSet() @@ -130,15 +129,15 @@ class ParameterNameAndTypeCompletion( } } - private fun addSuggestionsForClassifier(classifier: DeclarationDescriptor, userPrefix: String, prefixMatcher: PrefixMatcher) { - addSuggestions(classifier.getName().asString(), userPrefix, prefixMatcher, DescriptorType(classifier as ClassifierDescriptor)) + private fun addSuggestionsForClassifier(classifier: DeclarationDescriptor, userPrefix: String, prefixMatcher: PrefixMatcher, notImported: Boolean) { + addSuggestions(classifier.getName().asString(), userPrefix, prefixMatcher, DescriptorType(classifier as ClassifierDescriptor), notImported) } - private fun addSuggestionsForJavaClass(psiClass: PsiClass, userPrefix: String, prefixMatcher: PrefixMatcher) { - addSuggestions(psiClass.getName()!!, userPrefix, prefixMatcher, JavaClassType(psiClass)) + private fun addSuggestionsForJavaClass(psiClass: PsiClass, userPrefix: String, prefixMatcher: PrefixMatcher, notImported: Boolean) { + addSuggestions(psiClass.getName()!!, userPrefix, prefixMatcher, JavaClassType(psiClass), notImported) } - private fun addSuggestions(className: String, userPrefix: String, prefixMatcher: PrefixMatcher, type: Type) { + private fun addSuggestions(className: String, userPrefix: String, prefixMatcher: PrefixMatcher, type: Type, notImported: Boolean) { ProgressManager.checkCanceled() if (suggestionsByTypesAdded.contains(type)) return // don't add suggestions for the same with longer user prefix @@ -148,7 +147,7 @@ class ParameterNameAndTypeCompletion( val lookupElement = MyLookupElement.create(userPrefix, name, type, lookupElementFactory) if (lookupElement != null) { lookupElement.putUserData(PRIORITY_KEY, userPrefix.length()) // suggestions with longer user prefix get smaller priority - collector.addElement(lookupElement, prefixMatcher) + collector.addElement(lookupElement, prefixMatcher, notImported) suggestionsByTypesAdded.add(type) } } diff --git a/idea/idea-completion/testData/weighers/basic/parameterNameAndType/ImportedFirst.Data1.kt b/idea/idea-completion/testData/weighers/basic/parameterNameAndType/ImportedFirst.Data1.kt new file mode 100644 index 00000000000..0aa64410181 --- /dev/null +++ b/idea/idea-completion/testData/weighers/basic/parameterNameAndType/ImportedFirst.Data1.kt @@ -0,0 +1,3 @@ +package ppp1 + +class MyClaaa diff --git a/idea/idea-completion/testData/weighers/basic/parameterNameAndType/ImportedFirst.kt b/idea/idea-completion/testData/weighers/basic/parameterNameAndType/ImportedFirst.kt index b98bfa5d441..e7e4f559f50 100644 --- a/idea/idea-completion/testData/weighers/basic/parameterNameAndType/ImportedFirst.kt +++ b/idea/idea-completion/testData/weighers/basic/parameterNameAndType/ImportedFirst.kt @@ -5,3 +5,4 @@ fun foo(myCla) // ORDER: myClassB // ORDER: myClassA // ORDER: myClassC +// ORDER: myClaaa