996bed8c10e93cd437b7ec74e6b3662ba122fbe6
[idea/community.git] / platform / projectModel-impl / src / com / intellij / core / CoreModule.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 package com.intellij.core;
3
4 import com.intellij.ide.highlighter.ModuleFileType;
5 import com.intellij.mock.MockComponentManager;
6 import com.intellij.openapi.Disposable;
7 import com.intellij.openapi.components.PathMacroManager;
8 import com.intellij.openapi.components.impl.ModulePathMacroManager;
9 import com.intellij.openapi.extensions.ExtensionPointName;
10 import com.intellij.openapi.module.impl.ModuleEx;
11 import com.intellij.openapi.module.impl.ModuleScopeProvider;
12 import com.intellij.openapi.project.Project;
13 import com.intellij.openapi.roots.ModuleFileIndex;
14 import com.intellij.openapi.roots.ModuleRootManager;
15 import com.intellij.openapi.roots.impl.DirectoryIndex;
16 import com.intellij.openapi.roots.impl.ModuleFileIndexImpl;
17 import com.intellij.openapi.roots.impl.ModuleRootManagerImpl;
18 import com.intellij.openapi.roots.impl.ProjectRootManagerImpl;
19 import com.intellij.openapi.util.Disposer;
20 import com.intellij.openapi.util.text.StringUtil;
21 import com.intellij.openapi.vfs.VirtualFile;
22 import com.intellij.openapi.vfs.pointers.VirtualFilePointerManager;
23 import com.intellij.psi.search.GlobalSearchScope;
24 import com.intellij.util.PathUtil;
25 import org.jetbrains.annotations.NotNull;
26 import org.jetbrains.annotations.Nullable;
27
28 /**
29  * @author yole
30  */
31 public class CoreModule extends MockComponentManager implements ModuleEx {
32   private final String myPath;
33   @NotNull private final Disposable myLifetime;
34   @NotNull private final Project myProject;
35   @NotNull private final ModuleScopeProvider myModuleScopeProvider;
36
37   public CoreModule(@NotNull Disposable parentDisposable, @NotNull Project project, String moduleFilePath) {
38     super(project.getPicoContainer(), parentDisposable);
39     myLifetime = parentDisposable;
40     myProject = project;
41     myPath = moduleFilePath;
42
43     initModuleExtensions();
44
45     final ModuleRootManagerImpl moduleRootManager =
46       new ModuleRootManagerImpl(this,
47                                 ProjectRootManagerImpl.getInstanceImpl(project),
48                                 VirtualFilePointerManager.getInstance()) {
49         @Override
50         public void loadState(@NotNull ModuleRootManagerState object) {
51           loadState(object, false);
52         }
53       };
54     Disposer.register(parentDisposable, moduleRootManager);
55     getPicoContainer().registerComponentInstance(ModuleRootManager.class, moduleRootManager);
56     getPicoContainer().registerComponentInstance(PathMacroManager.class, createModulePathMacroManager(project));
57     getPicoContainer().registerComponentInstance(ModuleFileIndex.class, createModuleFileIndex(project));
58     myModuleScopeProvider = createModuleScopeProvider();
59   }
60
61   protected void initModuleExtensions() {
62   }
63
64   protected <T> void addModuleExtension(@NotNull ExtensionPointName<T> name, @NotNull T extension) {
65     //noinspection TestOnlyProblems
66     name.getPoint(this).registerExtension(extension, myLifetime);
67   }
68
69   protected ModuleScopeProvider createModuleScopeProvider() {
70     return new CoreModuleScopeProvider();
71   }
72
73   // used by Upsource
74   protected PathMacroManager createModulePathMacroManager(@SuppressWarnings("unused") @NotNull Project project) {
75     return new ModulePathMacroManager(this);
76   }
77
78   protected ModuleFileIndex createModuleFileIndex(@NotNull Project project) {
79     return new ModuleFileIndexImpl(this, DirectoryIndex.getInstance(project));
80   }
81
82   @Override
83   public void clearScopesCache() {
84     myModuleScopeProvider.clearCache();
85   }
86
87   @Override
88   public VirtualFile getModuleFile() {
89     throw new UnsupportedOperationException();
90   }
91
92   @NotNull
93   @Override
94   public String getModuleFilePath() {
95     return myPath;
96   }
97
98   @NotNull
99   @Override
100   public Project getProject() {
101     return myProject;
102   }
103
104   @NotNull
105   @Override
106   public String getName() {
107     return StringUtil.trimEnd(PathUtil.getFileName(myPath), ModuleFileType.DOT_DEFAULT_EXTENSION);
108   }
109
110   @Override
111   public boolean isLoaded() {
112     return true;
113   }
114
115   @Override
116   public void setOption(@NotNull String optionName, @Nullable String optionValue) {
117     throw new UnsupportedOperationException();
118   }
119
120   @Override
121   public String getOptionValue(@NotNull String optionName) {
122     throw new UnsupportedOperationException();
123   }
124
125   @NotNull
126   @Override
127   public GlobalSearchScope getModuleScope() {
128     return myModuleScopeProvider.getModuleScope();
129   }
130
131   @NotNull
132   @Override
133   public GlobalSearchScope getModuleScope(boolean includeTests) {
134     return myModuleScopeProvider.getModuleScope(includeTests);
135   }
136
137   @NotNull
138   @Override
139   public GlobalSearchScope getModuleWithLibrariesScope() {
140     return myModuleScopeProvider.getModuleWithLibrariesScope();
141   }
142
143   @NotNull
144   @Override
145   public GlobalSearchScope getModuleWithDependenciesScope() {
146     return myModuleScopeProvider.getModuleWithDependenciesScope();
147   }
148
149   @NotNull
150   @Override
151   public GlobalSearchScope getModuleContentScope() {
152     return myModuleScopeProvider.getModuleContentScope();
153   }
154
155   @NotNull
156   @Override
157   public GlobalSearchScope getModuleContentWithDependenciesScope() {
158     return myModuleScopeProvider.getModuleContentWithDependenciesScope();
159   }
160
161   @NotNull
162   @Override
163   public GlobalSearchScope getModuleWithDependenciesAndLibrariesScope(boolean includeTests) {
164     return myModuleScopeProvider.getModuleWithDependenciesAndLibrariesScope(includeTests);
165   }
166
167   @NotNull
168   @Override
169   public GlobalSearchScope getModuleWithDependentsScope() {
170     return myModuleScopeProvider.getModuleWithDependentsScope();
171   }
172
173   @NotNull
174   @Override
175   public GlobalSearchScope getModuleTestsWithDependentsScope() {
176     return myModuleScopeProvider.getModuleTestsWithDependentsScope();
177   }
178
179   @NotNull
180   @Override
181   public GlobalSearchScope getModuleRuntimeScope(boolean includeTests) {
182     return myModuleScopeProvider.getModuleRuntimeScope(includeTests);
183   }
184 }