ActionCallback () { if (isReleased()) return ActionCallback.REJECTED; assertIsDispatchThread(); DefaultMutableTreeNode[] uc; synchronized (myUpdatingChildren) { uc = myUpdatingChildren.toArray(new DefaultMutableTreeNode[0]); } for (DefaultMutableTreeNode each : uc) { resetIncompleteNode(each); } Object[] bg = ArrayUtil.toObjectArray(myLoadedInBackground.keySet()); for (Object each : bg) { DefaultMutableTreeNode node = getNodeForElement(each, false); if (node != null) { resetIncompleteNode(node); } } myUpdaterState = null; getUpdater().reset(); myYieldingNow = false; myYieldingPasses.clear(); myYieldingDoneRunnables.clear(); myNodeActions.clear(); myNodeChildrenActions.clear(); synchronized (myUpdatingChildren) { myUpdatingChildren.clear(); } myLoadedInBackground.clear(); myDeferredExpansions.clear(); myDeferredSelections.clear(); ActionCallback result = _getReady(); result.doWhenDone(new TreeRunnable("AbstractTreeUi.resetToReadyNow: on done") { @Override public void perform() { myResettingToReadyNow.set(false); setCancelRequested(false); } }); maybeReady(); return result; }