/platform/lang-impl/src/com/intellij/ide/projectView/impl/ProjectRootsUtil.java

https://bitbucket.org/nbargnesi/idea · Java · 95 lines · 63 code · 13 blank · 19 comment · 8 complexity · 418b1dea6ce20055303572fcf698180d MD5 · raw file

  1. /*
  2. * Copyright 2000-2011 JetBrains s.r.o.
  3. *
  4. * Licensed under the Apache License, Version 2.0 (the "License");
  5. * you may not use this file except in compliance with the License.
  6. * You may obtain a copy of the License at
  7. *
  8. * http://www.apache.org/licenses/LICENSE-2.0
  9. *
  10. * Unless required by applicable law or agreed to in writing, software
  11. * distributed under the License is distributed on an "AS IS" BASIS,
  12. * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  13. * See the License for the specific language governing permissions and
  14. * limitations under the License.
  15. */
  16. package com.intellij.ide.projectView.impl;
  17. import com.intellij.openapi.module.Module;
  18. import com.intellij.openapi.project.Project;
  19. import com.intellij.openapi.roots.*;
  20. import com.intellij.openapi.util.Comparing;
  21. import com.intellij.openapi.vfs.VirtualFile;
  22. import com.intellij.psi.PsiDirectory;
  23. /**
  24. * @author anna
  25. * Date: 17-Jan-2008
  26. */
  27. public class ProjectRootsUtil {
  28. private ProjectRootsUtil() { }
  29. public static boolean isSourceRoot(final PsiDirectory psiDirectory) {
  30. return isSourceRoot(psiDirectory.getVirtualFile(), psiDirectory.getProject());
  31. }
  32. public static boolean isSourceRoot(final VirtualFile directoryFile, final Project project) {
  33. final ProjectFileIndex fileIndex = ProjectRootManager.getInstance(project).getFileIndex();
  34. return directoryFile.equals(fileIndex.getSourceRootForFile(directoryFile));
  35. }
  36. public static boolean isInSource(final PsiDirectory directory) {
  37. return isInSource(directory.getVirtualFile(), directory.getProject());
  38. }
  39. public static boolean isInSource(final VirtualFile directoryFile, final Project project) {
  40. final ProjectFileIndex projectFileIndex = ProjectRootManager.getInstance(project).getFileIndex();
  41. return projectFileIndex.isInSourceContent(directoryFile);
  42. }
  43. public static boolean isInTestSource(final PsiDirectory psiDirectory) {
  44. return isInTestSource(psiDirectory.getVirtualFile(), psiDirectory.getProject());
  45. }
  46. public static boolean isInTestSource(final VirtualFile directoryFile, final Project project) {
  47. final ProjectFileIndex projectFileIndex = ProjectRootManager.getInstance(project).getFileIndex();
  48. return projectFileIndex.isInTestSourceContent(directoryFile);
  49. }
  50. public static boolean isSourceOrTestRoot(final VirtualFile virtualFile, final Project project) {
  51. final ProjectFileIndex projectFileIndex = ProjectRootManager.getInstance(project).getFileIndex();
  52. final Module module = projectFileIndex.getModuleForFile(virtualFile);
  53. if (module == null) return false;
  54. final ContentEntry[] contentEntries = ModuleRootManager.getInstance(module).getContentEntries();
  55. for (ContentEntry contentEntry : contentEntries) {
  56. final SourceFolder[] sourceFolders = contentEntry.getSourceFolders();
  57. for (SourceFolder sourceFolder : sourceFolders) {
  58. if (Comparing.equal(virtualFile, sourceFolder.getFile())) return true;
  59. }
  60. }
  61. return false;
  62. }
  63. public static boolean isLibraryRoot(final VirtualFile directoryFile, final Project project) {
  64. final ProjectFileIndex projectFileIndex = ProjectRootManager.getInstance(project).getFileIndex();
  65. if (projectFileIndex.isInLibraryClasses(directoryFile)) {
  66. final VirtualFile parent = directoryFile.getParent();
  67. return parent == null || !projectFileIndex.isInLibraryClasses(parent);
  68. }
  69. return false;
  70. }
  71. public static boolean isModuleContentRoot(final PsiDirectory directory) {
  72. return isModuleContentRoot(directory.getVirtualFile(), directory.getProject());
  73. }
  74. public static boolean isModuleContentRoot(final VirtualFile directoryFile, final Project project) {
  75. final ProjectFileIndex projectFileIndex = ProjectRootManager.getInstance(project).getFileIndex();
  76. final VirtualFile contentRootForFile = projectFileIndex.getContentRootForFile(directoryFile);
  77. return directoryFile.equals(contentRootForFile);
  78. }
  79. public static boolean isProjectHome(final PsiDirectory psiDirectory) {
  80. return psiDirectory.getVirtualFile().equals(psiDirectory.getProject().getBaseDir());
  81. }
  82. }