mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-01-06 11:50:54 +07:00
[python] PY-81866 don't spam stub notifications while it's installing
(cherry picked from commit 5f8374cc36bff759e1a0a6a01917d71b8b15d836) GitOrigin-RevId: 25440bd6c7f1c38d9de218d126e4abf17de0b00d
This commit is contained in:
committed by
intellij-monorepo-bot
parent
b2325c2198
commit
40f0114010
@@ -13,6 +13,7 @@ import com.intellij.notification.NotificationAction
|
||||
import com.intellij.notification.NotificationGroupManager
|
||||
import com.intellij.notification.NotificationType
|
||||
import com.intellij.openapi.application.ApplicationManager
|
||||
import com.intellij.openapi.components.ComponentManager
|
||||
import com.intellij.openapi.module.Module
|
||||
import com.intellij.openapi.module.ModuleUtilCore
|
||||
import com.intellij.openapi.project.Project
|
||||
@@ -27,6 +28,7 @@ import com.jetbrains.python.codeInsight.typing.PyStubPackagesAdvertiserCache.Com
|
||||
import com.jetbrains.python.inspections.PyInspection
|
||||
import com.jetbrains.python.inspections.PyInspectionVisitor
|
||||
import com.jetbrains.python.inspections.quickfix.PyInstallRequirementsFix
|
||||
import com.jetbrains.python.inspections.requirement.RunningPackagingTasksListener
|
||||
import com.jetbrains.python.packaging.*
|
||||
import com.jetbrains.python.packaging.requirement.PyRequirementRelation
|
||||
import com.jetbrains.python.psi.PyFile
|
||||
@@ -62,7 +64,7 @@ private class PyStubPackagesAdvertiser : PyInspection() {
|
||||
|
||||
override fun getOptionsPane() =
|
||||
pane(stringList("ignoredPackages", PyPsiBundle.message("INSP.stub.packages.compatibility.ignored.packages.label")))
|
||||
|
||||
|
||||
override fun buildVisitor(holder: ProblemsHolder,
|
||||
isOnTheFly: Boolean,
|
||||
session: LocalInspectionToolSession): PsiElementVisitor = Visitor(ignoredPackages, holder, session)
|
||||
@@ -111,7 +113,7 @@ private class PyStubPackagesAdvertiser : PyInspection() {
|
||||
if (availablePackages.isEmpty()) return
|
||||
|
||||
val ignoredStubPackages = (IGNORE + ignoredPackages).mapNotNull { packageManager.parseRequirement(it) }
|
||||
val cache = ApplicationManager.getApplication().getService(PyStubPackagesAdvertiserCache::class.java).forSdk(sdk)
|
||||
val cache = ApplicationManager.getApplication().getService<PyStubPackagesAdvertiserCache>().forSdk(sdk)
|
||||
|
||||
val forcedToLoad = processForcedPackages(file, sources, module, sdk, packageManager, ignoredStubPackages, cache)
|
||||
val checkedToLoad = processCheckedPackages(file, sources, module, sdk, packageManager, ignoredStubPackages, cache)
|
||||
@@ -161,7 +163,12 @@ private class PyStubPackagesAdvertiser : PyInspection() {
|
||||
|
||||
val (sourcesToLoad, cached) = splitIntoNotCachedAndCached(checkedSourcesToProcess(sources), cache)
|
||||
|
||||
val (reqs, args) = toRequirementsAndExtraArgs(cached, ignoredStubPackages)
|
||||
val (unfilteredReqs, args) = toRequirementsAndExtraArgs(cached, ignoredStubPackages)
|
||||
|
||||
val status = file.project.getService<PyStubPackagesInstallingStatus>()
|
||||
|
||||
val reqs = unfilteredReqs.filterNot { status.markedAsInstalling(it.name) }
|
||||
|
||||
if (reqs.isNotEmpty()) {
|
||||
val plural = reqs.size > 1
|
||||
val reqsToString = PyPackageUtil.requirementsToString(reqs)
|
||||
@@ -272,13 +279,13 @@ private class PyStubPackagesAdvertiser : PyInspection() {
|
||||
val project = module.project
|
||||
val stubPkgNamesToInstall = reqs.mapTo(mutableSetOf()) { it.name }
|
||||
|
||||
object : PyPackageManagerUI.Listener {
|
||||
val installationListener = object : RunningPackagingTasksListener(module) {
|
||||
override fun started() {
|
||||
project.getService(PyStubPackagesInstallingStatus::class.java).markAsInstalling(stubPkgNamesToInstall)
|
||||
project.getService<PyStubPackagesInstallingStatus>().markAsInstalling(stubPkgNamesToInstall)
|
||||
}
|
||||
|
||||
override fun finished(exceptions: MutableList<ExecutionException>?) {
|
||||
val status = project.getService(PyStubPackagesInstallingStatus::class.java)
|
||||
override fun finished(exceptions: List<ExecutionException>) {
|
||||
val status = project.getService<PyStubPackagesInstallingStatus>()
|
||||
|
||||
val stubPkgsToUninstall = PyStubPackagesCompatibilityInspection
|
||||
.findIncompatibleRuntimeToStubPackages(sdk) { it.name in stubPkgNamesToInstall }
|
||||
@@ -311,7 +318,7 @@ private class PyStubPackagesAdvertiser : PyInspection() {
|
||||
}
|
||||
|
||||
val name = PyBundle.message("code.insight.stub.packages.install.requirements.fix.name", reqs.size)
|
||||
return PyInstallRequirementsFix(name, sdk, reqs, args)
|
||||
return PyInstallRequirementsFix(name, sdk, reqs, args, installationListener)
|
||||
}
|
||||
|
||||
private fun createIgnorePackagesQuickFix(reqs: List<PyRequirement>, packageManager: PyPackageManager): LocalQuickFix {
|
||||
|
||||
Reference in New Issue
Block a user