void (@NotNull VFileEvent event) { app.assertWriteAccessAllowed(); if (!event.isValid()) return; List<VFileEvent> outValidatedEvents = new ArrayList<>(); outValidatedEvents.add(event); List<Runnable> outApplyActions = new ArrayList<>(); List<VFileEvent> jarDeleteEvents = VfsImplUtil.getJarInvalidationEvents(event, outApplyActions); BulkFileListener publisher = getPublisher(); if (jarDeleteEvents.isEmpty() && outApplyActions.isEmpty()) { // optimisation: skip all groupings runSuppressing( () -> fireBeforeEvents(publisher, outValidatedEvents), () -> applyEvent(event), () -> fireAfterEvents(publisher, outValidatedEvents) ); } else { outApplyActions.add(() -> applyEvent(event)); // there are a number of additional jar events generated for (VFileEvent jarDeleteEvent : jarDeleteEvents) { outApplyActions.add(() -> applyEvent(jarDeleteEvent)); outValidatedEvents.add(jarDeleteEvent); } applyMultipleEvents(publisher, outApplyActions, outValidatedEvents, false); } }