mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
[kotlin] migrate IdeKotlinModulePackageNamesProvider from IdeaModuleInfo to KaModule
KTIJ-31422 GitOrigin-RevId: b06a4494f8505c40592dc68ac07eb3d26c219881
This commit is contained in:
committed by
intellij-monorepo-bot
parent
146b1873c7
commit
ba0ff4344a
+20
-12
@@ -13,21 +13,24 @@ import com.intellij.openapi.vfs.VirtualFile
|
||||
import com.intellij.psi.search.GlobalSearchScope
|
||||
import com.intellij.util.indexing.FileBasedIndex
|
||||
import com.intellij.util.indexing.FileBasedIndex.ValueProcessor
|
||||
import org.jetbrains.kotlin.analysis.api.KaImplementationDetail
|
||||
import org.jetbrains.kotlin.analysis.api.platform.modification.KotlinGlobalModuleStateModificationListener
|
||||
import org.jetbrains.kotlin.analysis.api.platform.modification.KotlinModuleStateModificationKind
|
||||
import org.jetbrains.kotlin.analysis.api.platform.modification.KotlinModuleStateModificationListener
|
||||
import org.jetbrains.kotlin.analysis.api.platform.utils.NullableConcurrentCache
|
||||
import org.jetbrains.kotlin.analysis.api.projectStructure.KaBuiltinsModule
|
||||
import org.jetbrains.kotlin.analysis.api.projectStructure.KaLibraryModule
|
||||
import org.jetbrains.kotlin.analysis.api.projectStructure.KaLibrarySourceModule
|
||||
import org.jetbrains.kotlin.analysis.api.projectStructure.KaModule
|
||||
import org.jetbrains.kotlin.analysis.api.projectStructure.KaSourceModule
|
||||
import org.jetbrains.kotlin.analysis.api.utils.errors.withKaModuleEntry
|
||||
import org.jetbrains.kotlin.idea.base.indices.names.KotlinBinaryRootToPackageIndex
|
||||
import org.jetbrains.kotlin.idea.base.indices.names.isSupportedByBinaryRootToPackageIndex
|
||||
import org.jetbrains.kotlin.idea.base.projectStructure.KtLibraryModuleByModuleInfo
|
||||
import org.jetbrains.kotlin.idea.base.projectStructure.KtSdkLibraryModuleByModuleInfo
|
||||
import org.jetbrains.kotlin.idea.base.projectStructure.KtSourceModuleByModuleInfo
|
||||
import org.jetbrains.kotlin.idea.base.util.K1ModeProjectStructureApi
|
||||
import org.jetbrains.kotlin.idea.base.projectStructure.openapiLibrary
|
||||
import org.jetbrains.kotlin.idea.base.projectStructure.openapiSdk
|
||||
import org.jetbrains.kotlin.name.StandardClassIds
|
||||
import org.jetbrains.kotlin.utils.addToStdlib.flattenTo
|
||||
import org.jetbrains.kotlin.utils.exceptions.errorWithAttachment
|
||||
|
||||
/**
|
||||
* [IdeKotlinModulePackageNamesProvider] caches the results of [computePackageNames][org.jetbrains.kotlin.analysis.api.platform.declarations.KotlinDeclarationProvider.computePackageNames]
|
||||
@@ -69,11 +72,10 @@ internal class IdeKotlinModulePackageNamesProvider(private val project: Project)
|
||||
}
|
||||
|
||||
fun computePackageNames(module: KaModule): Set<String>? =
|
||||
@OptIn(K1ModeProjectStructureApi::class)
|
||||
when (module) {
|
||||
is KtSourceModuleByModuleInfo -> computeSourceModulePackageSet(module)
|
||||
is KaSourceModule -> computeSourceModulePackageSet(module)
|
||||
|
||||
is KtSdkLibraryModuleByModuleInfo, is KtLibraryModuleByModuleInfo ->
|
||||
is KaLibraryModule ->
|
||||
cache.getOrPut(module) { module ->
|
||||
module.binaryRootFiles?.let { computePackageSetFromBinaryRoots(it) }
|
||||
}
|
||||
@@ -84,8 +86,7 @@ internal class IdeKotlinModulePackageNamesProvider(private val project: Project)
|
||||
else -> null
|
||||
}
|
||||
|
||||
@OptIn(K1ModeProjectStructureApi::class)
|
||||
private fun computeSourceModulePackageSet(module: KtSourceModuleByModuleInfo): Set<String>? = null // KTIJ-27450
|
||||
private fun computeSourceModulePackageSet(module: KaSourceModule): Set<String>? = null // KTIJ-27450
|
||||
|
||||
private fun computePackageSetFromBinaryRoots(binaryRoots: Array<VirtualFile>): Set<String>? {
|
||||
if (binaryRoots.any { !it.isSupportedByBinaryRootToPackageIndex }) {
|
||||
@@ -142,11 +143,18 @@ internal class IdeKotlinModulePackageNamesProvider(private val project: Project)
|
||||
binaryRootsCache.map.clear()
|
||||
}
|
||||
|
||||
@OptIn(K1ModeProjectStructureApi::class)
|
||||
@OptIn(KaImplementationDetail::class)
|
||||
private val KaModule.binaryRootFiles: Array<VirtualFile>?
|
||||
get() = when (this) {
|
||||
is KtSdkLibraryModuleByModuleInfo -> moduleInfo.sdk.rootProvider.getFiles(OrderRootType.CLASSES)
|
||||
is KtLibraryModuleByModuleInfo -> libraryInfo.library.getFiles(OrderRootType.CLASSES)
|
||||
is KaLibraryModule -> {
|
||||
val rootProvider =
|
||||
openapiLibrary?.rootProvider
|
||||
?: openapiSdk?.rootProvider
|
||||
?: errorWithAttachment("${KaLibraryModule::class} should be either sdk or library") {
|
||||
withKaModuleEntry("kaModule", this@binaryRootFiles)
|
||||
}
|
||||
rootProvider.getFiles(OrderRootType.CLASSES)
|
||||
}
|
||||
else -> null
|
||||
}
|
||||
|
||||
|
||||
+4
-1
@@ -4,6 +4,7 @@ package org.jetbrains.kotlin.idea.base.projectStructure
|
||||
import com.intellij.openapi.project.Project
|
||||
import com.intellij.openapi.vfs.VirtualFile
|
||||
import com.intellij.openapi.roots.libraries.Library as OpenapiLibrary
|
||||
import com.intellij.openapi.projectRoots.Sdk as OpenapiSdk
|
||||
import com.intellij.platform.workspace.jps.entities.LibraryId
|
||||
import com.intellij.platform.workspace.jps.entities.ModuleId
|
||||
import org.jetbrains.annotations.ApiStatus
|
||||
@@ -32,7 +33,9 @@ abstract class IDEProjectStructureProvider : KotlinProjectStructureProviderBase(
|
||||
|
||||
abstract fun getKaLibraryModuleSymbolicId(libraryModule: KaLibraryModule): LibraryId
|
||||
|
||||
abstract fun getOpenapiLibrary(module: KaLibraryModule): OpenapiLibrary
|
||||
abstract fun getOpenapiLibrary(module: KaLibraryModule): OpenapiLibrary?
|
||||
|
||||
abstract fun getOpenapiSdk(module: KaLibraryModule): OpenapiSdk?
|
||||
|
||||
abstract fun getContainingKaModules(virtualFile: VirtualFile): List<KaModule>
|
||||
}
|
||||
|
||||
+14
-3
@@ -9,6 +9,7 @@ import com.intellij.openapi.extensions.ExtensionPointName
|
||||
import com.intellij.openapi.module.Module
|
||||
import com.intellij.openapi.progress.ProgressManager
|
||||
import com.intellij.openapi.project.Project
|
||||
import com.intellij.openapi.projectRoots.Sdk
|
||||
import com.intellij.openapi.roots.ProjectRootModificationTracker
|
||||
import com.intellij.openapi.roots.libraries.Library
|
||||
import com.intellij.openapi.vfs.VirtualFile
|
||||
@@ -256,11 +257,21 @@ internal class ProjectStructureProviderIdeImpl(private val project: Project) : I
|
||||
?: error("Cannot find library entity for ${libraryModule.libraryInfo.library.name}")
|
||||
}
|
||||
|
||||
override fun getOpenapiLibrary(module: KaLibraryModule): Library {
|
||||
require(module is KtLibraryModuleByModuleInfo)
|
||||
return module.libraryInfo.library
|
||||
override fun getOpenapiLibrary(module: KaLibraryModule): Library? {
|
||||
if (module is KtLibraryModuleByModuleInfo) {
|
||||
return module.libraryInfo.library
|
||||
}
|
||||
return null
|
||||
}
|
||||
|
||||
override fun getOpenapiSdk(module: KaLibraryModule): Sdk? {
|
||||
if (module is KtSdkLibraryModuleByModuleInfo) {
|
||||
return module.moduleInfo.sdk
|
||||
}
|
||||
return null
|
||||
}
|
||||
|
||||
|
||||
override fun getContainingKaModules(virtualFile: VirtualFile): List<KaModule> {
|
||||
return ModuleInfoProvider.getInstance(project)
|
||||
.collectLibraryBinariesModuleInfos(virtualFile)
|
||||
|
||||
+17
-1
@@ -4,6 +4,8 @@ package org.jetbrains.kotlin.idea.base.projectStructure
|
||||
|
||||
import com.intellij.openapi.module.Module
|
||||
import com.intellij.openapi.project.Project
|
||||
import com.intellij.openapi.projectRoots.Sdk as OpenapiSdk
|
||||
import com.intellij.openapi.roots.libraries.Library as OpenapiLibrary
|
||||
import com.intellij.openapi.roots.libraries.Library
|
||||
import com.intellij.openapi.vfs.VirtualFile
|
||||
import com.intellij.platform.workspace.jps.entities.LibraryId
|
||||
@@ -132,9 +134,23 @@ val KaSourceModule.sourceModuleKind: KaSourceModuleKind?
|
||||
val KaSourceModule.openapiModule: Module
|
||||
get() = project.ideProjectStructureProvider.getOpenapiModule(this)
|
||||
|
||||
val KaLibraryModule.openapiLibrary: Library
|
||||
/**
|
||||
* Gets the [com.intellij.openapi.roots.libraries.Library] represented by this [KaLibraryModule].
|
||||
*
|
||||
* @return the [com.intellij.openapi.roots.libraries.Library] that represents the current [KaLibraryModule],
|
||||
* or `null` if the current [KaLibraryModule] is an SDK.
|
||||
*/
|
||||
val KaLibraryModule.openapiLibrary: OpenapiLibrary?
|
||||
get() = project.ideProjectStructureProvider.getOpenapiLibrary(this)
|
||||
|
||||
/**
|
||||
* Gets the [com.intellij.openapi.projectRoots.Sdk] represented by this [KaLibraryModule].
|
||||
*
|
||||
* @return the [com.intellij.openapi.projectRoots.Sdk] that represents the current [KaLibraryModule],
|
||||
* or `null` if the current [KaLibraryModule] is a library.
|
||||
*/
|
||||
val KaLibraryModule.openapiSdk: OpenapiSdk?
|
||||
get() = project.ideProjectStructureProvider.getOpenapiSdk(this)
|
||||
|
||||
/**
|
||||
* Converts the [Library] to a list of [KaLibraryModule] in the specified [project].
|
||||
|
||||
+2
-2
@@ -148,8 +148,8 @@ fun KaModule.nameForTooltip(): String {
|
||||
is KaSourceModule -> takeIf { openapiModule.isHMPPEnabled }?.openapiModule?.name?.let { return it }
|
||||
|
||||
/* For libraries, we're trying to show artifact variant name */
|
||||
is KaLibrarySourceModule -> binaryLibrary.openapiLibrary.extractVariantName(binaryLibrary)?.let { return it }
|
||||
is KaLibraryModule -> openapiLibrary.extractVariantName(this)?.let { return it }
|
||||
is KaLibrarySourceModule -> binaryLibrary.openapiLibrary?.extractVariantName(binaryLibrary)?.let { return it }
|
||||
is KaLibraryModule -> openapiLibrary?.extractVariantName(this)?.let { return it }
|
||||
}
|
||||
|
||||
(this as? KaSourceModule)?.stableModuleName?.let { Name.guessByFirstCharacter(it) }?.asStringStripSpecialMarkers()?.let { return it }
|
||||
|
||||
Reference in New Issue
Block a user