diff --git a/platform/lang-impl/src/com/intellij/ide/scratch/ScratchProjectViewPane.java b/platform/lang-impl/src/com/intellij/ide/scratch/ScratchProjectViewPane.java index 730e4e60710c..5f116033ae26 100644 --- a/platform/lang-impl/src/com/intellij/ide/scratch/ScratchProjectViewPane.java +++ b/platform/lang-impl/src/com/intellij/ide/scratch/ScratchProjectViewPane.java @@ -14,6 +14,7 @@ import com.intellij.ide.util.treeView.AbstractTreeNode; import com.intellij.ide.util.treeView.AbstractTreeUi; import com.intellij.lang.Language; import com.intellij.openapi.Disposable; +import com.intellij.openapi.actionSystem.LangDataKeys; import com.intellij.openapi.application.ApplicationManager; import com.intellij.openapi.application.PathManager; import com.intellij.openapi.fileTypes.LanguageFileType; @@ -191,6 +192,14 @@ public class ScratchProjectViewPane extends ProjectViewPane { @Nullable @Override public Object getData(@NotNull Collection selected, String dataName) { + if (LangDataKeys.PASTE_TARGET_PSI_ELEMENT.is(dataName)) { + AbstractTreeNode single = JBIterable.from(selected).single(); + if (single instanceof MyRootNode) { + VirtualFile file = ((MyRootNode)single).getVirtualFile(); + Project project = single.getProject(); + return file == null || project == null ? null : PsiManager.getInstance(project).findDirectory(file); + } + } return null; } } diff --git a/platform/lang-impl/src/com/intellij/refactoring/copy/CopyFilesOrDirectoriesHandler.java b/platform/lang-impl/src/com/intellij/refactoring/copy/CopyFilesOrDirectoriesHandler.java index 44e68dca9c3a..932d8f41b7e2 100644 --- a/platform/lang-impl/src/com/intellij/refactoring/copy/CopyFilesOrDirectoriesHandler.java +++ b/platform/lang-impl/src/com/intellij/refactoring/copy/CopyFilesOrDirectoriesHandler.java @@ -7,7 +7,6 @@ import com.intellij.ide.scratch.ScratchFileService; import com.intellij.ide.util.EditorHelper; import com.intellij.ide.util.PlatformPackageUtil; import com.intellij.openapi.application.ApplicationManager; -import com.intellij.openapi.application.Result; import com.intellij.openapi.command.CommandProcessor; import com.intellij.openapi.command.WriteCommandAction; import com.intellij.openapi.diagnostic.Logger; @@ -61,7 +60,10 @@ public class CopyFilesOrDirectoriesHandler extends CopyHandlerDelegateBase { @Override public void doCopy(final PsiElement[] elements, PsiDirectory defaultTargetDirectory) { if (defaultTargetDirectory == null) { - defaultTargetDirectory = getCommonParentDirectory(elements); + PsiDirectory commonParent = getCommonParentDirectory(elements); + if (commonParent != null && !ScratchFileService.isInScratchRoot(commonParent.getVirtualFile())) { + defaultTargetDirectory = commonParent; + } } Project project = defaultTargetDirectory != null ? defaultTargetDirectory.getProject() : elements [0].getProject(); if (defaultTargetDirectory != null) { @@ -76,7 +78,7 @@ public class CopyFilesOrDirectoriesHandler extends CopyHandlerDelegateBase { @Nullable private static PsiDirectory tryNotNullizeDirectory(@NotNull Project project, @Nullable PsiDirectory defaultTargetDirectory) { - if (defaultTargetDirectory == null || ScratchFileService.isInScratchRoot(defaultTargetDirectory.getVirtualFile())) { + if (defaultTargetDirectory == null) { VirtualFile root = ArrayUtil.getFirstElement(ProjectRootManager.getInstance(project).getContentRoots()); if (root == null) root = project.getBaseDir(); if (root == null) root = VfsUtil.getUserHomeDir();