void (@NotNull Project project, @NotNull Collection<? extends VirtualFile> virtualFiles) { if (virtualFiles.isEmpty()) { return; } ProjectLevelVcsManager vcsManager = ProjectLevelVcsManager.getInstance(project); Multimap<AbstractVcs, VirtualFile> vcsMap = ArrayListMultimap.create(); for (VirtualFile createdFile : virtualFiles) { AbstractVcs vcs = vcsManager.getVcsFor(createdFile); if (vcs == null) { continue; } VfsUtil.processFileRecursivelyWithoutIgnored(createdFile, (virtualFile) -> vcsMap.put(vcs, virtualFile)); } for (AbstractVcs vcs : vcsMap.keySet()) { VcsShowConfirmationOption addOption = vcsManager.getStandardConfirmation(VcsConfiguration.StandardConfirmation.ADD, vcs); if (addOption.getValue() == VcsShowConfirmationOption.Value.DO_NOTHING_SILENTLY) return; List<VirtualFile> filesList = new ArrayList<>(vcsMap.get(vcs)); if (addOption.getValue() == VcsShowConfirmationOption.Value.DO_ACTION_SILENTLY) { performAdditions(vcs, filesList); } else { AbstractVcsHelper helper = AbstractVcsHelper.getInstance(project); Ref<Collection<VirtualFile>> filesToAdd = Ref.create(); ApplicationManager.getApplication().invokeAndWait(() -> filesToAdd.set( helper .selectFilesToProcess( new ArrayList<>(filesList), VcsBundle.message("confirmation.title.add.files.to", vcs.getDisplayName()), null, VcsBundle.message("confirmation.title.add.file.to", vcs.getDisplayName()), null, addOption)) ); if (!filesToAdd.isNull()) { performAdditions(vcs, new ArrayList<>(filesToAdd.get())); } } } }