void (@NotNull List<? extends VFileEvent> events) { for (VFileEvent event : events) { VirtualFile fileToIndex = null; boolean onlyContentDependent = true; if (event instanceof VFileContentChangeEvent) { fileToIndex = event.getFile(); } else if (event instanceof VFileCopyEvent ce) { final VirtualFile copy = ce.getNewParent().findChild(ce.getNewChildName()); if (copy != null) { fileToIndex = copy; onlyContentDependent = false; } } else if (event instanceof VFileCreateEvent) { final VirtualFile newChild = event.getFile(); if (newChild != null) { fileToIndex = newChild; onlyContentDependent = false; } } else if (event instanceof VFileMoveEvent) { fileToIndex = event.getFile(); onlyContentDependent = false; } else if (event instanceof VFilePropertyChangeEvent pce) { String propertyName = pce.getPropertyName(); if (propertyName.equals(VirtualFile.PROP_NAME)) { // indexes may depend on file name fileToIndex = pce.getFile(); onlyContentDependent = false; } else if (propertyName.equals(VirtualFile.PROP_ENCODING)) { fileToIndex = pce.getFile(); } } if (fileToIndex != null) { scheduleForIndexingRecursively(fileToIndex, onlyContentDependent); } } }