in src/org/jetbrains/r/packages/remote/ui/RInstalledPackagesPanelBase.java [455:486]
protected void updateUninstallUpgrade() {
final int[] selected = myPackagesTable.getSelectedRows();
boolean upgradeAvailable = false;
boolean canUninstall = selected.length != 0;
boolean canInstall = installEnabled();
boolean canUpgrade = true;
if (myPackageManagementService != null && selected.length != 0) {
for (int i = 0; i != selected.length; ++i) {
final int index = selected[i];
if (index >= myPackagesTable.getRowCount()) continue;
final Object value = myPackagesTable.getValueAt(index, 0);
if (value instanceof RInstalledPackage pkg) {
if (!canUninstallPackage(pkg)) {
canUninstall = false;
}
canInstall = canInstallPackage(pkg);
if (!canUpgradePackage(pkg)) {
canUpgrade = false;
}
final String pyPackageName = pkg.getName();
final String availableVersion = (String)myPackagesTable.getValueAt(index, 2);
if (!upgradeAvailable) {
upgradeAvailable = isUpdateAvailable(pkg.getVersion(), availableVersion) &&
!myCurrentlyInstalling.contains(pyPackageName);
}
if (!canUninstall && !canUpgrade) break;
}
}
}
myInstallEnabled = canInstall;
myUpgradeEnabled = upgradeAvailable && canUpgrade;
}