diff --git a/idea/src/org/jetbrains/jet/plugin/completion/CompletionSorting.kt b/idea/src/org/jetbrains/jet/plugin/completion/CompletionSorting.kt index f6b6420c00b..06c93da3cd2 100644 --- a/idea/src/org/jetbrains/jet/plugin/completion/CompletionSorting.kt +++ b/idea/src/org/jetbrains/jet/plugin/completion/CompletionSorting.kt @@ -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..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..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 + } } } diff --git a/idea/src/org/jetbrains/jet/plugin/quickfix/ImportInsertHelperImpl.java b/idea/src/org/jetbrains/jet/plugin/quickfix/ImportInsertHelperImpl.java index 33933e14413..0b943e4f60d 100644 --- a/idea/src/org/jetbrains/jet/plugin/quickfix/ImportInsertHelperImpl.java +++ b/idea/src/org/jetbrains/jet/plugin/quickfix/ImportInsertHelperImpl.java @@ -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 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); } diff --git a/idea/testData/completion/weighers/basic/ImportedFirstForJavaClass.kt b/idea/testData/completion/weighers/basic/ImportedFirstForJavaClass.kt new file mode 100644 index 00000000000..021f337c07e --- /dev/null +++ b/idea/testData/completion/weighers/basic/ImportedFirstForJavaClass.kt @@ -0,0 +1,8 @@ +import java.sql.DriverPropertyInfo + +val some = Driver + +// INVOCATION_COUNT: 2 +// ORDER: Driver +// ORDER: DriverPropertyInfo +// ORDER: DriverManager diff --git a/idea/tests/org/jetbrains/jet/completion/weighers/BasicCompletionWeigherTestGenerated.java b/idea/tests/org/jetbrains/jet/completion/weighers/BasicCompletionWeigherTestGenerated.java index 327c8cdf1c6..b2c142cb17a 100644 --- a/idea/tests/org/jetbrains/jet/completion/weighers/BasicCompletionWeigherTestGenerated.java +++ b/idea/tests/org/jetbrains/jet/completion/weighers/BasicCompletionWeigherTestGenerated.java @@ -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");