mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
[WSM] IJPL-218899 PythonFacetConfiguration may try to search for an SDK in ProjectJdkTable before SDKs were applied to the project WSM
GitOrigin-RevId: 9b6a750172c7e87994288d2ec28713f2193fc899
This commit is contained in:
committed by
intellij-monorepo-bot
parent
20800ac302
commit
a97aba8498
+12
-2
@@ -31,6 +31,7 @@ import com.intellij.workspaceModel.ide.impl.jpsMetrics
|
||||
import com.intellij.workspaceModel.ide.impl.legacyBridge.library.ProjectLibraryTableBridgeImpl
|
||||
import com.intellij.workspaceModel.ide.impl.legacyBridge.project.ProjectRootManagerBridge
|
||||
import io.opentelemetry.api.metrics.Meter
|
||||
import kotlinx.coroutines.CompletableDeferred
|
||||
import kotlinx.coroutines.coroutineScope
|
||||
import kotlinx.coroutines.launch
|
||||
|
||||
@@ -65,6 +66,7 @@ private class ModuleBridgeLoaderService : InitProjectActivity {
|
||||
val start = Milliseconds.now()
|
||||
|
||||
if (workspaceModel.loadedFromCache) {
|
||||
val globalWsmAppliedToProjectWsm = CompletableDeferred<Project>()
|
||||
span("modules loading with cache") {
|
||||
if (projectModelSynchronizer.hasNoSerializedJpsModules()) {
|
||||
LOG.warn("Loaded from cache, but no serialized modules found. " +
|
||||
@@ -78,11 +80,17 @@ private class ModuleBridgeLoaderService : InitProjectActivity {
|
||||
targetUnloadedEntitiesBuilder = null,
|
||||
loadedFromCache = workspaceModel.loadedFromCache,
|
||||
workspaceModel = workspaceModel,
|
||||
globalWsmAppliedToProjectWsm = globalWsmAppliedToProjectWsm,
|
||||
)
|
||||
}
|
||||
val globalWorkspaceModel = GlobalWorkspaceModel.getInstanceAsync(project.getEelDescriptor().machine)
|
||||
backgroundWriteAction {
|
||||
globalWorkspaceModel.applyStateToProject(project)
|
||||
try {
|
||||
globalWorkspaceModel.applyStateToProject(project)
|
||||
}
|
||||
finally {
|
||||
globalWsmAppliedToProjectWsm.complete(project)
|
||||
}
|
||||
}
|
||||
}
|
||||
else {
|
||||
@@ -137,6 +145,7 @@ private suspend fun loadModules(
|
||||
targetBuilder: MutableEntityStorage?,
|
||||
targetUnloadedEntitiesBuilder: MutableEntityStorage?,
|
||||
loadedFromCache: Boolean,
|
||||
globalWsmAppliedToProjectWsm: CompletableDeferred<Project>? = null,
|
||||
) {
|
||||
span("modules instantiation") {
|
||||
val moduleManager = project.serviceAsync<ModuleManager>() as ModuleManagerComponentBridge
|
||||
@@ -153,7 +162,8 @@ private suspend fun loadModules(
|
||||
moduleManager.loadModules(loadedEntities = entities,
|
||||
unloadedEntities = unloadedEntities,
|
||||
targetBuilder = targetBuilder,
|
||||
initializeFacets = loadedFromCache)
|
||||
initializeFacets = loadedFromCache,
|
||||
globalWsmAppliedToProjectWsm)
|
||||
}
|
||||
|
||||
span("libraries instantiation") {
|
||||
|
||||
+3
-1
@@ -41,6 +41,7 @@ import com.intellij.workspaceModel.ide.impl.legacyBridge.module.roots.ModuleRoot
|
||||
import com.intellij.workspaceModel.ide.impl.legacyBridge.project.ModuleRootListenerBridgeImpl
|
||||
import com.intellij.workspaceModel.ide.legacyBridge.ModuleBridge
|
||||
import com.intellij.workspaceModel.ide.toPath
|
||||
import kotlinx.coroutines.CompletableDeferred
|
||||
import kotlinx.coroutines.CoroutineName
|
||||
import kotlinx.coroutines.CoroutineScope
|
||||
import kotlinx.coroutines.launch
|
||||
@@ -169,8 +170,9 @@ open class ModuleManagerComponentBridge(private val project: Project, coroutineS
|
||||
return moduleEntity
|
||||
}
|
||||
|
||||
final override fun initFacets(modules: Collection<Pair<ModuleEntity, ModuleBridge>>) {
|
||||
final override fun initFacets(modules: Collection<Pair<ModuleEntity, ModuleBridge>>, globalWsmAppliedToProjectWsm: CompletableDeferred<Project>?) {
|
||||
coroutineScope.launch(CoroutineName("init facets")) {
|
||||
globalWsmAppliedToProjectWsm?.await() // PythonFacetConfiguration expects to find an SDK by its name in ProjectJdkTable (which looks it up in project WSM)
|
||||
ModuleBridgeImpl.initFacets(modules = modules, project = project)
|
||||
}
|
||||
}
|
||||
|
||||
+3
-2
@@ -187,6 +187,7 @@ abstract class ModuleManagerBridgeImpl(
|
||||
unloadedEntities: List<ModuleEntity>,
|
||||
targetBuilder: MutableEntityStorage?,
|
||||
initializeFacets: Boolean,
|
||||
globalWsmAppliedToProjectWsm: CompletableDeferred<Project>?,
|
||||
): Unit = loadAllModulesTimeMs.addMeasuredTime {
|
||||
LOG.debug { "Loading modules for ${loadedEntities.size} entities: [${loadedEntities.joinToString { it.name }}]" }
|
||||
|
||||
@@ -218,7 +219,7 @@ abstract class ModuleManagerBridgeImpl(
|
||||
// Facets that are loaded from the cache do not generate "EntityAdded" event and aren't initialized
|
||||
// We initialize the facets manually here (after modules loading).
|
||||
if (initializeFacets) {
|
||||
initFacets(result)
|
||||
initFacets(result, globalWsmAppliedToProjectWsm)
|
||||
}
|
||||
|
||||
coroutineScope.launch {
|
||||
@@ -247,7 +248,7 @@ abstract class ModuleManagerBridgeImpl(
|
||||
}
|
||||
}
|
||||
|
||||
protected open fun initFacets(modules: Collection<Pair<ModuleEntity, ModuleBridge>>) {
|
||||
protected open fun initFacets(modules: Collection<Pair<ModuleEntity, ModuleBridge>>, globalWsmAppliedToProjectWsm: CompletableDeferred<Project>?) {
|
||||
}
|
||||
|
||||
final override fun calculateUnloadModules(
|
||||
|
||||
Reference in New Issue
Block a user