diff --git a/idea/idea-completion/src/org/jetbrains/kotlin/idea/completion/Weighers.kt b/idea/idea-completion/src/org/jetbrains/kotlin/idea/completion/Weighers.kt index 34f81dc545c..f4c50807d90 100644 --- a/idea/idea-completion/src/org/jetbrains/kotlin/idea/completion/Weighers.kt +++ b/idea/idea-completion/src/org/jetbrains/kotlin/idea/completion/Weighers.kt @@ -16,10 +16,13 @@ package org.jetbrains.kotlin.idea.completion +import com.intellij.codeInsight.completion.CompletionLocation +import com.intellij.codeInsight.completion.CompletionWeigher import com.intellij.codeInsight.lookup.LookupElement import com.intellij.codeInsight.lookup.LookupElementWeigher import com.intellij.codeInsight.lookup.WeighingContext import com.intellij.openapi.module.ModuleUtilCore +import com.intellij.psi.util.proximity.PsiProximityComparator import org.jetbrains.kotlin.descriptors.ClassDescriptor import org.jetbrains.kotlin.descriptors.ClassKind import org.jetbrains.kotlin.descriptors.FunctionDescriptor @@ -102,6 +105,14 @@ class LocationWeigher(private val file: JetFile, private val originalFile: JetFi } } +// analog of LookupElementProximityWeigher which does not work for us +object KotlinLookupElementProximityWeigher : CompletionWeigher() { + override fun weigh(element: LookupElement, location: CompletionLocation): Comparable? { + val psiElement = (element.`object` as? DeclarationLookupObject)?.psiElement ?: return null + return PsiProximityComparator.getProximity({ psiElement }, location.completionParameters.position, location.processingContext) + } +} + object SmartCompletionPriorityWeigher : LookupElementWeigher("kotlin.smartCompletionPriority") { override fun weigh(element: LookupElement, context: WeighingContext) = element.getUserData(SMART_COMPLETION_ITEM_PRIORITY_KEY) ?: SmartCompletionItemPriority.DEFAULT diff --git a/idea/idea-completion/testData/weighers/basic/PreferFromJdk.Data.kt b/idea/idea-completion/testData/weighers/basic/PreferFromJdk.Data.kt new file mode 100644 index 00000000000..7a0475335bf --- /dev/null +++ b/idea/idea-completion/testData/weighers/basic/PreferFromJdk.Data.kt @@ -0,0 +1,3 @@ +package dependency + +public class Data \ No newline at end of file diff --git a/idea/idea-completion/testData/weighers/basic/PreferFromJdk.kt b/idea/idea-completion/testData/weighers/basic/PreferFromJdk.kt new file mode 100644 index 00000000000..f8995f4a556 --- /dev/null +++ b/idea/idea-completion/testData/weighers/basic/PreferFromJdk.kt @@ -0,0 +1,7 @@ +import dependency.* +import java.util.* + +fun foo(): Dat + +// ORDER: Date +// ORDER: Data diff --git a/idea/idea-completion/tests/org/jetbrains/kotlin/idea/completion/test/weighers/BasicCompletionWeigherTestGenerated.java b/idea/idea-completion/tests/org/jetbrains/kotlin/idea/completion/test/weighers/BasicCompletionWeigherTestGenerated.java index cf8ca22a652..077c7dcf373 100644 --- a/idea/idea-completion/tests/org/jetbrains/kotlin/idea/completion/test/weighers/BasicCompletionWeigherTestGenerated.java +++ b/idea/idea-completion/tests/org/jetbrains/kotlin/idea/completion/test/weighers/BasicCompletionWeigherTestGenerated.java @@ -131,6 +131,12 @@ public class BasicCompletionWeigherTestGenerated extends AbstractBasicCompletion doTest(fileName); } + @TestMetadata("PreferFromJdk.kt") + public void testPreferFromJdk() throws Exception { + String fileName = JetTestUtils.navigationMetadata("idea/idea-completion/testData/weighers/basic/PreferFromJdk.kt"); + doTest(fileName); + } + @TestMetadata("PropertiesBeforeKeywords.kt") public void testPropertiesBeforeKeywords() throws Exception { String fileName = JetTestUtils.navigationMetadata("idea/idea-completion/testData/weighers/basic/PropertiesBeforeKeywords.kt"); diff --git a/idea/src/META-INF/plugin.xml b/idea/src/META-INF/plugin.xml index 101b768faad..0b3ec10b28d 100644 --- a/idea/src/META-INF/plugin.xml +++ b/idea/src/META-INF/plugin.xml @@ -331,6 +331,8 @@ + +