diff --git a/java/java-tests/testSrc/com/intellij/codeInsight/CopyReferenceActionFilesTest.groovy b/java/java-tests/testSrc/com/intellij/codeInsight/CopyReferenceActionFilesTest.groovy index ee2d8b299986..2820da2fd78d 100644 --- a/java/java-tests/testSrc/com/intellij/codeInsight/CopyReferenceActionFilesTest.groovy +++ b/java/java-tests/testSrc/com/intellij/codeInsight/CopyReferenceActionFilesTest.groovy @@ -124,4 +124,28 @@ public class CopyReferenceActionFilesTest extends CodeInsightTestCase { assertEquals("dir_dir", CopyReferenceAction.elementToFqn(PsiManager.getInstance(project).findDirectory(dir_dir))); assertEquals("dir_dir/file.txt", CopyReferenceAction.elementToFqn(PsiManager.getInstance(project).findFile(dir_dir_file))); } + + public void testCopyFile_UnderExcludeRoot_ShouldContainPathFromTheCorrespondingContentRoot() throws Exception { + // IDEA-144316 Copy Reference should work for excluded subfolders same way as it works for regular project subdirs + + VirtualFile dir + VirtualFile dir_dir + VirtualFile dir_dir_file + + ApplicationManager.application.runWriteAction(new Runnable() { + @Override + void run() { + dir = additionalRoot.createChildDirectory(this, "dir"); + dir_dir = dir.createChildDirectory(this, "dir_dir"); + dir_dir_file = dir_dir.createChildData(this, "file.txt"); + + PsiTestUtil.addContentRoot(getModule(), dir); + PsiTestUtil.addExcludedRoot(getModule(), dir_dir); + } + }) + + assertEquals(dir.getPath(), CopyReferenceAction.elementToFqn(PsiManager.getInstance(project).findDirectory(dir))); + assertEquals("dir_dir", CopyReferenceAction.elementToFqn(PsiManager.getInstance(project).findDirectory(dir_dir))); + assertEquals("dir_dir/file.txt", CopyReferenceAction.elementToFqn(PsiManager.getInstance(project).findFile(dir_dir_file))); + } } diff --git a/platform/lang-impl/src/com/intellij/ide/actions/CopyReferenceAction.java b/platform/lang-impl/src/com/intellij/ide/actions/CopyReferenceAction.java index b3fb0e52f2df..bf2ade88ec78 100644 --- a/platform/lang-impl/src/com/intellij/ide/actions/CopyReferenceAction.java +++ b/platform/lang-impl/src/com/intellij/ide/actions/CopyReferenceAction.java @@ -291,7 +291,7 @@ public class CopyReferenceAction extends DumbAwareAction { VirtualFile outerMostRoot = null; VirtualFile each = virtualFile; ProjectFileIndex index = ProjectRootManager.getInstance(project).getFileIndex(); - while (each != null && (each = index.getContentRootForFile(each)) != null) { + while (each != null && (each = index.getContentRootForFile(each, false)) != null) { outerMostRoot = each; each = each.getParent(); }