IDEA-256307: reset hovered background only if it was set before
[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 com.intellij.psi.search.GlobalSearchScope;
10 import org.jetbrains.annotations.NotNull;
11 import org.jetbrains.annotations.Nullable;
12
13 import java.util.Collection;
14
15 /**
16  * @author yole
17  */
18 public abstract class FileIndexFacade {
19   protected final Project myProject;
20
21   protected FileIndexFacade(@NotNull Project project) {
22     myProject = project;
23   }
24
25   public static FileIndexFacade getInstance(Project project) {
26     return project.getService(FileIndexFacade.class);
27   }
28
29   public abstract boolean isInContent(@NotNull VirtualFile file);
30   public abstract boolean isInSource(@NotNull VirtualFile file);
31   public abstract boolean isInSourceContent(@NotNull VirtualFile file);
32   public abstract boolean isInLibraryClasses(@NotNull VirtualFile file);
33
34   public abstract boolean isInLibrarySource(@NotNull VirtualFile file);
35   public abstract boolean isExcludedFile(@NotNull VirtualFile file);
36   public abstract boolean isUnderIgnored(@NotNull VirtualFile file);
37
38   public abstract @Nullable Module getModuleForFile(@NotNull VirtualFile file);
39
40   /**
41    * Checks if {@code file} is an ancestor of {@code baseDir} and none of the files
42    * between them are excluded from the project.
43    *
44    * @param baseDir the parent directory to check for ancestry.
45    * @param child the child directory or file to check for ancestry.
46    * @return true if it's a valid ancestor, false otherwise.
47    */
48   public abstract boolean isValidAncestor(@NotNull VirtualFile baseDir, @NotNull VirtualFile child);
49
50   /**
51    * @deprecated always returns true, just remove the calls
52    */
53   @SuppressWarnings("unused")
54   @Deprecated
55   public boolean shouldBeFound(@NotNull GlobalSearchScope scope, @NotNull VirtualFile virtualFile) {
56     return true;
57   }
58
59   public abstract @NotNull ModificationTracker getRootModificationTracker();
60
61   /**
62    * @return descriptions of all modules which are unloaded from the project
63    * @see UnloadedModuleDescription
64    */
65   public abstract @NotNull Collection<UnloadedModuleDescription> getUnloadedModuleDescriptions();
66
67   /**
68    * @return true if the {@code file} is {@link #isInContent} except when it's in {@link #isInLibraryClasses} and not in {@link #isInLibrarySource}
69    */
70   public boolean isInProjectScope(@NotNull VirtualFile file) {
71     if (isInLibraryClasses(file) && !isInSourceContent(file)) return false;
72
73     return isInContent(file);
74   }
75 }