Search in sources :

Example 91 with ProjectFileIndex

use of com.intellij.openapi.roots.ProjectFileIndex in project intellij-plugins by JetBrains.

the class PubspecYamlUtil method findPubspecYamlFile.

@Nullable
public static VirtualFile findPubspecYamlFile(@NotNull final Project project, @NotNull final VirtualFile contextFile) {
    final ProjectFileIndex fileIndex = ProjectRootManager.getInstance(project).getFileIndex();
    VirtualFile current = contextFile;
    VirtualFile parent = contextFile.isDirectory() ? contextFile : contextFile.getParent();
    while (parent != null && (LIB_DIR_NAME.equals(current.getName()) || fileIndex.isInContent(parent))) {
        current = parent;
        final VirtualFile file = parent.findChild(PUBSPEC_YAML);
        if (file != null && !file.isDirectory()) {
            return file;
        }
        parent = current.getParent();
    }
    return null;
}
Also used : VirtualFile(com.intellij.openapi.vfs.VirtualFile) ProjectFileIndex(com.intellij.openapi.roots.ProjectFileIndex) Nullable(org.jetbrains.annotations.Nullable)

Example 92 with ProjectFileIndex

use of com.intellij.openapi.roots.ProjectFileIndex in project intellij-plugins by JetBrains.

the class DartAnalysisServerService method doConfigureImportedLibraries.

private static void doConfigureImportedLibraries(@NotNull final Project project, @NotNull final Collection<String> filePaths) {
    final DartSdk sdk = DartSdk.getDartSdk(project);
    if (sdk == null)
        return;
    final ProjectFileIndex fileIndex = ProjectRootManager.getInstance(project).getFileIndex();
    final SortedSet<String> folderPaths = new TreeSet<>();
    final Collection<String> rootsToAddToLib = new THashSet<>();
    for (final String path : filePaths) {
        if (path != null) {
            folderPaths.add(PathUtil.getParentPath(FileUtil.toSystemIndependentName(path)));
        }
    }
    outer: for (final String path : folderPaths) {
        final VirtualFile vFile = LocalFileSystem.getInstance().findFileByPath(path);
        if (!path.startsWith(sdk.getHomePath() + "/") && (vFile == null || !fileIndex.isInContent(vFile))) {
            for (String configuredPath : rootsToAddToLib) {
                if (path.startsWith(configuredPath + "/")) {
                    // folderPaths is sorted so subfolders go after parent folder
                    continue outer;
                }
            }
            rootsToAddToLib.add(path);
        }
    }
    final Processor<? super PsiFileSystemItem> falseProcessor = (Processor<PsiFileSystemItem>) item -> false;
    final Condition<Module> moduleFilter = module -> DartSdkLibUtil.isDartSdkEnabled(module) && !FilenameIndex.processFilesByName(PubspecYamlUtil.PUBSPEC_YAML, false, falseProcessor, module.getModuleContentScope(), project, null);
    final DartFileListener.DartLibInfo libInfo = new DartFileListener.DartLibInfo(true);
    libInfo.addRoots(rootsToAddToLib);
    final Library library = DartFileListener.updatePackagesLibraryRoots(project, libInfo);
    DartFileListener.updateDependenciesOnDartPackagesLibrary(project, moduleFilter, library);
}
Also used : VirtualFile(com.intellij.openapi.vfs.VirtualFile) DartFileType(com.jetbrains.lang.dart.DartFileType) UIUtil(com.intellij.util.ui.UIUtil) HtmlUtil(com.intellij.xml.util.HtmlUtil) DartSdk(com.jetbrains.lang.dart.sdk.DartSdk) Logging(com.google.dart.server.utilities.logging.Logging) VirtualFile(com.intellij.openapi.vfs.VirtualFile) ModalityState(com.intellij.openapi.application.ModalityState) Document(com.intellij.openapi.editor.Document) THashSet(gnu.trove.THashSet) DocumentEvent(com.intellij.openapi.editor.event.DocumentEvent) THashMap(gnu.trove.THashMap) FileEditorManagerEvent(com.intellij.openapi.fileEditor.FileEditorManagerEvent) Library(com.intellij.openapi.roots.libraries.Library) Task(com.intellij.openapi.progress.Task) DartProblemsView(com.jetbrains.lang.dart.ide.errorTreeView.DartProblemsView) ApplicationInfo(com.intellij.openapi.application.ApplicationInfo) ApplicationNamesInfo(com.intellij.openapi.application.ApplicationNamesInfo) FileUtil(com.intellij.openapi.util.io.FileUtil) Logger(com.intellij.openapi.diagnostic.Logger) Module(com.intellij.openapi.module.Module) ProjectRootManager(com.intellij.openapi.roots.ProjectRootManager) org.dartlang.analysis.server.protocol(org.dartlang.analysis.server.protocol) DebugPrintStream(com.google.dart.server.internal.remote.DebugPrintStream) DartSdkUpdateChecker(com.jetbrains.lang.dart.sdk.DartSdkUpdateChecker) RemoteAnalysisServerImpl(com.google.dart.server.internal.remote.RemoteAnalysisServerImpl) ProgressManager(com.intellij.openapi.progress.ProgressManager) DumbService(com.intellij.openapi.project.DumbService) QueueProcessor(com.intellij.util.concurrency.QueueProcessor) DartYamlFileTypeFactory(com.jetbrains.lang.dart.DartYamlFileTypeFactory) AnalysisServer(com.google.dart.server.generated.AnalysisServer) DartSdkUtil(com.jetbrains.lang.dart.sdk.DartSdkUtil) LocalFileSystem(com.intellij.openapi.vfs.LocalFileSystem) DartBundle(com.jetbrains.lang.dart.DartBundle) Nullable(org.jetbrains.annotations.Nullable) CountDownLatch(java.util.concurrent.CountDownLatch) ProgressIndicator(com.intellij.openapi.progress.ProgressIndicator) Contract(org.jetbrains.annotations.Contract) ServiceManager(com.intellij.openapi.components.ServiceManager) DartPubActionBase(com.jetbrains.lang.dart.ide.actions.DartPubActionBase) EditorFactory(com.intellij.openapi.editor.EditorFactory) ApplicationManager(com.intellij.openapi.application.ApplicationManager) Registry(com.intellij.openapi.util.registry.Registry) com.intellij.util(com.intellij.util) NotNull(org.jetbrains.annotations.NotNull) Ref(com.intellij.openapi.util.Ref) PsiFileSystemItem(com.intellij.psi.PsiFileSystemItem) Consumer(com.intellij.util.Consumer) DartFileListener(com.jetbrains.lang.dart.DartFileListener) com.google.dart.server(com.google.dart.server) DocumentListener(com.intellij.openapi.editor.event.DocumentListener) java.util(java.util) TObjectIntHashMap(gnu.trove.TObjectIntHashMap) ProjectFileIndex(com.intellij.openapi.roots.ProjectFileIndex) FilenameIndex(com.intellij.psi.search.FilenameIndex) StdioServerSocket(com.google.dart.server.internal.remote.StdioServerSocket) SearchScope(com.intellij.psi.search.SearchScope) ContainerUtil(com.intellij.util.containers.ContainerUtil) DartQuickAssistIntention(com.jetbrains.lang.dart.assists.DartQuickAssistIntention) FileEditorManager(com.intellij.openapi.fileEditor.FileEditorManager) Lists(com.google.common.collect.Lists) Comparing(com.intellij.openapi.util.Comparing) EvictingQueue(com.google.common.collect.EvictingQueue) IntentionManager(com.intellij.codeInsight.intention.IntentionManager) Project(com.intellij.openapi.project.Project) FileEditorManagerListener(com.intellij.openapi.fileEditor.FileEditorManagerListener) Uninterruptibles(com.google.common.util.concurrent.Uninterruptibles) DartSdkLibUtil(com.jetbrains.lang.dart.sdk.DartSdkLibUtil) StringUtil(com.intellij.openapi.util.text.StringUtil) FileDocumentManager(com.intellij.openapi.fileEditor.FileDocumentManager) Disposable(com.intellij.openapi.Disposable) File(java.io.File) DartFeedbackBuilder(com.jetbrains.lang.dart.ide.errorTreeView.DartFeedbackBuilder) TimeUnit(java.util.concurrent.TimeUnit) PubspecYamlUtil(com.jetbrains.lang.dart.util.PubspecYamlUtil) QuickAssistSet(com.jetbrains.lang.dart.assists.QuickAssistSet) Condition(com.intellij.openapi.util.Condition) QueueProcessor(com.intellij.util.concurrency.QueueProcessor) THashSet(gnu.trove.THashSet) DartSdk(com.jetbrains.lang.dart.sdk.DartSdk) ProjectFileIndex(com.intellij.openapi.roots.ProjectFileIndex) DartFileListener(com.jetbrains.lang.dart.DartFileListener) Library(com.intellij.openapi.roots.libraries.Library) Module(com.intellij.openapi.module.Module)

Example 93 with ProjectFileIndex

use of com.intellij.openapi.roots.ProjectFileIndex in project intellij-plugins by JetBrains.

the class JavaStepDefinitionCreator method getDefaultStepDefinitionFolder.

@NotNull
@Override
public PsiDirectory getDefaultStepDefinitionFolder(@NotNull final GherkinStep step) {
    PsiFile featureFile = step.getContainingFile();
    if (featureFile != null) {
        PsiDirectory psiDirectory = featureFile.getContainingDirectory();
        final Project project = step.getProject();
        if (psiDirectory != null) {
            ProjectFileIndex projectFileIndex = ProjectRootManager.getInstance(project).getFileIndex();
            VirtualFile directory = psiDirectory.getVirtualFile();
            if (projectFileIndex.isInContent(directory)) {
                VirtualFile sourceRoot = projectFileIndex.getSourceRootForFile(directory);
                //noinspection ConstantConditions
                final Module module = projectFileIndex.getModuleForFile(featureFile.getVirtualFile());
                if (module != null) {
                    final VirtualFile[] sourceRoots = ModuleRootManager.getInstance(module).getSourceRoots();
                    if (sourceRoot != null && sourceRoot.getName().equals("resources")) {
                        final VirtualFile resourceParent = sourceRoot.getParent();
                        for (VirtualFile vFile : sourceRoots) {
                            if (vFile.getPath().startsWith(resourceParent.getPath()) && vFile.getName().equals("java")) {
                                sourceRoot = vFile;
                                break;
                            }
                        }
                    } else {
                        if (sourceRoots.length > 0) {
                            sourceRoot = sourceRoots[sourceRoots.length - 1];
                        }
                    }
                }
                String packageName = "";
                if (sourceRoot != null) {
                    packageName = CucumberJavaUtil.getPackageOfStepDef(step);
                }
                final String packagePath = packageName.replace('.', '/');
                final String path = sourceRoot != null ? sourceRoot.getPath() : directory.getPath();
                // ToDo: I shouldn't create directories, only create VirtualFile object.
                final Ref<PsiDirectory> resultRef = new Ref<>();
                new WriteAction() {

                    protected void run(@NotNull Result result) throws Throwable {
                        final VirtualFile packageFile = VfsUtil.createDirectoryIfMissing(path + '/' + packagePath);
                        if (packageFile != null) {
                            resultRef.set(PsiDirectoryFactory.getInstance(project).createDirectory(packageFile));
                        }
                    }
                }.execute();
                return resultRef.get();
            }
        }
    }
    assert featureFile != null;
    return ObjectUtils.assertNotNull(featureFile.getParent());
}
Also used : VirtualFile(com.intellij.openapi.vfs.VirtualFile) WriteAction(com.intellij.openapi.application.WriteAction) Result(com.intellij.openapi.application.Result) Project(com.intellij.openapi.project.Project) Ref(com.intellij.openapi.util.Ref) ProjectFileIndex(com.intellij.openapi.roots.ProjectFileIndex) Module(com.intellij.openapi.module.Module) NotNull(org.jetbrains.annotations.NotNull)

Example 94 with ProjectFileIndex

use of com.intellij.openapi.roots.ProjectFileIndex in project intellij-plugins by JetBrains.

the class DartTestSourcesFilter method isTestSource.

@Override
public boolean isTestSource(@NotNull final VirtualFile file, @NotNull final Project project) {
    if (!file.isInLocalFileSystem())
        return false;
    final ProjectFileIndex fileIndex = ProjectFileIndex.SERVICE.getInstance(project);
    if (!fileIndex.isInContent(file))
        return false;
    if (DartIconProvider.isFolderNearPubspecYaml(file, "test"))
        return true;
    // quick fail
    if (!file.getPath().contains("/test/"))
        return false;
    VirtualFile parent = file;
    while ((parent = parent.getParent()) != null && fileIndex.isInContent(parent)) {
        if (DartIconProvider.isFolderNearPubspecYaml(parent, "test"))
            return true;
    }
    return false;
}
Also used : VirtualFile(com.intellij.openapi.vfs.VirtualFile) ProjectFileIndex(com.intellij.openapi.roots.ProjectFileIndex)

Example 95 with ProjectFileIndex

use of com.intellij.openapi.roots.ProjectFileIndex in project intellij-plugins by JetBrains.

the class DartBuildFileUtil method findPackageRootBuildFile.

/**
   * Return the BUILD build in the root of the package that contains the given context file.
   *
   * This may be not the closest BUILD file.
   * For example it will ignore "examples/BUILD" file, because the enclosing folder contains a "lib" folder and another BUILD file.
   */
@Nullable
public static VirtualFile findPackageRootBuildFile(@NotNull final Project project, @NotNull final VirtualFile contextFile) {
    final ProjectFileIndex fileIndex = ProjectRootManager.getInstance(project).getFileIndex();
    VirtualFile parent = contextFile.isDirectory() ? contextFile : contextFile.getParent();
    while (parent != null && fileIndex.isInContent(parent)) {
        final VirtualFile file = parent.findChild(BUILD_FILE_NAME);
        if (file != null && !file.isDirectory()) {
            final VirtualFile parent2 = parent.getParent();
            if (parent2 != null && parent2.findChild(LIB_DIR_NAME) == null) {
                return file;
            }
        }
        parent = parent.getParent();
    }
    return null;
}
Also used : VirtualFile(com.intellij.openapi.vfs.VirtualFile) ProjectFileIndex(com.intellij.openapi.roots.ProjectFileIndex) Nullable(org.jetbrains.annotations.Nullable)

Aggregations

ProjectFileIndex (com.intellij.openapi.roots.ProjectFileIndex)157 VirtualFile (com.intellij.openapi.vfs.VirtualFile)119 Module (com.intellij.openapi.module.Module)52 Project (com.intellij.openapi.project.Project)49 Nullable (org.jetbrains.annotations.Nullable)37 NotNull (org.jetbrains.annotations.NotNull)24 PsiDirectory (com.intellij.psi.PsiDirectory)23 GlobalSearchScope (com.intellij.psi.search.GlobalSearchScope)16 PsiFile (com.intellij.psi.PsiFile)14 ArrayList (java.util.ArrayList)13 IdeView (com.intellij.ide.IdeView)10 OrderEntry (com.intellij.openapi.roots.OrderEntry)9 THashSet (gnu.trove.THashSet)6 PropertiesFile (com.intellij.lang.properties.psi.PropertiesFile)5 ProjectRootManager (com.intellij.openapi.roots.ProjectRootManager)5 AbstractTreeNode (com.intellij.ide.util.treeView.AbstractTreeNode)4 File (java.io.File)4 List (java.util.List)4 JSClass (com.intellij.lang.javascript.psi.ecmal4.JSClass)3 Presentation (com.intellij.openapi.actionSystem.Presentation)3