private static void copyClassesImpl(final String copyClassName,
                                      final Project project,
                                      final Map<PsiFile, PsiClass[]> classes,
                                      final HashMap<PsiFile, String> map,
                                      final Object targetDirectory,
                                      final PsiDirectory defaultTargetDirectory,
                                      final @NlsContexts.Command String commandName,
                                      final boolean selectInActivePanel,
                                      final boolean openInEditor) {
    Runnable command = () -> {
      PsiDirectory target;
      if (targetDirectory instanceof PsiDirectory) {
        target = (PsiDirectory)targetDirectory;
      }
      else {
        target = WriteAction.compute(() -> ((MoveDestination)targetDirectory).getTargetDirectory(defaultTargetDirectory));
      }
      try {
        Collection<PsiFile> files = doCopyClasses(classes, map, copyClassName, target, project);
        if (openInEditor) {
          for (PsiFile file : files) {
            CopyHandler.updateSelectionInActiveProjectView(file, project, selectInActivePanel);
          }
          EditorHelper.openFilesInEditor(files.toArray(PsiFile.EMPTY_ARRAY));
        }
      }
      catch (IncorrectOperationException ex) {
        Messages.showMessageDialog(project, ex.getMessage(), RefactoringBundle.message("error.title"), Messages.getErrorIcon());
      }
    };
    CommandProcessor processor = CommandProcessor.getInstance();
    processor.executeCommand(project, command, commandName, null);
  }
private static void copyClassesImpl(final String copyClassName,
                                      final Project project,
                                      final Map<PsiFile, PsiClass[]> classes,
                                      final HashMap<PsiFile, String> map,
                                      final Object targetDirectory,
                                      final PsiDirectory defaultTargetDirectory,
                                      final @NlsContexts.Command String commandName,
                                      final boolean selectInActivePanel,
                                      final boolean openInEditor)