void (@NotNull SvnVcs vcs, VirtualFile @NotNull [] files, @NotNull DataContext context) { boolean hasDirs = exists(files, VirtualFile::isDirectory); List<VirtualFile> fileList = new ArrayList<>(); if (!hasDirs) { Collections.addAll(fileList, files); } else { ProgressManager.getInstance().runProcessWithProgressSynchronously(() -> { for (VirtualFile file : files) { if (file.isDirectory()) { ProjectLevelVcsManager.getInstance(vcs.getProject()).iterateVcsRoot(file, filePath -> { ProgressManager.checkCanceled(); VirtualFile fileOrDir = filePath.getVirtualFile(); if (fileOrDir != null && !fileOrDir.isDirectory() && isEnabled(vcs, fileOrDir) && !fileList.contains(fileOrDir)) { fileList.add(fileOrDir); } return true; }); } else { if (!fileList.contains(file)) { fileList.add(file); } } } }, SvnBundle.message("progress.searching.for.files.with.conflicts"), true, vcs.getProject()); } ReadonlyStatusHandler.OperationStatus status = ReadonlyStatusHandler.getInstance(vcs.getProject()).ensureFilesWritable(fileList); fileList.removeAll(Arrays.asList(status.getReadonlyFiles())); AbstractVcsHelper.getInstance(vcs.getProject()).showMergeDialog(fileList, new SvnMergeProvider(vcs.getProject())); }