Various Python refactorings as prerequirements for PY-65425 and PY-78035.

1. Make SDK->Module association function `suspend` to make it testable (one can't test something that runs code by `invokeLater`)
2. Add SDK->Module associations checks into `ensureSdkIsUsable` test tool.
3. Rename fields in v2 widgets to emphasize their purpose.
4. Make this association default for `pyVenv` fixture.

GitOrigin-RevId: 58267750b6dda0b596183c8bd335ce75b00fd41d
This commit is contained in:
Ilya.Kazakevich
2025-04-22 23:35:48 +02:00
committed by intellij-monorepo-bot
parent 1e7ecbbd9c
commit 36d87867b7
21 changed files with 111 additions and 84 deletions

View File

@@ -4,12 +4,18 @@ package com.jetbrains.python.sdk
import com.fasterxml.jackson.annotation.JsonInclude
import com.fasterxml.jackson.core.JsonGenerator
import com.fasterxml.jackson.core.JsonParser
import com.fasterxml.jackson.databind.*
import com.fasterxml.jackson.databind.DeserializationContext
import com.fasterxml.jackson.databind.JsonDeserializer
import com.fasterxml.jackson.databind.JsonSerializer
import com.fasterxml.jackson.databind.SerializerProvider
import com.fasterxml.jackson.databind.module.SimpleModule
import com.fasterxml.jackson.module.kotlin.jacksonObjectMapper
import com.google.common.io.Resources
import com.intellij.openapi.application.writeAction
import com.intellij.openapi.diagnostic.Logger
import com.intellij.openapi.diagnostic.logger
import com.intellij.openapi.module.Module
import com.intellij.openapi.projectRoots.Sdk
import com.intellij.openapi.util.Version
import com.intellij.util.PathUtilRt
import com.intellij.util.Url
@@ -17,6 +23,7 @@ import com.intellij.util.Urls
import com.intellij.util.system.CpuArch
import com.intellij.util.system.OS
import com.jetbrains.python.psi.LanguageLevel
import org.jetbrains.annotations.ApiStatus
import java.net.URL
import java.nio.charset.StandardCharsets
@@ -171,3 +178,27 @@ object SdksKeeper {
private fun load() = configUrl?.let { Resources.toString(it, StandardCharsets.UTF_8) }
}
@ApiStatus.Internal
suspend fun Sdk.setAssociationToModuleAsync(module: Module) {
val path = module.basePath
assert(path != null) { "Module $module has not paths, and can't be associated" }
setAssociationToPath(path)
}
@ApiStatus.Internal
suspend fun Sdk.setAssociationToPath(path: String?) {
val data = getOrCreateAdditionalData().also {
when {
path != null -> it.associateWithModulePath(path)
else -> it.associatedModulePath = null
}
}
val modificator = sdkModificator
modificator.sdkAdditionalData = data
writeAction {
modificator.commitChanges()
}
}