mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
EA-55604 - assert: CopyFilesOrDirectoriesHandler.doCloneFile
This commit is contained in:
+24
-6
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user