Fixed completion list ordering for java classes

This commit is contained in:
Valentin Kipyatkov
2014-11-28 21:25:22 +03:00
parent 9dc6a82fef
commit 48edd5f02a
4 changed files with 40 additions and 11 deletions
@@ -37,6 +37,7 @@ import com.intellij.codeInsight.completion.CompletionType
import org.jetbrains.jet.plugin.completion.smart.NameSimilarityWeigher
import org.jetbrains.jet.plugin.completion.smart.SMART_COMPLETION_ITEM_PRIORITY_KEY
import org.jetbrains.jet.plugin.completion.smart.SmartCompletionItemPriority
import com.intellij.psi.PsiClass
public fun CompletionResultSet.addKotlinSorting(parameters: CompletionParameters): CompletionResultSet {
var sorter = CompletionSorter.defaultSorter(parameters, getPrefixMatcher())!!
@@ -112,7 +113,7 @@ private class JetDeclarationRemotenessWeigher(private val file: JetFile) : Looku
kotlinDefaultImport
thisFile
imported
normal
default
notImported
}
@@ -123,19 +124,27 @@ private class JetDeclarationRemotenessWeigher(private val file: JetFile) : Looku
if (elementFile is JetFile && elementFile.getOriginalFile() == file) {
return Weight.thisFile
}
}
val fqName = DescriptorUtils.getFqName(o.descriptor).toString()
// Invalid name can be met for class object descriptor: Test.MyTest.A.<no name provided>.testOther
if (isValidJavaFqName(fqName)) {
val importPath = ImportPath(fqName)
return when {
ImportInsertHelper.getInstance().needImport(importPath, file) -> Weight.notImported
ImportInsertHelper.getInstance().isImportedWithDefault(importPath, file) -> Weight.kotlinDefaultImport
else -> Weight.imported
}
val fqName = fqName(o)
// Invalid name can be met for class object descriptor: Test.MyTest.A.<no name provided>.testOther
if (fqName != null && isValidJavaFqName(fqName)) {
val importPath = ImportPath(fqName)
return when {
ImportInsertHelper.getInstance().needImport(importPath, file) -> Weight.notImported
ImportInsertHelper.getInstance().isImportedWithDefault(importPath, file) -> Weight.kotlinDefaultImport
else -> Weight.imported
}
}
return Weight.normal
return Weight.default
}
private fun fqName(lookupObject: Any): String? {
return when (lookupObject) {
is DeclarationDescriptorLookupObject -> DescriptorUtils.getFqName(lookupObject.descriptor).toString()
is PsiClass -> lookupObject.getQualifiedName()
else -> null
}
}
}
@@ -22,6 +22,7 @@ import org.jetbrains.annotations.NotNull;
import org.jetbrains.jet.lang.psi.*;
import org.jetbrains.jet.lang.resolve.ImportPath;
import org.jetbrains.jet.lang.resolve.java.TopDownAnalyzerFacadeForJVM;
import org.jetbrains.jet.lang.resolve.java.mapping.JavaToKotlinClassMap;
import org.jetbrains.jet.lang.resolve.name.FqName;
import org.jetbrains.jet.lang.resolve.name.NamePackage;
import org.jetbrains.jet.plugin.project.ProjectStructureUtil;
@@ -111,9 +112,14 @@ public class ImportInsertHelperImpl extends ImportInsertHelper {
@Override
public boolean isImportedWithDefault(@NotNull ImportPath importPath, @NotNull JetFile contextFile) {
List<ImportPath> defaultImports = ProjectStructureUtil.isJsKotlinModule(contextFile)
? TopDownAnalyzerFacadeForJS.DEFAULT_IMPORTS
: TopDownAnalyzerFacadeForJVM.DEFAULT_IMPORTS;
if (importPath.fqnPart().asString().startsWith("java.lang.")
&& !JavaToKotlinClassMap.getInstance().mapPlatformClass(importPath.fqnPart()).isEmpty()) {
return false;
}
return NamePackage.isImported(importPath, defaultImports);
}
@@ -0,0 +1,8 @@
import java.sql.DriverPropertyInfo
val some = Driver<caret>
// INVOCATION_COUNT: 2
// ORDER: Driver
// ORDER: DriverPropertyInfo
// ORDER: DriverManager
@@ -48,6 +48,12 @@ public class BasicCompletionWeigherTestGenerated extends AbstractBasicCompletion
doTest(fileName);
}
@TestMetadata("ImportedFirstForJavaClass.kt")
public void testImportedFirstForJavaClass() throws Exception {
String fileName = JetTestUtils.navigationMetadata("idea/testData/completion/weighers/basic/ImportedFirstForJavaClass.kt");
doTest(fileName);
}
@TestMetadata("KeywordsLast.kt")
public void testKeywordsLast() throws Exception {
String fileName = JetTestUtils.navigationMetadata("idea/testData/completion/weighers/basic/KeywordsLast.kt");