private void setLatestVersionsForInstalledPackages()

in src/org/jetbrains/r/packages/remote/ui/RInstalledPackagesPanelBase.java [606:649]


  private void setLatestVersionsForInstalledPackages() {
    final PackageManagementServiceEx serviceEx = getServiceEx();
    if (serviceEx == null) {
      return;
    }
    int packageCount = myPackagesTableModel.getRowCount();
    if (packageCount == 0) {
      onUpdateFinished();
    }
    final AtomicInteger inProgressPackageCount = new AtomicInteger(packageCount);
    for (int i = 0; i < packageCount; ++i) {
      final int finalIndex = i;
      final RInstalledPackage pkg = getInstalledPackageAt(finalIndex);
      if (pkg != null) {
        serviceEx.fetchLatestVersion(pkg, new CatchingConsumer<>() {

          private void decrement() {
            if (inProgressPackageCount.decrementAndGet() == 0) {
              onUpdateFinished();
            }
          }

          @Override
          public void consume(Exception e) {
            UIUtil.invokeLaterIfNeeded(this::decrement);
            LOG.warn("Cannot fetch the latest version of the installed package " + pkg, e);
          }

          @Override
          public void consume(final @Nullable String latestVersion) {
            UIUtil.invokeLaterIfNeeded(() -> {
              if (finalIndex < myPackagesTableModel.getRowCount()) {
                RInstalledPackage p = getInstalledPackageAt(finalIndex);
                if (pkg == p) {
                  myPackagesTableModel.setValueAt(latestVersion, finalIndex, 2);
                }
              }
              decrement();
            });
          }
        });
      }
    }
  }