fix "IDEA-221944 Deadlock on opening second project" and support preloading for proje...
[idea/community.git] / java / java-indexing-impl / src / com / intellij / psi / impl / file / impl / JavaOutOfSourcesResolveScopeProvider.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.psi.impl.file.impl;
3
4 import com.intellij.lang.java.JavaLanguage;
5 import com.intellij.openapi.fileTypes.FileType;
6 import com.intellij.openapi.fileTypes.LanguageFileType;
7 import com.intellij.openapi.project.Project;
8 import com.intellij.openapi.roots.ProjectFileIndex;
9 import com.intellij.openapi.roots.ProjectRootManager;
10 import com.intellij.openapi.vfs.VirtualFile;
11 import com.intellij.psi.ResolveScopeProvider;
12 import com.intellij.psi.search.GlobalSearchScope;
13 import org.jetbrains.annotations.NotNull;
14 import org.jetbrains.annotations.Nullable;
15
16 /**
17  * Limited resolve scope for all java files in module content, but not under source roots.
18  * For example, java files from test data.
19  * There is still a possibility to modify this scope choice with the ResolveScopeEnlarger.
20  */
21 public final class JavaOutOfSourcesResolveScopeProvider extends ResolveScopeProvider {
22   @Nullable
23   @Override
24   public GlobalSearchScope getResolveScope(@NotNull VirtualFile file, Project project) {
25     // For java only! For other languages resolve may be implemented with different rules, requiring larger scope.
26     final FileType type = file.getFileType();
27     if (type instanceof LanguageFileType && ((LanguageFileType)type).getLanguage() == JavaLanguage.INSTANCE) {
28       ProjectFileIndex index = project.isDefault() ? null : ProjectRootManager.getInstance(project).getFileIndex();
29       if (index == null || (index.isInContent(file) && !index.isInSource(file))) {
30         return GlobalSearchScope.fileScope(project, file);
31       }
32     }
33     return null;
34   }
35 }