void (@NotNull ClientState state) { Collection<DocumentReference> refs = collectReferencesWithoutMergers(state); Collection<DocumentReference> openDocs = new HashSet<>(); for (DocumentReference each : refs) { VirtualFile file = each.getFile(); if (file == null) { Document document = each.getDocument(); if (document != null && EditorFactory.getInstance().editors(document, myProject).findFirst().isPresent()) { openDocs.add(each); } } else { if (myProject != null && FileEditorManager.getInstance(myProject).isFileOpen(file)) { openDocs.add(each); } } } refs.removeAll(openDocs); if (refs.size() <= FREE_QUEUES_LIMIT) return; DocumentReference[] backSorted = refs.toArray(DocumentReference.EMPTY_ARRAY); Arrays.sort(backSorted, Comparator.comparingInt(ref -> getLastCommandTimestamp(state, ref))); for (int i = 0; i < backSorted.length - FREE_QUEUES_LIMIT; i++) { DocumentReference each = backSorted[i]; if (getLastCommandTimestamp(state, each) + COMMANDS_TO_KEEP_LIVE_QUEUES > state.myCommandTimestamp) break; clearUndoRedoQueue(state, each); } }