c1b895c0b5e49e4a64c5fe8d6bbfd4e2da9e4cea
[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.components.ServiceManager;
6 import com.intellij.openapi.module.Module;
7 import com.intellij.openapi.project.Project;
8 import com.intellij.openapi.roots.OrderEntry;
9 import com.intellij.openapi.roots.SourceFolder;
10 import com.intellij.openapi.vfs.VirtualFile;
11 import com.intellij.util.Query;
12 import org.jetbrains.annotations.ApiStatus;
13 import org.jetbrains.annotations.NotNull;
14 import org.jetbrains.annotations.Nullable;
15 import org.jetbrains.jps.model.module.JpsModuleSourceRootType;
16
17 import java.util.List;
18 import java.util.Set;
19
20 /**
21  * This class is internal low-level API. Consider using {@link com.intellij.openapi.roots.ProjectFileIndex} instead of using this class directly.
22  */
23 @ApiStatus.Internal
24 public abstract class DirectoryIndex {
25   public static DirectoryIndex getInstance(Project project) {
26     assert !project.isDefault() : "Must not call DirectoryIndex for default project";
27     return ServiceManager.getService(project, 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 }