void (final Project project, final PsiDirectory[] directories) { if (!CommonRefactoringUtil.checkReadOnlyStatusRecursively(project, Arrays.asList(directories), true)) { return; } Map<PsiDirectory, String> sourceRootDirectories = buildRearrangeTargetsList(project, directories); DirectoryChooser chooser = new DirectoryChooser(project); chooser.setTitle(JavaRefactoringBundle.message("dialog.title.move.directory.to.source.root")); chooser.setDescription(JavaRefactoringBundle.message("move.label.text") + " ../" + SymbolPresentationUtil.getFilePathPresentation(directories[0])); chooser.fillList(sourceRootDirectories.keySet().toArray(PsiDirectory.EMPTY_ARRAY), null, project, sourceRootDirectories); if (!chooser.showAndGet()) { return; } final PsiDirectory selectedTarget = chooser.getSelectedDirectory(); if (selectedTarget == null) return; final MultiMap<PsiElement, String> conflicts = new MultiMap<>(); final Runnable analyzeConflicts = () -> ApplicationManager.getApplication().runReadAction(() -> { final Collection<? extends PsiElement> scopes = Arrays.asList(directories); final VirtualFile vFile = PsiUtilCore.getVirtualFile(selectedTarget); if (vFile != null) { RefactoringConflictsUtil.getInstance().analyzeModuleConflicts(project, scopes, UsageInfo.EMPTY_ARRAY, vFile, conflicts); } }); if (!ProgressManager.getInstance() .runProcessWithProgressSynchronously(analyzeConflicts, JavaRefactoringBundle.message("analyze.module.conflicts"), true, project)) { return; } if (!BaseRefactoringProcessor.processConflicts(project, conflicts)) return; final Ref<IncorrectOperationException> ex = Ref.create(null); final String commandDescription = RefactoringBundle.message("moving.directories.command"); Runnable runnable = () -> ApplicationManager.getApplication().runWriteAction(() -> { LocalHistoryAction a = LocalHistory.getInstance().startAction(commandDescription); try { rearrangeDirectoriesToTarget(directories, selectedTarget); } catch (IncorrectOperationException e) { ex.set(e); } finally { a.finish(); } }); CommandProcessor.getInstance().executeCommand(project, runnable, commandDescription, null); if (ex.get() != null) { RefactoringUIUtil.processIncorrectOperation(project, ex.get()); } }