diff --git a/idea/idea-analysis/src/org/jetbrains/jet/plugin/search/searchUtil.kt b/idea/idea-analysis/src/org/jetbrains/jet/plugin/search/searchUtil.kt index bb4fb463d69..ec352cbe5c1 100644 --- a/idea/idea-analysis/src/org/jetbrains/jet/plugin/search/searchUtil.kt +++ b/idea/idea-analysis/src/org/jetbrains/jet/plugin/search/searchUtil.kt @@ -33,11 +33,4 @@ public fun Project.allScope(): GlobalSearchScope = GlobalSearchScope.allScope(th public fun Project.projectScope(): GlobalSearchScope = GlobalSearchScope.projectScope(this) -public fun PsiFile.fileScope(): GlobalSearchScope = GlobalSearchScope.fileScope(this) - -public fun searchScopeForSourceElementDependencies(element: PsiElement): GlobalSearchScope? { - val module = ModuleUtilCore.findModuleForPsiElement(element) ?: return null - val virtualFile = element.getContainingFile()?.getVirtualFile() ?: return null - val isInTests = ModuleRootManager.getInstance(module).getFileIndex().isInTestSourceContent(virtualFile) - return GlobalSearchScope.moduleWithDependenciesAndLibrariesScope(module, isInTests) -} \ No newline at end of file +public fun PsiFile.fileScope(): GlobalSearchScope = GlobalSearchScope.fileScope(this) \ No newline at end of file diff --git a/idea/src/org/jetbrains/jet/plugin/completion/CompletionSession.kt b/idea/src/org/jetbrains/jet/plugin/completion/CompletionSession.kt index ceec3e727eb..f49d8bc94cf 100644 --- a/idea/src/org/jetbrains/jet/plugin/completion/CompletionSession.kt +++ b/idea/src/org/jetbrains/jet/plugin/completion/CompletionSession.kt @@ -32,7 +32,6 @@ import org.jetbrains.jet.plugin.references.JetSimpleNameReference import org.jetbrains.jet.plugin.project.ResolveSessionForBodies import org.jetbrains.jet.plugin.caches.KotlinIndicesHelper import com.intellij.openapi.project.Project -import org.jetbrains.jet.plugin.search.searchScopeForSourceElementDependencies class CompletionSessionConfiguration( val completeNonImportedDeclarations: Boolean, @@ -62,7 +61,7 @@ abstract class CompletionSessionBase(protected val configuration: CompletionSess protected val collector: LookupElementsCollector = LookupElementsCollector(prefixMatcher, resolveSession) protected val project: Project = position.getProject() - protected val searchScope: GlobalSearchScope = searchScopeForSourceElementDependencies(parameters.getOriginalFile()) ?: GlobalSearchScope.EMPTY_SCOPE + protected val searchScope: GlobalSearchScope = parameters.getOriginalFile().getResolveScope() protected val indicesHelper: KotlinIndicesHelper = KotlinIndicesHelper(project, resolveSession, searchScope) { isVisibleDescriptor(it) } protected fun isVisibleDescriptor(descriptor: DeclarationDescriptor): Boolean { diff --git a/idea/src/org/jetbrains/jet/plugin/completion/TypesCompletion.kt b/idea/src/org/jetbrains/jet/plugin/completion/TypesCompletion.kt index 05c04fb86b7..492d64fc649 100644 --- a/idea/src/org/jetbrains/jet/plugin/completion/TypesCompletion.kt +++ b/idea/src/org/jetbrains/jet/plugin/completion/TypesCompletion.kt @@ -29,7 +29,6 @@ import org.jetbrains.jet.plugin.caches.JetFromJavaDescriptorHelper import org.jetbrains.jet.plugin.project.ProjectStructureUtil import org.jetbrains.jet.plugin.project.ResolveSessionForBodies import org.jetbrains.jet.plugin.caches.KotlinIndicesHelper -import org.jetbrains.jet.plugin.search.searchScopeForSourceElementDependencies import org.jetbrains.jet.lang.descriptors.DeclarationDescriptor class TypesCompletion(val parameters: CompletionParameters, @@ -40,12 +39,13 @@ class TypesCompletion(val parameters: CompletionParameters, result.addDescriptorElements(KotlinBuiltIns.getInstance().getNonPhysicalClasses().filter { prefixMatcher.prefixMatches(it.getName().asString()) }, suppressAutoInsertion = true) - val project = parameters.getOriginalFile().getProject() - val searchScope = searchScopeForSourceElementDependencies(parameters.getOriginalFile()) ?: return + val file = parameters.getOriginalFile() + val project = file.getProject() + val searchScope = file.getResolveScope() result.addDescriptorElements(KotlinIndicesHelper(project, resolveSession, searchScope, visibilityFilter).getClassDescriptors { prefixMatcher.prefixMatches(it) }, suppressAutoInsertion = true) - if (!ProjectStructureUtil.isJsKotlinModule(parameters.getOriginalFile() as JetFile)) { + if (!ProjectStructureUtil.isJsKotlinModule(file as JetFile)) { addAdaptedJavaCompletion(result) } } diff --git a/idea/src/org/jetbrains/jet/plugin/quickfix/AutoImportFix.kt b/idea/src/org/jetbrains/jet/plugin/quickfix/AutoImportFix.kt index a9b659307f4..e17513cb806 100644 --- a/idea/src/org/jetbrains/jet/plugin/quickfix/AutoImportFix.kt +++ b/idea/src/org/jetbrains/jet/plugin/quickfix/AutoImportFix.kt @@ -49,7 +49,6 @@ import org.jetbrains.jet.plugin.codeInsight.DescriptorToDeclarationUtil import com.intellij.openapi.module.ModuleUtilCore import org.jetbrains.jet.plugin.util.ProjectRootsUtil import org.jetbrains.jet.asJava.unwrapped -import org.jetbrains.jet.plugin.search.searchScopeForSourceElementDependencies import org.jetbrains.jet.lang.resolve.BindingContext import org.jetbrains.jet.lang.descriptors.DeclarationDescriptorWithVisibility import org.jetbrains.jet.lang.descriptors.Visibilities @@ -119,7 +118,7 @@ public class AutoImportFix(element: JetSimpleNameExpression) : JetHintAction", "EXIST: parameter") + } + + public fun testSecondCompletionInCustomLibrary() { + testCompletionInLibraryCodeFragment("Sh", "EXIST: ShortRange", "EXIST: Short", "INVOCATION_COUNT: 2") + } + + public fun testExtensionCompletionInCustomLibrary() { + testCompletionInLibraryCodeFragment("3.extOn", "EXIST: extOnInt") + } + + public fun testJavaTypesCompletion() { + testCompletionInLibraryCodeFragment("Hash", "EXIST: HashMap", "EXIST: HashSet") + } + + private fun testCompletionInLibraryCodeFragment(fragmentText: String, vararg completionDirectives: String) { + setupFixtureByCodeFragment(fragmentText) + val directives = completionDirectives.map { "//$it" }.joinToString(separator = "\n") + testCompletion(directives, TargetPlatform.JVM, { + myFixture.complete(CompletionType.BASIC) + }) + } + + private fun setupFixtureByCodeFragment(fragmentText: String) { val sourceFile = findLibrarySourceDir().findChild("customLibrary.kt") val jetFile = PsiManager.getInstance(getProject()).findFile(sourceFile) as JetFile val fooFunctionFromLibrary = jetFile.getDeclarations().first() as JetFunction val codeFragment = JetPsiFactory(fooFunctionFromLibrary).createExpressionCodeFragment( - "", + fragmentText, KotlinCodeFragmentFactory.getContextElement(fooFunctionFromLibrary.getBodyExpression()) ) myFixture.configureFromExistingVirtualFile(codeFragment.getVirtualFile()) - testCompletion("//EXIST: parameter", TargetPlatform.JVM, { - myFixture.complete(CompletionType.BASIC) - }) } private fun findLibrarySourceDir(): VirtualFile {