Fixed completion list ordering for java classes
This commit is contained in:
@@ -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
|
||||
+6
@@ -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");
|
||||
|
||||
Reference in New Issue
Block a user