EA-55604 - assert: CopyFilesOrDirectoriesHandler.doCloneFile

This commit is contained in:
Gregory.Shrago
2014-04-11 19:40:15 +04:00
parent e672f586a1
commit bfac5ceeaf
@@ -21,7 +21,9 @@ import com.intellij.ide.util.EditorHelper;
import com.intellij.ide.util.PlatformPackageUtil;
import com.intellij.openapi.application.ApplicationManager;
import com.intellij.openapi.command.CommandProcessor;
import com.intellij.openapi.diagnostic.Logger;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.roots.ProjectRootManager;
import com.intellij.openapi.ui.Messages;
import com.intellij.openapi.util.ThrowableComputable;
import com.intellij.openapi.vfs.VfsUtil;
@@ -34,6 +36,7 @@ import com.intellij.psi.util.PsiTreeUtil;
import com.intellij.refactoring.RefactoringBundle;
import com.intellij.refactoring.move.moveFilesOrDirectories.MoveFilesOrDirectoriesUtil;
import com.intellij.refactoring.util.CommonRefactoringUtil;
import com.intellij.util.ArrayUtil;
import com.intellij.util.IncorrectOperationException;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
@@ -43,6 +46,9 @@ import java.util.HashSet;
import java.util.Set;
public class CopyFilesOrDirectoriesHandler extends CopyHandlerDelegateBase {
private static Logger LOG = Logger.getInstance("com.intellij.refactoring.copy.CopyFilesOrDirectoriesHandler");
@Override
public boolean canCopy(PsiElement[] elements, boolean fromUpdate) {
Set<String> names = new HashSet<String>();
@@ -73,15 +79,26 @@ public class CopyFilesOrDirectoriesHandler extends CopyHandlerDelegateBase {
if (defaultTargetDirectory == null) return;
}
if (defaultTargetDirectory == null) {
VirtualFile root = project.getBaseDir();
if (root == null) root = VfsUtil.getUserHomeDir();
if (root != null) defaultTargetDirectory = PsiManager.getInstance(project).findDirectory(root);
}
defaultTargetDirectory = tryNotNullizeDirectory(project, defaultTargetDirectory);
copyAsFiles(elements, defaultTargetDirectory, project);
}
@Nullable
private static PsiDirectory tryNotNullizeDirectory(@NotNull Project project, @Nullable PsiDirectory defaultTargetDirectory) {
if (defaultTargetDirectory == null) {
VirtualFile root = ArrayUtil.getFirstElement(ProjectRootManager.getInstance(project).getContentRoots());
if (root == null) root = project.getBaseDir();
if (root == null) root = VfsUtil.getUserHomeDir();
defaultTargetDirectory = root != null ? PsiManager.getInstance(project).findDirectory(root) : null;
if (defaultTargetDirectory == null) {
LOG.warn("No directory found for project: " + project.getName() +", root: " + root);
}
}
return defaultTargetDirectory;
}
public static void copyAsFiles(PsiElement[] elements, @Nullable PsiDirectory defaultTargetDirectory, Project project) {
PsiDirectory targetDirectory = null;
String newName = null;
@@ -131,7 +148,8 @@ public class CopyFilesOrDirectoriesHandler extends CopyHandlerDelegateBase {
else {
targetDirectory = PlatformPackageUtil.getDirectory(element);
}
assert targetDirectory != null : element;
targetDirectory = tryNotNullizeDirectory(element.getProject(), targetDirectory);
if (targetDirectory == null) return;
PsiElement[] elements = {element};
CopyFilesOrDirectoriesDialog dialog = new CopyFilesOrDirectoriesDialog(elements, null, element.getProject(), true);