@Nullable
  public static PsiDirectory selectDirectory(
      Project project,
      PsiDirectory[] packageDirectories,
      PsiDirectory defaultDirectory,
      String postfixToShow) {
    ProjectFileIndex projectFileIndex = getInstance(project).getFileIndex();

    ArrayList<PsiDirectory> possibleDirs = new ArrayList<>();
    for (PsiDirectory dir : packageDirectories) {
      if (!dir.isValid()) continue;
      if (!dir.isWritable()) continue;
      if (possibleDirs.contains(dir)) continue;
      if (!projectFileIndex.isInContent(dir.getVirtualFile())) continue;
      possibleDirs.add(dir);
    }

    if (possibleDirs.isEmpty()) return null;
    if (possibleDirs.size() == 1) return possibleDirs.get(0);

    if (getApplication().isUnitTestMode()) return possibleDirs.get(0);

    DirectoryChooser chooser = new DirectoryChooser(project);
    chooser.setTitle(message("title.choose.destination.directory"));
    chooser.fillList(
        possibleDirs.toArray(new PsiDirectory[possibleDirs.size()]),
        defaultDirectory,
        project,
        postfixToShow);
    return chooser.showAndGet() ? chooser.getSelectedDirectory() : null;
  }
 @Nullable
 public static PsiDirectory chooseDirectory(
     PsiDirectory[] targetDirectories,
     @Nullable PsiDirectory initialDirectory,
     @NotNull Project project,
     Map<PsiDirectory, String> relativePathsToCreate) {
   final DirectoryChooser chooser =
       new DirectoryChooser(project, new DirectoryChooserModuleTreeView(project));
   chooser.setTitle(RefactoringBundle.message("choose.destination.directory"));
   chooser.fillList(targetDirectories, initialDirectory, project, relativePathsToCreate);
   if (!chooser.showAndGet()) {
     return null;
   }
   return chooser.getSelectedDirectory();
 }