void (@NotNull VirtualDirectoryImpl parent, @NotNull Collection<? extends VFileCreateEvent> createEvents) { int parentId = getFileId(parent); NewVirtualFile vf = findFileById(parentId); if (!(vf instanceof VirtualDirectoryImpl)) return; parent = (VirtualDirectoryImpl)vf; // retain in `myIdToDirCache` at least for the duration of this block, so that subsequent `findFileById` won't crash NewVirtualFileSystem fs = getFileSystem(parent); List<ChildInfo> childrenAdded = new ArrayList<>(createEvents.size()); for (VFileCreateEvent createEvent : createEvents) { createEvent.resetCache(); String name = createEvent.getChildName(); Pair<@NotNull FileAttributes, String> childData = getChildData(fs, createEvent.getParent(), name, createEvent.getAttributes(), createEvent.getSymlinkTarget()); if (childData != null) { ChildInfo child = makeChildRecord(parent, parentId, name, childData, fs, createEvent.getChildren()); childrenAdded.add(child); } } childrenAdded.sort(ChildInfo.BY_ID); boolean caseSensitive = parent.isCaseSensitive(); vfsPeer.update(parent, parentId, oldChildren -> oldChildren.merge(vfsPeer, childrenAdded, caseSensitive)); parent.createAndAddChildren(childrenAdded, false, (__, ___) -> { }); saveScannedChildrenRecursively(createEvents, fs, parent.isCaseSensitive()); }