mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-04-19 21:11:28 +07:00
PY-75932 Poetry: the endless process of creating an interpreter
Make Module.isPipenv/isPoetry only readable. Create SdkAdditionalData when creating new sdk. What made it possible to delete the dangerous function PySdkExt#setCorrectTypeSdk. Merge-request: IJ-MR-145160 Merged-by: Egor Eliseev <Egor.Eliseev@jetbrains.com> GitOrigin-RevId: 657092ed87f9948ada5aa2ffacfea0653a482ac7
This commit is contained in:
committed by
intellij-monorepo-bot
parent
3361aba5cb
commit
e6f654da72
@@ -114,13 +114,12 @@ class PyPipfileSdkConfiguration : PyProjectSdkConfigurationExtension {
|
||||
ProjectJdkTable.getInstance().allJdks,
|
||||
file,
|
||||
PythonSdkType.getInstance(),
|
||||
null,
|
||||
PyPipEnvSdkAdditionalData(),
|
||||
suggestedSdkName(basePath)
|
||||
)
|
||||
|
||||
ApplicationManager.getApplication().invokeAndWait {
|
||||
LOGGER.debug("Adding associated pipenv environment: $path, $basePath")
|
||||
sdk.isPipEnv = true
|
||||
sdk.setAssociationToModule(module)
|
||||
SdkConfigurationUtil.addSdk(sdk)
|
||||
}
|
||||
|
||||
@@ -114,13 +114,12 @@ class PyPoetrySdkConfiguration : PyProjectSdkConfigurationExtension {
|
||||
ProjectJdkTable.getInstance().allJdks,
|
||||
file,
|
||||
PythonSdkType.getInstance(),
|
||||
null,
|
||||
PyPoetrySdkAdditionalData(),
|
||||
suggestedSdkName(basePath)
|
||||
)
|
||||
|
||||
ApplicationManager.getApplication().invokeAndWait {
|
||||
LOGGER.debug("Adding associated poetry environment: $path, $basePath")
|
||||
sdk.isPoetry = true
|
||||
sdk.setAssociationToModule(module)
|
||||
SdkConfigurationUtil.addSdk(sdk)
|
||||
}
|
||||
|
||||
@@ -178,6 +178,7 @@ fun createSdkByGenerateTask(
|
||||
baseSdk: Sdk?,
|
||||
associatedProjectPath: String?,
|
||||
suggestedSdkName: String?,
|
||||
sdkAdditionalData: PythonSdkAdditionalData? = null
|
||||
): Sdk {
|
||||
val homeFile = try {
|
||||
val homePath = ProgressManager.getInstance().run(generateSdkHomePath)
|
||||
@@ -204,7 +205,7 @@ fun createSdkByGenerateTask(
|
||||
existingSdks.toTypedArray(),
|
||||
homeFile,
|
||||
PythonSdkType.getInstance(),
|
||||
null,
|
||||
sdkAdditionalData,
|
||||
sdkName)
|
||||
}
|
||||
|
||||
@@ -574,23 +575,4 @@ val Sdk.sdkSeemsValid: Boolean
|
||||
val pythonSdkAdditionalData = getOrCreateAdditionalData()
|
||||
if (pythonSdkAdditionalData is PyRemoteSdkAdditionalData) return true
|
||||
return pythonSdkAdditionalData.flavorAndData.sdkSeemsValid(this, targetEnvConfiguration)
|
||||
}
|
||||
|
||||
inline fun <reified T : PythonSdkAdditionalData> setCorrectTypeSdk(sdk: Sdk, additionalDataClass: Class<T>, value: Boolean) {
|
||||
val oldData = sdk.sdkAdditionalData
|
||||
val newData = if (value) {
|
||||
when (oldData) {
|
||||
is PythonSdkAdditionalData -> additionalDataClass.getDeclaredConstructors().first { it.parameterCount == 1 }.newInstance(oldData) as T
|
||||
else -> additionalDataClass.getDeclaredConstructor().newInstance()
|
||||
}
|
||||
}
|
||||
else {
|
||||
when (oldData) {
|
||||
is T -> PythonSdkAdditionalData(PythonSdkFlavor.getFlavor(sdk))
|
||||
else -> oldData
|
||||
}
|
||||
}
|
||||
val modificator = sdk.sdkModificator
|
||||
modificator.sdkAdditionalData = newData
|
||||
ApplicationManager.getApplication().runWriteAction { modificator.commitChanges() }
|
||||
}
|
||||
}
|
||||
@@ -68,9 +68,8 @@ val Module.pipFile: VirtualFile?
|
||||
/**
|
||||
* Tells if the SDK was added as a pipenv.
|
||||
*/
|
||||
var Sdk.isPipEnv: Boolean
|
||||
internal val Sdk.isPipEnv: Boolean
|
||||
get() = sdkAdditionalData is PyPipEnvSdkAdditionalData
|
||||
set(value) = setCorrectTypeSdk(this, PyPipEnvSdkAdditionalData::class.java, value)
|
||||
|
||||
/**
|
||||
* The user-set persisted a path to the pipenv executable.
|
||||
@@ -125,10 +124,9 @@ fun setupPipEnvSdkUnderProgress(project: Project?,
|
||||
return VirtualEnvReader.Instance.findPythonInPythonRoot(Path.of(pipEnv))?.toString() ?: FileUtil.join(pipEnv, "bin", "python")
|
||||
}
|
||||
}
|
||||
return createSdkByGenerateTask(task, existingSdks, null, projectPath, suggestedSdkName(projectPath))?.apply {
|
||||
return createSdkByGenerateTask(task, existingSdks, null, projectPath, suggestedSdkName(projectPath), PyPipEnvSdkAdditionalData()).apply {
|
||||
// FIXME: multi module project support - associate with module path
|
||||
setAssociationToPath(projectPath)
|
||||
isPipEnv = true
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -65,15 +65,13 @@ fun setupPoetrySdkUnderProgress(project: Project?,
|
||||
}
|
||||
}
|
||||
|
||||
return createSdkByGenerateTask(task, existingSdks, null, projectPath, suggestedSdkName(Path.of(projectPath))).apply {
|
||||
return createSdkByGenerateTask(task, existingSdks, null, projectPath, suggestedSdkName(Path.of(projectPath)), PyPoetrySdkAdditionalData()).apply {
|
||||
module?.let { setAssociationToModule(it) }
|
||||
isPoetry = true
|
||||
}
|
||||
}
|
||||
|
||||
var Sdk.isPoetry: Boolean
|
||||
internal val Sdk.isPoetry: Boolean
|
||||
get() = sdkAdditionalData is PyPoetrySdkAdditionalData
|
||||
set(value) = setCorrectTypeSdk(this, PyPoetrySdkAdditionalData::class.java, value)
|
||||
|
||||
val Module.poetryLock: VirtualFile?
|
||||
get() = baseDir?.findChild(POETRY_LOCK)
|
||||
|
||||
Reference in New Issue
Block a user