IDEA-214538: remove auto-disabling of input methods, remake via notification
[idea/community.git] / platform / core-api / src / com / intellij / openapi / roots / FileIndexFacade.java
1 // Copyright 2000-2020 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file.
2 package com.intellij.openapi.roots;
3
4 import com.intellij.openapi.module.Module;
5 import com.intellij.openapi.module.UnloadedModuleDescription;
6 import com.intellij.openapi.project.Project;
7 import com.intellij.openapi.util.ModificationTracker;
8 import com.intellij.openapi.vfs.VirtualFile;
9 import org.jetbrains.annotations.NotNull;
10 import org.jetbrains.annotations.Nullable;
11
12 import java.util.Collection;
13
14 /**
15  * @author yole
16  */
17 public abstract class FileIndexFacade {
18   protected final Project myProject;
19
20   protected FileIndexFacade(@NotNull Project project) {
21     myProject = project;
22   }
23
24   public static FileIndexFacade getInstance(Project project) {
25     return project.getService(FileIndexFacade.class);
26   }
27
28   public abstract boolean isInContent(@NotNull VirtualFile file);
29   public abstract boolean isInSource(@NotNull VirtualFile file);
30   public abstract boolean isInSourceContent(@NotNull VirtualFile file);
31   public abstract boolean isInLibraryClasses(@NotNull VirtualFile file);
32
33   public abstract boolean isInLibrarySource(@NotNull VirtualFile file);
34   public abstract boolean isExcludedFile(@NotNull VirtualFile file);
35   public abstract boolean isUnderIgnored(@NotNull VirtualFile file);
36
37   public abstract @Nullable Module getModuleForFile(@NotNull VirtualFile file);
38
39   /**
40    * Checks if {@code file} is an ancestor of {@code baseDir} and none of the files
41    * between them are excluded from the project.
42    *
43    * @param baseDir the parent directory to check for ancestry.
44    * @param child the child directory or file to check for ancestry.
45    * @return true if it's a valid ancestor, false otherwise.
46    */
47   public abstract boolean isValidAncestor(@NotNull VirtualFile baseDir, @NotNull VirtualFile child);
48
49   public abstract @NotNull ModificationTracker getRootModificationTracker();
50
51   /**
52    * @return descriptions of all modules which are unloaded from the project
53    * @see UnloadedModuleDescription
54    */
55   public abstract @NotNull Collection<UnloadedModuleDescription> getUnloadedModuleDescriptions();
56
57   /**
58    * @return true if the {@code file} is {@link #isInContent} except when it's in {@link #isInLibraryClasses} and not in {@link #isInLibrarySource}
59    */
60   public boolean isInProjectScope(@NotNull VirtualFile file) {
61     if (isInLibraryClasses(file) && !isInSourceContent(file)) return false;
62
63     return isInContent(file);
64   }
65 }