981036ded84b9195a1f8f2e90531a967bf0aa17f
[idea/community.git] / java / java-impl / src / com / intellij / psi / NonClasspathResolveScopeEnlarger.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;
3
4 import com.intellij.ide.highlighter.JavaFileType;
5 import com.intellij.openapi.project.Project;
6 import com.intellij.openapi.roots.ProjectFileIndex;
7 import com.intellij.openapi.vfs.VfsUtilCore;
8 import com.intellij.openapi.vfs.VirtualFile;
9 import com.intellij.psi.search.NonClasspathDirectoriesScope;
10 import com.intellij.psi.search.SearchScope;
11 import org.jetbrains.annotations.NotNull;
12
13 import java.util.List;
14
15 /**
16  * @author peter
17  */
18 public class NonClasspathResolveScopeEnlarger extends ResolveScopeEnlarger {
19
20   @Override
21   public SearchScope getAdditionalResolveScope(@NotNull VirtualFile file, Project project) {
22     ProjectFileIndex index = ProjectFileIndex.SERVICE.getInstance(project);
23     if (index.isInLibraryClasses(file) || index.isInContent(file)) {
24       return null;
25     }
26
27     String fileExtension = file.getExtension();
28     if ("class".equals(fileExtension) || JavaFileType.DEFAULT_EXTENSION.equals(fileExtension)) {
29       for (PsiElementFinder finder : PsiElementFinder.EP.getExtensions(project)) {
30         if (finder instanceof NonClasspathClassFinder) {
31           final List<VirtualFile> roots = ((NonClasspathClassFinder)finder).getClassRoots();
32           for (VirtualFile root : roots) {
33             if (VfsUtilCore.isAncestor(root, file, true)) {
34               return NonClasspathDirectoriesScope.compose(roots);
35             }
36           }
37         }
38       }
39     }
40     return null;
41   }
42 }