From 102374b1d39e41f6bf303b06477e94e738f8e0d2 Mon Sep 17 00:00:00 2001 From: peter Date: Fri, 4 Mar 2016 14:55:02 +0100 Subject: [PATCH] (by patch from IDEA-151808) Walk up to the root to determine if file is in content roots --- .../src/com/package1/Test.java | 0 .../src/com/package1/p2/p3/Test1.java | 0 .../projectView/ProjectTreeStructureTest.java | 33 +++++++++++++++++++ .../nodes/ProjectViewDirectoryHelper.java | 12 ++++++- .../projectView/TestProjectTreeStructure.java | 7 +++- 5 files changed, 50 insertions(+), 2 deletions(-) create mode 100644 java/java-tests/testData/projectView/noDuplicateModules/src/com/package1/Test.java create mode 100644 java/java-tests/testData/projectView/noDuplicateModules/src/com/package1/p2/p3/Test1.java diff --git a/java/java-tests/testData/projectView/noDuplicateModules/src/com/package1/Test.java b/java/java-tests/testData/projectView/noDuplicateModules/src/com/package1/Test.java new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/java/java-tests/testData/projectView/noDuplicateModules/src/com/package1/p2/p3/Test1.java b/java/java-tests/testData/projectView/noDuplicateModules/src/com/package1/p2/p3/Test1.java new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/java/java-tests/testSrc/com/intellij/projectView/ProjectTreeStructureTest.java b/java/java-tests/testSrc/com/intellij/projectView/ProjectTreeStructureTest.java index 71817ea528c8..017f1d310ba1 100644 --- a/java/java-tests/testSrc/com/intellij/projectView/ProjectTreeStructureTest.java +++ b/java/java-tests/testSrc/com/intellij/projectView/ProjectTreeStructureTest.java @@ -1,6 +1,13 @@ package com.intellij.projectView; +import com.intellij.openapi.module.Module; +import com.intellij.openapi.module.impl.ModuleManagerImpl; +import com.intellij.openapi.roots.ModuleRootManager; import com.intellij.openapi.ui.Queryable; +import com.intellij.openapi.vfs.VirtualFile; +import com.intellij.testFramework.PlatformTestUtil; +import com.intellij.testFramework.PsiTestUtil; +import org.junit.Assert; public class ProjectTreeStructureTest extends BaseProjectViewTestCase { @@ -110,4 +117,30 @@ public class ProjectTreeStructureTest extends BaseProjectViewTestCase { checkContainsMethod(myStructure.getRootElement(), myStructure); } + + public void testNoDuplicateModules() { + VirtualFile mainModuleRoot = ModuleRootManager.getInstance(myModule).getContentRoots()[0]; + + PsiTestUtil.addExcludedRoot(myModule, mainModuleRoot.findFileByRelativePath("src/com/package1/p2")); + + Module module = createModule("nested_module"); + ModuleManagerImpl.getInstanceImpl(myProject).setModuleGroupPath(module, new String[]{"modules"}); + PsiTestUtil.addContentRoot(module, mainModuleRoot.findFileByRelativePath("src/com/package1/p2/p3")); + + TestProjectTreeStructure structure = new TestProjectTreeStructure(myProject, myTestRootDisposable); + structure.setShowLibraryContents(false); + + String structureContent = PlatformTestUtil.print(structure, structure.getRootElement(), 0, null, 10, ' ', myPrintInfo).toString(); + + Assert.assertFalse(structureContent.contains("modules")); + assertEquals("Project\n" + + " noDuplicateModules\n" + + " src\n" + + " com\n" + + " package1\n" + + " Test.java\n" + + " nested_module.iml\n" + + " testNoDuplicateModules.iml\n", + structureContent); + } } diff --git a/platform/lang-impl/src/com/intellij/ide/projectView/impl/nodes/ProjectViewDirectoryHelper.java b/platform/lang-impl/src/com/intellij/ide/projectView/impl/nodes/ProjectViewDirectoryHelper.java index 40c4bd236320..41edd8d6787f 100644 --- a/platform/lang-impl/src/com/intellij/ide/projectView/impl/nodes/ProjectViewDirectoryHelper.java +++ b/platform/lang-impl/src/com/intellij/ide/projectView/impl/nodes/ProjectViewDirectoryHelper.java @@ -190,13 +190,23 @@ public class ProjectViewDirectoryHelper { for (VirtualFile root : prm.getContentRoots()) { VirtualFile parent = root.getParent(); - if (parent == null || !index.isInContent(parent)) { + if (!isFileInContent(index, parent)) { topLevelContentRoots.add(root); } } return topLevelContentRoots; } + private static boolean isFileInContent(ProjectFileIndex index, VirtualFile file) { + while (file != null) { + if (index.isInContent(file)) { + return true; + } + file = file.getParent(); + } + return false; + } + private PsiElement[] directoryChildrenInProject(PsiDirectory psiDirectory, final ViewSettings settings) { final VirtualFile dir = psiDirectory.getVirtualFile(); if (shouldBeShown(dir, settings)) { diff --git a/platform/testFramework/src/com/intellij/projectView/TestProjectTreeStructure.java b/platform/testFramework/src/com/intellij/projectView/TestProjectTreeStructure.java index 39fadaa2a1b1..a1bd02b83d5c 100644 --- a/platform/testFramework/src/com/intellij/projectView/TestProjectTreeStructure.java +++ b/platform/testFramework/src/com/intellij/projectView/TestProjectTreeStructure.java @@ -29,6 +29,7 @@ public class TestProjectTreeStructure extends AbstractProjectTreeStructure imple protected boolean myShowMembers = false; protected boolean myHideEmptyMiddlePackages; protected boolean myFlattenPackages; + protected boolean myShowLibraryContents = true; public TestProjectTreeStructure(Project project, Disposable parentDisposable) { super(project); @@ -70,7 +71,7 @@ public class TestProjectTreeStructure extends AbstractProjectTreeStructure imple @Override public boolean isShowLibraryContents() { - return true; + return myShowLibraryContents; } @Override @@ -90,6 +91,10 @@ public class TestProjectTreeStructure extends AbstractProjectTreeStructure imple myFlattenPackages = flattenPackages; } + public void setShowLibraryContents(boolean showLibraryContents) { + myShowLibraryContents = showLibraryContents; + } + @Override public void dispose() { }