/* * Copyright 2000-2011 JetBrains s.r.o. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.intellij.ide.projectView.impl; import com.intellij.openapi.module.Module; import com.intellij.openapi.project.Project; import com.intellij.openapi.roots.*; import com.intellij.openapi.util.Comparing; import com.intellij.openapi.vfs.VirtualFile; import com.intellij.psi.PsiCodeFragment; import com.intellij.psi.PsiDirectory; import com.intellij.psi.PsiFile; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import consulo.roots.ContentFolderScopes; /** * @author anna * Date: 17-Jan-2008 */ public class ProjectRootsUtil { public static boolean isSourceRoot(final PsiDirectory psiDirectory) { return isSourceRoot(psiDirectory.getVirtualFile(), psiDirectory.getProject()); } public static boolean isSourceRoot(final VirtualFile directoryFile, final Project project) { final ProjectFileIndex fileIndex = ProjectRootManager.getInstance(project).getFileIndex(); return directoryFile.equals(fileIndex.getSourceRootForFile(directoryFile)); } public static boolean isInSource(final PsiDirectory directory) { return isInSource(directory.getVirtualFile(), directory.getProject()); } public static boolean isInSource(final VirtualFile directoryFile, final Project project) { final ProjectFileIndex projectFileIndex = ProjectRootManager.getInstance(project).getFileIndex(); return projectFileIndex.isInSourceContent(directoryFile); } public static boolean isInTestSource(final PsiDirectory psiDirectory) { return isInTestSource(psiDirectory.getVirtualFile(), psiDirectory.getProject()); } public static boolean isInTestSource(final VirtualFile directoryFile, final Project project) { final ProjectFileIndex projectFileIndex = ProjectRootManager.getInstance(project).getFileIndex(); return projectFileIndex.isInTestSourceContent(directoryFile); } public static boolean isInTestResource(final PsiDirectory psiDirectory) { return isInTestResource(psiDirectory.getVirtualFile(), psiDirectory.getProject()); } public static boolean isInTestResource(final VirtualFile directoryFile, final Project project) { final ProjectFileIndex projectFileIndex = ProjectRootManager.getInstance(project).getFileIndex(); return projectFileIndex.isInTestResource(directoryFile); } public static boolean isSourceOrTestRoot(@NotNull VirtualFile virtualFile, final Project project) { final ProjectFileIndex projectFileIndex = ProjectRootManager.getInstance(project).getFileIndex(); return projectFileIndex.isInSource(virtualFile); } @Nullable public static ContentFolder getContentFolderIfIs(@NotNull VirtualFile virtualFile, final Project project) { final ProjectFileIndex projectFileIndex = ProjectRootManager.getInstance(project).getFileIndex(); final Module module = projectFileIndex.getModuleForFile(virtualFile); if (module == null) { return null; } final ContentEntry[] contentEntries = ModuleRootManager.getInstance(module).getContentEntries(); for (ContentEntry contentEntry : contentEntries) { for (ContentFolder sourceFolder : contentEntry.getFolders(ContentFolderScopes.all())) { if (Comparing.equal(virtualFile, sourceFolder.getFile())) { return sourceFolder; } } } return null; } public static boolean isLibraryRoot(final VirtualFile directoryFile, final Project project) { final ProjectFileIndex projectFileIndex = ProjectRootManager.getInstance(project).getFileIndex(); if (projectFileIndex.isInLibraryClasses(directoryFile)) { final VirtualFile parent = directoryFile.getParent(); return parent == null || !projectFileIndex.isInLibraryClasses(parent); } return false; } public static boolean isModuleContentRoot(final PsiDirectory directory) { return isModuleContentRoot(directory.getVirtualFile(), directory.getProject()); } public static boolean isModuleContentRoot(@NotNull final VirtualFile directoryFile, final Project project) { final ProjectFileIndex projectFileIndex = ProjectRootManager.getInstance(project).getFileIndex(); final VirtualFile contentRootForFile = projectFileIndex.getContentRootForFile(directoryFile); return directoryFile.equals(contentRootForFile); } public static boolean isProjectHome(final PsiDirectory psiDirectory) { return psiDirectory.getVirtualFile().equals(psiDirectory.getProject().getBaseDir()); } public static boolean isOutsideSourceRoot(@Nullable PsiFile psiFile) { if (psiFile == null) return false; if (psiFile instanceof PsiCodeFragment) return false; final VirtualFile file = psiFile.getVirtualFile(); if (file == null) return false; final ProjectFileIndex projectFileIndex = ProjectRootManager.getInstance(psiFile.getProject()).getFileIndex(); return !projectFileIndex.isInSource(file) && !projectFileIndex.isInLibraryClasses(file); } }