[python] PY-79486: Move Module.pythonSdk to sdk module and reuse it multi-module project.

GitOrigin-RevId: db441216c40aa35cbf494e05e3f6b549cd261cd6
This commit is contained in:
Ilya.Kazakevich
2025-12-25 22:25:51 +01:00
committed by intellij-monorepo-bot
parent 994ed3ec13
commit 957eac5c13
11 changed files with 62 additions and 26 deletions

View File

@@ -0,0 +1,25 @@
package com.jetbrains.python.sdk
import com.intellij.codeInsight.daemon.DaemonCodeAnalyzer
import com.intellij.openapi.application.ApplicationManager
import com.intellij.openapi.application.runInEdt
import com.intellij.openapi.diagnostic.fileLogger
import com.intellij.openapi.module.Module
import com.intellij.openapi.projectRoots.Sdk
import com.intellij.openapi.roots.ModuleRootModificationUtil
import com.jetbrains.python.sdk.legacy.PythonSdkUtil
var Module.pythonSdk: Sdk?
get() = PythonSdkUtil.findPythonSdk(this)
set(newSdk) {
val prevSdk = pythonSdk
thisLogger.info("Setting PythonSDK $newSdk to module $this")
ModuleRootModificationUtil.setModuleSdk(this, newSdk)
runInEdt {
DaemonCodeAnalyzer.getInstance(project).restart("Setting PythonSDK $newSdk to module $this")
}
ApplicationManager.getApplication().messageBus.syncPublisher(PySdkListener.TOPIC).moduleSdkUpdated(this, prevSdk, newSdk)
}
private val thisLogger = fileLogger()

View File

@@ -0,0 +1,18 @@
// Copyright 2000-2024 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license.
package com.jetbrains.python.sdk
import com.intellij.openapi.module.Module
import com.intellij.openapi.projectRoots.Sdk
import com.intellij.util.messages.Topic
import org.jetbrains.annotations.ApiStatus
@ApiStatus.Internal
interface PySdkListener {
@ApiStatus.Internal
fun moduleSdkUpdated(module: Module, prevSdk: Sdk?, newSdk: Sdk?)
companion object {
@ApiStatus.Internal
val TOPIC: Topic<PySdkListener> = Topic.create("Python SDK listener", PySdkListener::class.java)
}
}