diff --git a/idea/idea-completion/src/org/jetbrains/kotlin/idea/completion/CompletionSession.kt b/idea/idea-completion/src/org/jetbrains/kotlin/idea/completion/CompletionSession.kt index 199f55b42cf..426398ffd06 100644 --- a/idea/idea-completion/src/org/jetbrains/kotlin/idea/completion/CompletionSession.kt +++ b/idea/idea-completion/src/org/jetbrains/kotlin/idea/completion/CompletionSession.kt @@ -220,12 +220,18 @@ abstract class CompletionSessionBase(protected val configuration: CompletionSess return parent is JetSimpleNameExpression && !JetPsiUtil.isSelectorInQualified(parent) } - protected fun getTopLevelCallables(): Collection - = indicesHelper.getTopLevelCallables({ prefixMatcher.prefixMatches(it) }) + protected fun getTopLevelCallables(): Collection { + val descriptors = indicesHelper.getTopLevelCallables({ prefixMatcher.prefixMatches(it) }) + return filterShadowedNonImported(descriptors, reference!!) + } protected fun getTopLevelExtensions(): Collection { - val extensions = indicesHelper.getCallableTopLevelExtensions({ prefixMatcher.prefixMatches(it) }, reference!!.expression) - return ShadowedDeclarationsFilter(bindingContext, moduleDescriptor, project).filterNonImported(extensions, referenceVariants, reference.expression) + val descriptors = indicesHelper.getCallableTopLevelExtensions({ prefixMatcher.prefixMatches(it) }, reference!!.expression) + return filterShadowedNonImported(descriptors, reference) + } + + private fun filterShadowedNonImported(descriptors: Collection, reference: JetSimpleNameReference): Collection { + return ShadowedDeclarationsFilter(bindingContext, moduleDescriptor, project).filterNonImported(descriptors, referenceVariants, reference.expression) } protected fun addAllClasses(kindFilter: (ClassKind) -> Boolean) { diff --git a/idea/idea-completion/testData/basic/multifile/PreferMemberToGlobal/PreferMemberToGlobal.dependency.kt b/idea/idea-completion/testData/basic/multifile/PreferMemberToGlobal/PreferMemberToGlobal.dependency.kt new file mode 100644 index 00000000000..65c456d456f --- /dev/null +++ b/idea/idea-completion/testData/basic/multifile/PreferMemberToGlobal/PreferMemberToGlobal.dependency.kt @@ -0,0 +1,3 @@ +package dependency + +fun xxx(): Int = 0 \ No newline at end of file diff --git a/idea/idea-completion/testData/basic/multifile/PreferMemberToGlobal/PreferMemberToGlobal.kt b/idea/idea-completion/testData/basic/multifile/PreferMemberToGlobal/PreferMemberToGlobal.kt new file mode 100644 index 00000000000..bf09db6b00d --- /dev/null +++ b/idea/idea-completion/testData/basic/multifile/PreferMemberToGlobal/PreferMemberToGlobal.kt @@ -0,0 +1,11 @@ +class C { + fun xxx(){} + + fun f() { + xx + } +} + +// INVOCATION_COUNT: 2 +// EXIST: { lookupString: "xxx", itemText: "xxx", tailText: "()", typeText: "Unit" } +// NOTHING_ELSE diff --git a/idea/idea-completion/tests/org/jetbrains/kotlin/idea/completion/test/MultiFileJvmBasicCompletionTestGenerated.java b/idea/idea-completion/tests/org/jetbrains/kotlin/idea/completion/test/MultiFileJvmBasicCompletionTestGenerated.java index b8b20b345bc..315021d19bf 100644 --- a/idea/idea-completion/tests/org/jetbrains/kotlin/idea/completion/test/MultiFileJvmBasicCompletionTestGenerated.java +++ b/idea/idea-completion/tests/org/jetbrains/kotlin/idea/completion/test/MultiFileJvmBasicCompletionTestGenerated.java @@ -227,6 +227,12 @@ public class MultiFileJvmBasicCompletionTestGenerated extends AbstractMultiFileJ doTest(fileName); } + @TestMetadata("PreferMemberToGlobal") + public void testPreferMemberToGlobal() throws Exception { + String fileName = JetTestUtils.navigationMetadata("idea/idea-completion/testData/basic/multifile/PreferMemberToGlobal/"); + doTest(fileName); + } + @TestMetadata("PreferMoreSpecificExtension1") public void testPreferMoreSpecificExtension1() throws Exception { String fileName = JetTestUtils.navigationMetadata("idea/idea-completion/testData/basic/multifile/PreferMoreSpecificExtension1/");