fix "IDEA-221944 Deadlock on opening second project" and support preloading for proje...
[idea/community.git] / platform / projectModel-impl / src / com / intellij / openapi / roots / impl / DirectoryIndex.java
1 // Copyright 2000-2019 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
3 package com.intellij.openapi.roots.impl;
4
5 import com.intellij.openapi.module.Module;
6 import com.intellij.openapi.project.Project;
7 import com.intellij.openapi.roots.OrderEntry;
8 import com.intellij.openapi.roots.SourceFolder;
9 import com.intellij.openapi.vfs.VirtualFile;
10 import com.intellij.util.Query;
11 import org.jetbrains.annotations.ApiStatus;
12 import org.jetbrains.annotations.NotNull;
13 import org.jetbrains.annotations.Nullable;
14 import org.jetbrains.jps.model.module.JpsModuleSourceRootType;
15
16 import java.util.List;
17 import java.util.Set;
18
19 /**
20  * This class is internal low-level API. Consider using {@link com.intellij.openapi.roots.ProjectFileIndex} instead of using this class directly.
21  */
22 @ApiStatus.Internal
23 public abstract class DirectoryIndex {
24   public static DirectoryIndex getInstance(Project project) {
25     // todo enable later when all usages will be fixed
26     //assert !project.isDefault() : "Must not call DirectoryIndex for default project";
27     return project.getService(DirectoryIndex.class);
28   }
29
30   @NotNull
31   public abstract DirectoryInfo getInfoForFile(@NotNull VirtualFile file);
32
33   @Nullable
34   public abstract SourceFolder getSourceRootFolder(@NotNull DirectoryInfo info);
35
36   @Nullable
37   public abstract JpsModuleSourceRootType<?> getSourceRootType(@NotNull DirectoryInfo info);
38
39   @NotNull
40   public abstract
41   Query<VirtualFile> getDirectoriesByPackageName(@NotNull String packageName, boolean includeLibrarySources);
42
43   @Nullable
44   public abstract String getPackageName(@NotNull VirtualFile dir);
45
46   @NotNull
47   public abstract List<OrderEntry> getOrderEntries(@NotNull DirectoryInfo info);
48
49   /**
50    * @return names of unloaded modules which directly or transitively via exported dependencies depend on the specified module
51    */
52   @NotNull
53   public abstract Set<String> getDependentUnloadedModules(@NotNull Module module);
54 }