boolean (@NotNull NodeDescriptor<?> nodeDescriptor) { while(true) { try (LockToken ignored = attemptLock()) { if (ignored == null) { // async children calculation is in progress under lock if (myProgress != null && myProgress.isRunning()) myProgress.cancel(); continue; } AtomicBoolean update = new AtomicBoolean(); execute(new TreeRunnable("AbstractTreeUi.update") { @Override public void perform() { nodeDescriptor.setUpdateCount(nodeDescriptor.getUpdateCount() + 1); update.set(getBuilder().updateNodeDescriptor(nodeDescriptor)); } }); return update.get(); } catch (IndexNotReadyException e) { warnOnIndexNotReady(e); return false; } catch (InterruptedException e) { LOG.info(e); return false; } } }