From c2cd81a9167963a65591987bca2b7f0f9be07528 Mon Sep 17 00:00:00 2001 From: anna Date: Wed, 21 Mar 2012 17:59:24 +0100 Subject: [PATCH] IDEA-83191 Refactor > Copy does not copy directory structure when performed over hierarchy under source root (cherry picked from commit c88ab2e711b18fed65368feeeba55b13f907ef0f) --- .../intellij/refactoring/copy/CopyClassesHandler.java | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/java/java-impl/src/com/intellij/refactoring/copy/CopyClassesHandler.java b/java/java-impl/src/com/intellij/refactoring/copy/CopyClassesHandler.java index cb8bea661d2e..7f2f57965d61 100644 --- a/java/java-impl/src/com/intellij/refactoring/copy/CopyClassesHandler.java +++ b/java/java-impl/src/com/intellij/refactoring/copy/CopyClassesHandler.java @@ -298,7 +298,7 @@ public class CopyClassesHandler extends CopyHandlerDelegateBase { @Nullable public static PsiElement doCopyClasses(final Map fileToClasses, - HashMap map, final String copyClassName, + @Nullable HashMap map, final String copyClassName, final PsiDirectory targetDirectory, final Project project) throws IncorrectOperationException { PsiElement newElement = null; @@ -345,8 +345,12 @@ public class CopyClassesHandler extends CopyHandlerDelegateBase { for (PsiFile file : files) { try { - final PsiFile fileCopy = - CopyFilesOrDirectoriesHandler.copyToDirectory(file, getNewFileName(file, copyClassName), targetDirectory, choice); + PsiDirectory finalTarget = targetDirectory; + final String relativePath = map != null ? map.get(file) : null; + if (relativePath != null && !relativePath.isEmpty()) { + finalTarget = buildRelativeDir(targetDirectory, relativePath).findOrCreateTargetDirectory(); + } + final PsiFile fileCopy = CopyFilesOrDirectoriesHandler.copyToDirectory(file, getNewFileName(file, copyClassName), finalTarget, choice); if (fileCopy != null) { createdFiles.add(fileCopy); }