package com.python.pydev.analysis.search_index; import java.util.ArrayList; import java.util.List; import java.util.Set; import org.eclipse.core.resources.IProject; import org.eclipse.core.resources.IWorkspace; import org.eclipse.core.resources.ResourcesPlugin; import org.python.pydev.core.IPythonNature; import org.python.pydev.core.log.Log; import org.python.pydev.plugin.nature.PythonNature; import org.python.pydev.shared_ui.search.AbstractSearchResultsViewerFilter.IMatcher; import org.python.pydev.shared_ui.search.ScopeAndData; import org.python.pydev.shared_ui.search.SearchIndexData; public class PyScopeAndData { public static List<IPythonNature> getPythonNatures(ScopeAndData scopeAndData) { if (scopeAndData.scope == SearchIndexData.SCOPE_PROJECTS) { IMatcher matcher = PySearchResultsViewerFilter.createMatcher(scopeAndData.scopeData, true); ArrayList<IPythonNature> ret = new ArrayList<>(); IWorkspace workspace = ResourcesPlugin.getWorkspace(); for (IProject project : workspace.getRoot().getProjects()) { if (project != null && project.exists() && project.isOpen()) { if (PySearchResultsViewerFilter.filterMatches(project.getName(), matcher)) { ret.add(PythonNature.getPythonNature(project)); } } } if (ret.size() == 0) { Log.log("Unable to resolve projects to search from string: '" + scopeAndData.scopeData + "' (searching workspace)."); ret.addAll(PythonNature.getAllPythonNatures()); } return ret; } if (scopeAndData.scope == SearchIndexData.SCOPE_MODULES) { ArrayList<IPythonNature> ret = new ArrayList<>(); IMatcher matcher = PySearchResultsViewerFilter.createMatcher(scopeAndData.scopeData, true); List<IPythonNature> allPythonNatures = PythonNature.getAllPythonNatures(); for (IPythonNature nature : allPythonNatures) { Set<String> allModuleNames = nature.getAstManager().getModulesManager().getAllModuleNames(false, ""); for (String s : allModuleNames) { if (PySearchResultsViewerFilter.filterMatches(s, matcher)) { ret.add(nature); break; } } } return ret; } if (scopeAndData.scope == SearchIndexData.SCOPE_WORKSPACE) { return PythonNature.getAllPythonNatures(); } Log.log("Unable to deal with scope: " + scopeAndData.scope + ". Searching workspace."); return PythonNature.getAllPythonNatures(); } }