Use different scope in completion/autoimport if element is in production source root
This commit is contained in:
@@ -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>()
|
||||
|
||||
|
||||
Reference in New Issue
Block a user