void (int eventsSize) { CollectedEvents collectedEvents = myCollectedEvents; if (collectedEvents == null) { // some crazy invalid event nesting happened, like in DbSrcFileSystem.getOutputStream // where refresh is called right inside stream.close(), leading to before(), before(), after(), after() events return; } myCollectedEvents = null; long start = System.currentTimeMillis(); ApplicationManager.getApplication().assertWriteIntentLockAcquired(); // guarantees no attempts to get read action lock under "this" lock incModificationCount(); //noinspection SynchronizeOnThis synchronized (this) { for (NodeToUpdate toUpdate : collectedEvents.toUpdateNodes) { FilePartNode parent = toUpdate.parent; FilePartNode node = toUpdate.node; node.update(parent, getRoot(node.myFS), "VFPMI invalidated VFP during update", toUpdate.myEvent); } } for (EventDescriptor event : collectedEvents.eventList) { event.fireAfter(); } assertConsistency(); long afterElapsedMs = System.currentTimeMillis() - start; if (afterElapsedMs > 1000 || collectedEvents.prepareElapsedMs > 1000) { LOG.warn("VirtualFilePointerManagerImpl.prepareChange(" + eventsSize + " events): " + collectedEvents.prepareElapsedMs + "ms." + "; total pointers: " + numberOfPointers() + "; afterElapsedMs: " + afterElapsedMs + "ms.; eventList.size(): " + collectedEvents.eventList.size() + "; toFirePointers.size(): " + collectedEvents.toFirePointers.size() + "; toUpdateNodes.size(): " + collectedEvents.toUpdateNodes.size() + "; eventList: " + ContainerUtil.getFirstItems(collectedEvents.eventList, 100)); } }