Use different scope in completion/autoimport if element is in production source root

This commit is contained in:
Pavel V. Talanov
2014-09-11 16:01:25 +04:00
parent 88b262faf1
commit 3eeed559b4
5 changed files with 16 additions and 10 deletions
@@ -20,6 +20,9 @@ import com.intellij.psi.search.GlobalSearchScope
import com.intellij.openapi.project.Project
import com.intellij.psi.PsiFile
import com.intellij.psi.search.SearchScope
import com.intellij.psi.PsiElement
import com.intellij.openapi.module.ModuleUtilCore
import com.intellij.openapi.roots.ModuleRootManager
public fun SearchScope.and(otherScope: SearchScope): SearchScope = intersectWith(otherScope)
public fun SearchScope.or(otherScope: SearchScope): SearchScope = union(otherScope)
@@ -31,3 +34,10 @@ 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)
}
@@ -30,8 +30,8 @@ import org.jetbrains.jet.plugin.codeInsight.TipsManager
import org.jetbrains.jet.plugin.completion.smart.SmartCompletion
import org.jetbrains.jet.plugin.references.JetSimpleNameReference
import org.jetbrains.jet.plugin.project.ResolveSessionForBodies
import com.intellij.openapi.module.ModuleUtilCore
import org.jetbrains.jet.plugin.caches.KotlinIndicesHelper
import org.jetbrains.jet.plugin.search.searchScopeForSourceElementDependencies
class CompletionSessionConfiguration(
val completeNonImportedDeclarations: Boolean,
@@ -80,8 +80,7 @@ class BasicCompletionSession(configuration: CompletionSessionConfiguration,
private val project = position.getProject()
private val indicesHelper = KotlinIndicesHelper(project)
private val module = ModuleUtilCore.findModuleForPsiElement(parameters.getOriginalFile())
private val searchScope = if (module != null) GlobalSearchScope.moduleWithDependenciesAndLibrariesScope(module) else GlobalSearchScope.EMPTY_SCOPE
private val searchScope = searchScopeForSourceElementDependencies(parameters.getOriginalFile()) ?: GlobalSearchScope.EMPTY_SCOPE
public fun complete(): Boolean {
assert(parameters.getCompletionType() == CompletionType.BASIC)
@@ -75,4 +75,3 @@ private fun qualifierName(descriptor: DeclarationDescriptor): String? = when (de
is PackageFragmentDescriptor -> DescriptorRenderer.SOURCE_CODE.renderFqName(descriptor.fqName)
else -> null
}
@@ -20,7 +20,6 @@ import com.intellij.codeInsight.completion.*
import com.intellij.codeInsight.lookup.LookupElement
import com.intellij.codeInsight.lookup.LookupElementDecorator
import com.intellij.psi.PsiClass
import com.intellij.psi.search.GlobalSearchScope
import com.intellij.util.Consumer
import org.jetbrains.jet.asJava.KotlinLightClass
import org.jetbrains.jet.lang.descriptors.ClassKind
@@ -33,16 +32,15 @@ import org.jetbrains.jet.plugin.caches.JetFromJavaDescriptorHelper
import org.jetbrains.jet.plugin.completion.handlers.JetJavaClassInsertHandler
import org.jetbrains.jet.plugin.project.ProjectStructureUtil
import org.jetbrains.jet.plugin.project.ResolveSessionForBodies
import com.intellij.openapi.module.ModuleUtilCore
import org.jetbrains.jet.plugin.caches.KotlinIndicesHelper
import org.jetbrains.jet.plugin.search.searchScopeForSourceElementDependencies
class TypesCompletion(val parameters: CompletionParameters, val resolveSession: ResolveSessionForBodies, val prefixMatcher: PrefixMatcher) {
fun addAllTypes(result: LookupElementsCollector) {
result.addDescriptorElements(KotlinBuiltIns.getInstance().getNonPhysicalClasses())
val project = parameters.getOriginalFile().getProject()
val module = ModuleUtilCore.findModuleForPsiElement(parameters.getOriginalFile()) ?: return
val searchScope = GlobalSearchScope.moduleWithDependenciesAndLibrariesScope(module)
val searchScope = searchScopeForSourceElementDependencies(parameters.getOriginalFile()) ?: return
result.addDescriptorElements(KotlinIndicesHelper(project).getClassDescriptors({ prefixMatcher.prefixMatches(it) }, resolveSession, searchScope))
if (!ProjectStructureUtil.isJsKotlinModule(parameters.getOriginalFile() as JetFile)) {
@@ -50,6 +50,7 @@ import org.jetbrains.jet.plugin.codeInsight.DescriptorToDeclarationUtil
import com.intellij.openapi.module.ModuleUtilCore
import org.jetbrains.jet.plugin.ProjectRootsUtil
import org.jetbrains.jet.asJava.unwrapped
import org.jetbrains.jet.plugin.search.searchScopeForSourceElementDependencies
/**
* Check possibility and perform fix for unresolved references.
@@ -109,8 +110,7 @@ public class AutoImportFix(element: JetSimpleNameExpression) : JetHintAction<Jet
val resolveSession = element.getLazyResolveSession()
val module = ModuleUtilCore.findModuleForPsiElement(file) ?: return listOf()
val searchScope = GlobalSearchScope.moduleWithDependenciesAndLibrariesScope(module)
val searchScope = searchScopeForSourceElementDependencies(file) ?: return listOf()
val result = ArrayList<PrioritizedFqName>()