Explicitly state that PluginDeclarationProviderFactory is source-only
Before this change `filesScope` was effectively empty in cases when
module info is a library, thus looking
into PackageIndexUtil.packageExists(name, indexedFilesScope, project)
was kind of redundant since it always returns false for empty scopes
The initial motivation was run by 1716720604
that made PackageIndexUtil::packageExists calls much more frequent
This commit is contained in:
@@ -16,7 +16,6 @@
|
|||||||
|
|
||||||
package org.jetbrains.kotlin.resolve.jvm
|
package org.jetbrains.kotlin.resolve.jvm
|
||||||
|
|
||||||
import com.intellij.psi.search.GlobalSearchScope
|
|
||||||
import org.jetbrains.kotlin.analyzer.*
|
import org.jetbrains.kotlin.analyzer.*
|
||||||
import org.jetbrains.kotlin.config.JvmTarget
|
import org.jetbrains.kotlin.config.JvmTarget
|
||||||
import org.jetbrains.kotlin.container.get
|
import org.jetbrains.kotlin.container.get
|
||||||
@@ -58,7 +57,7 @@ object JvmAnalyzerFacade : AnalyzerFacade() {
|
|||||||
val project = moduleContext.project
|
val project = moduleContext.project
|
||||||
val declarationProviderFactory = DeclarationProviderFactoryService.createDeclarationProviderFactory(
|
val declarationProviderFactory = DeclarationProviderFactoryService.createDeclarationProviderFactory(
|
||||||
project, moduleContext.storageManager, syntheticFiles,
|
project, moduleContext.storageManager, syntheticFiles,
|
||||||
if (moduleInfo.isLibrary) GlobalSearchScope.EMPTY_SCOPE else moduleContentScope,
|
moduleContentScope,
|
||||||
moduleInfo
|
moduleInfo
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|||||||
@@ -233,8 +233,6 @@ data class ModuleContent(
|
|||||||
interface PlatformAnalysisParameters
|
interface PlatformAnalysisParameters
|
||||||
|
|
||||||
interface ModuleInfo {
|
interface ModuleInfo {
|
||||||
val isLibrary: Boolean
|
|
||||||
get() = false
|
|
||||||
val name: Name
|
val name: Name
|
||||||
val displayedName: String get() = name.asString()
|
val displayedName: String get() = name.asString()
|
||||||
fun dependencies(): List<ModuleInfo>
|
fun dependencies(): List<ModuleInfo>
|
||||||
|
|||||||
@@ -112,7 +112,7 @@ object CommonAnalyzerFacade : AnalyzerFacade() {
|
|||||||
val project = moduleContext.project
|
val project = moduleContext.project
|
||||||
val declarationProviderFactory = DeclarationProviderFactoryService.createDeclarationProviderFactory(
|
val declarationProviderFactory = DeclarationProviderFactoryService.createDeclarationProviderFactory(
|
||||||
project, moduleContext.storageManager, syntheticFiles,
|
project, moduleContext.storageManager, syntheticFiles,
|
||||||
if (moduleInfo.isLibrary) GlobalSearchScope.EMPTY_SCOPE else moduleContentScope,
|
moduleContentScope,
|
||||||
moduleInfo
|
moduleInfo
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|||||||
+2
-2
@@ -42,11 +42,11 @@ abstract class DeclarationProviderFactoryService {
|
|||||||
project: Project,
|
project: Project,
|
||||||
storageManager: StorageManager,
|
storageManager: StorageManager,
|
||||||
syntheticFiles: Collection<KtFile>,
|
syntheticFiles: Collection<KtFile>,
|
||||||
filesScope: GlobalSearchScope,
|
moduleContentScope: GlobalSearchScope,
|
||||||
moduleInfo: ModuleInfo
|
moduleInfo: ModuleInfo
|
||||||
): DeclarationProviderFactory {
|
): DeclarationProviderFactory {
|
||||||
return ServiceManager.getService(project, DeclarationProviderFactoryService::class.java)!!
|
return ServiceManager.getService(project, DeclarationProviderFactoryService::class.java)!!
|
||||||
.create(project, storageManager, syntheticFiles, filteringScope(syntheticFiles, filesScope), moduleInfo)
|
.create(project, storageManager, syntheticFiles, filteringScope(syntheticFiles, moduleContentScope), moduleInfo)
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun filteringScope(syntheticFiles: Collection<KtFile>, baseScope: GlobalSearchScope): GlobalSearchScope {
|
private fun filteringScope(syntheticFiles: Collection<KtFile>, baseScope: GlobalSearchScope): GlobalSearchScope {
|
||||||
|
|||||||
@@ -16,7 +16,6 @@
|
|||||||
|
|
||||||
package org.jetbrains.kotlin.idea.caches.resolve
|
package org.jetbrains.kotlin.idea.caches.resolve
|
||||||
|
|
||||||
import com.intellij.psi.search.GlobalSearchScope
|
|
||||||
import org.jetbrains.kotlin.analyzer.*
|
import org.jetbrains.kotlin.analyzer.*
|
||||||
import org.jetbrains.kotlin.caches.resolve.LibraryModuleInfo
|
import org.jetbrains.kotlin.caches.resolve.LibraryModuleInfo
|
||||||
import org.jetbrains.kotlin.config.TargetPlatformVersion
|
import org.jetbrains.kotlin.config.TargetPlatformVersion
|
||||||
@@ -56,7 +55,7 @@ object JsAnalyzerFacade : AnalyzerFacade() {
|
|||||||
project,
|
project,
|
||||||
moduleContext.storageManager,
|
moduleContext.storageManager,
|
||||||
syntheticFiles,
|
syntheticFiles,
|
||||||
if (moduleInfo.isLibrary) GlobalSearchScope.EMPTY_SCOPE else moduleContentScope,
|
moduleContentScope,
|
||||||
moduleInfo
|
moduleInfo
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|||||||
@@ -221,9 +221,6 @@ class LibraryInfo(val project: Project, val library: Library) : IdeaModuleInfo,
|
|||||||
|
|
||||||
override fun contentScope(): GlobalSearchScope = LibraryWithoutSourceScope(project, library)
|
override fun contentScope(): GlobalSearchScope = LibraryWithoutSourceScope(project, library)
|
||||||
|
|
||||||
override val isLibrary: Boolean
|
|
||||||
get() = true
|
|
||||||
|
|
||||||
override fun dependencies(): List<IdeaModuleInfo> {
|
override fun dependencies(): List<IdeaModuleInfo> {
|
||||||
val result = LinkedHashSet<IdeaModuleInfo>()
|
val result = LinkedHashSet<IdeaModuleInfo>()
|
||||||
result.add(this)
|
result.add(this)
|
||||||
@@ -261,9 +258,6 @@ data class LibrarySourceInfo(val project: Project, val library: Library) : IdeaM
|
|||||||
|
|
||||||
override fun sourceScope(): GlobalSearchScope = KotlinSourceFilterScope.librarySources(LibrarySourceScope(project, library), project)
|
override fun sourceScope(): GlobalSearchScope = KotlinSourceFilterScope.librarySources(LibrarySourceScope(project, library), project)
|
||||||
|
|
||||||
override val isLibrary: Boolean
|
|
||||||
get() = true
|
|
||||||
|
|
||||||
override fun modulesWhoseInternalsAreVisible(): Collection<ModuleInfo> {
|
override fun modulesWhoseInternalsAreVisible(): Collection<ModuleInfo> {
|
||||||
return listOf(LibraryInfo(project, library))
|
return listOf(LibraryInfo(project, library))
|
||||||
}
|
}
|
||||||
@@ -366,4 +360,4 @@ interface SourceForBinaryModuleInfo : IdeaModuleInfo {
|
|||||||
|
|
||||||
override val moduleOrigin: ModuleOrigin
|
override val moduleOrigin: ModuleOrigin
|
||||||
get() = ModuleOrigin.OTHER
|
get() = ModuleOrigin.OTHER
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -18,7 +18,6 @@ package org.jetbrains.kotlin.idea.stubindex
|
|||||||
|
|
||||||
import com.intellij.openapi.project.Project
|
import com.intellij.openapi.project.Project
|
||||||
import com.intellij.openapi.roots.ProjectRootManager
|
import com.intellij.openapi.roots.ProjectRootManager
|
||||||
import com.intellij.openapi.util.Ref
|
|
||||||
import com.intellij.openapi.vfs.VirtualFile
|
import com.intellij.openapi.vfs.VirtualFile
|
||||||
import com.intellij.psi.search.DelegatingGlobalSearchScope
|
import com.intellij.psi.search.DelegatingGlobalSearchScope
|
||||||
import com.intellij.psi.search.GlobalSearchScope
|
import com.intellij.psi.search.GlobalSearchScope
|
||||||
@@ -86,9 +85,6 @@ class KotlinSourceFilterScope private constructor(
|
|||||||
@JvmStatic
|
@JvmStatic
|
||||||
fun projectSourceAndClassFiles(delegate: GlobalSearchScope, project: Project) = create(delegate, true, false, true, false, project)
|
fun projectSourceAndClassFiles(delegate: GlobalSearchScope, project: Project) = create(delegate, true, false, true, false, project)
|
||||||
|
|
||||||
@JvmStatic
|
|
||||||
fun sources(delegate: GlobalSearchScope, project: Project) = create(delegate, true, false, false, true, project)
|
|
||||||
|
|
||||||
@JvmStatic
|
@JvmStatic
|
||||||
fun projectSources(delegate: GlobalSearchScope, project: Project) = create(delegate, true, false, false, false, project)
|
fun projectSources(delegate: GlobalSearchScope, project: Project) = create(delegate, true, false, false, false, project)
|
||||||
|
|
||||||
|
|||||||
+3
-4
@@ -61,10 +61,9 @@ class PluginDeclarationProviderFactory(
|
|||||||
fileBasedDeclarationProviderFactory.packageExists(fqName) || stubBasedPackageExists(fqName)
|
fileBasedDeclarationProviderFactory.packageExists(fqName) || stubBasedPackageExists(fqName)
|
||||||
|
|
||||||
private fun stubBasedPackageExists(name: FqName): Boolean {
|
private fun stubBasedPackageExists(name: FqName): Boolean {
|
||||||
return if (moduleInfo is ModuleSourceInfo)
|
// We're only looking for source-based declarations
|
||||||
project.service<PerModulePackageCacheService>().packageExists(name, moduleInfo)
|
val moduleSourceInfo = moduleInfo as? ModuleSourceInfo ?: return false
|
||||||
else
|
return project.service<PerModulePackageCacheService>().packageExists(name, moduleSourceInfo)
|
||||||
PackageIndexUtil.packageExists(name, indexedFilesScope, project)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun getStubBasedPackageMemberDeclarationProvider(name: FqName): PackageMemberDeclarationProvider? {
|
private fun getStubBasedPackageMemberDeclarationProvider(name: FqName): PackageMemberDeclarationProvider? {
|
||||||
|
|||||||
+22
-7
@@ -19,6 +19,7 @@ package org.jetbrains.kotlin.idea.stubindex.resolve
|
|||||||
import com.intellij.openapi.project.Project
|
import com.intellij.openapi.project.Project
|
||||||
import com.intellij.psi.search.GlobalSearchScope
|
import com.intellij.psi.search.GlobalSearchScope
|
||||||
import org.jetbrains.kotlin.analyzer.ModuleInfo
|
import org.jetbrains.kotlin.analyzer.ModuleInfo
|
||||||
|
import org.jetbrains.kotlin.idea.caches.resolve.ModuleSourceInfo
|
||||||
import org.jetbrains.kotlin.idea.stubindex.KotlinSourceFilterScope
|
import org.jetbrains.kotlin.idea.stubindex.KotlinSourceFilterScope
|
||||||
import org.jetbrains.kotlin.psi.KtFile
|
import org.jetbrains.kotlin.psi.KtFile
|
||||||
import org.jetbrains.kotlin.resolve.lazy.declarations.DeclarationProviderFactory
|
import org.jetbrains.kotlin.resolve.lazy.declarations.DeclarationProviderFactory
|
||||||
@@ -28,11 +29,25 @@ import org.jetbrains.kotlin.storage.StorageManager
|
|||||||
class PluginDeclarationProviderFactoryService : DeclarationProviderFactoryService() {
|
class PluginDeclarationProviderFactoryService : DeclarationProviderFactoryService() {
|
||||||
|
|
||||||
override fun create(
|
override fun create(
|
||||||
project: Project,
|
project: Project,
|
||||||
storageManager: StorageManager,
|
storageManager: StorageManager,
|
||||||
syntheticFiles: Collection<KtFile>,
|
syntheticFiles: Collection<KtFile>,
|
||||||
filesScope: GlobalSearchScope,
|
filesScope: GlobalSearchScope,
|
||||||
moduleInfo: ModuleInfo
|
moduleInfo: ModuleInfo
|
||||||
): DeclarationProviderFactory =
|
): DeclarationProviderFactory {
|
||||||
PluginDeclarationProviderFactory(project, KotlinSourceFilterScope.sources(filesScope, project), storageManager, syntheticFiles, moduleInfo)
|
if (syntheticFiles.isEmpty() && moduleInfo !is ModuleSourceInfo) {
|
||||||
|
// No actual source declarations for libraries
|
||||||
|
// Even in case of libraries sources they should be obtained through the classpath with subsequent decompiling
|
||||||
|
// Anyway, we'll filter them out with `KotlinSourceFilterScope.sources` call below
|
||||||
|
return DeclarationProviderFactory.EMPTY
|
||||||
|
}
|
||||||
|
|
||||||
|
return PluginDeclarationProviderFactory(
|
||||||
|
project,
|
||||||
|
KotlinSourceFilterScope.projectSources(filesScope, project),
|
||||||
|
storageManager,
|
||||||
|
syntheticFiles,
|
||||||
|
moduleInfo
|
||||||
|
)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user