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.NameSimilarityWeigher
|
||||||
import org.jetbrains.jet.plugin.completion.smart.SMART_COMPLETION_ITEM_PRIORITY_KEY
|
import org.jetbrains.jet.plugin.completion.smart.SMART_COMPLETION_ITEM_PRIORITY_KEY
|
||||||
import org.jetbrains.jet.plugin.completion.smart.SmartCompletionItemPriority
|
import org.jetbrains.jet.plugin.completion.smart.SmartCompletionItemPriority
|
||||||
|
import com.intellij.psi.PsiClass
|
||||||
|
|
||||||
public fun CompletionResultSet.addKotlinSorting(parameters: CompletionParameters): CompletionResultSet {
|
public fun CompletionResultSet.addKotlinSorting(parameters: CompletionParameters): CompletionResultSet {
|
||||||
var sorter = CompletionSorter.defaultSorter(parameters, getPrefixMatcher())!!
|
var sorter = CompletionSorter.defaultSorter(parameters, getPrefixMatcher())!!
|
||||||
@@ -112,7 +113,7 @@ private class JetDeclarationRemotenessWeigher(private val file: JetFile) : Looku
|
|||||||
kotlinDefaultImport
|
kotlinDefaultImport
|
||||||
thisFile
|
thisFile
|
||||||
imported
|
imported
|
||||||
normal
|
default
|
||||||
notImported
|
notImported
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -123,19 +124,27 @@ private class JetDeclarationRemotenessWeigher(private val file: JetFile) : Looku
|
|||||||
if (elementFile is JetFile && elementFile.getOriginalFile() == file) {
|
if (elementFile is JetFile && elementFile.getOriginalFile() == file) {
|
||||||
return Weight.thisFile
|
return Weight.thisFile
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
val fqName = DescriptorUtils.getFqName(o.descriptor).toString()
|
val fqName = fqName(o)
|
||||||
// Invalid name can be met for class object descriptor: Test.MyTest.A.<no name provided>.testOther
|
// Invalid name can be met for class object descriptor: Test.MyTest.A.<no name provided>.testOther
|
||||||
if (isValidJavaFqName(fqName)) {
|
if (fqName != null && isValidJavaFqName(fqName)) {
|
||||||
val importPath = ImportPath(fqName)
|
val importPath = ImportPath(fqName)
|
||||||
return when {
|
return when {
|
||||||
ImportInsertHelper.getInstance().needImport(importPath, file) -> Weight.notImported
|
ImportInsertHelper.getInstance().needImport(importPath, file) -> Weight.notImported
|
||||||
ImportInsertHelper.getInstance().isImportedWithDefault(importPath, file) -> Weight.kotlinDefaultImport
|
ImportInsertHelper.getInstance().isImportedWithDefault(importPath, file) -> Weight.kotlinDefaultImport
|
||||||
else -> Weight.imported
|
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.psi.*;
|
||||||
import org.jetbrains.jet.lang.resolve.ImportPath;
|
import org.jetbrains.jet.lang.resolve.ImportPath;
|
||||||
import org.jetbrains.jet.lang.resolve.java.TopDownAnalyzerFacadeForJVM;
|
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.FqName;
|
||||||
import org.jetbrains.jet.lang.resolve.name.NamePackage;
|
import org.jetbrains.jet.lang.resolve.name.NamePackage;
|
||||||
import org.jetbrains.jet.plugin.project.ProjectStructureUtil;
|
import org.jetbrains.jet.plugin.project.ProjectStructureUtil;
|
||||||
@@ -111,9 +112,14 @@ public class ImportInsertHelperImpl extends ImportInsertHelper {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean isImportedWithDefault(@NotNull ImportPath importPath, @NotNull JetFile contextFile) {
|
public boolean isImportedWithDefault(@NotNull ImportPath importPath, @NotNull JetFile contextFile) {
|
||||||
|
|
||||||
List<ImportPath> defaultImports = ProjectStructureUtil.isJsKotlinModule(contextFile)
|
List<ImportPath> defaultImports = ProjectStructureUtil.isJsKotlinModule(contextFile)
|
||||||
? TopDownAnalyzerFacadeForJS.DEFAULT_IMPORTS
|
? TopDownAnalyzerFacadeForJS.DEFAULT_IMPORTS
|
||||||
: TopDownAnalyzerFacadeForJVM.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);
|
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);
|
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")
|
@TestMetadata("KeywordsLast.kt")
|
||||||
public void testKeywordsLast() throws Exception {
|
public void testKeywordsLast() throws Exception {
|
||||||
String fileName = JetTestUtils.navigationMetadata("idea/testData/completion/weighers/basic/KeywordsLast.kt");
|
String fileName = JetTestUtils.navigationMetadata("idea/testData/completion/weighers/basic/KeywordsLast.kt");
|
||||||
|
|||||||
Reference in New Issue
Block a user