package net.jangaroo.ide.idea.exml; import com.intellij.ide.highlighter.XmlFileType; import com.intellij.lang.properties.PropertiesFileType; import com.intellij.navigation.ChooseByNameContributor; import com.intellij.navigation.NavigationItem; import com.intellij.openapi.project.Project; import com.intellij.openapi.roots.ProjectFileIndex; import com.intellij.openapi.vfs.VirtualFile; import com.intellij.psi.search.FileTypeIndex; import com.intellij.psi.search.FilenameIndex; import com.intellij.psi.search.GlobalSearchScope; import com.intellij.util.CommonProcessors; import com.intellij.util.indexing.FindSymbolParameters; import org.jetbrains.annotations.NotNull; import java.util.Collection; import java.util.HashSet; import java.util.Set; /** * Configure EXML files to appear in "Goto classes". */ public class GotoExmlClassContributor implements ChooseByNameContributor { @NotNull @Override public String[] getNames(Project project, boolean includeNonProjectItems) { ProjectFileIndex projectFileIndex = ProjectFileIndex.SERVICE.getInstance(project); Set<String> names = new HashSet<String>(); Collection<VirtualFile> xmlFiles = FileTypeIndex.getFiles(XmlFileType.INSTANCE, GlobalSearchScope.projectScope(project)); for (VirtualFile file : xmlFiles) { if ("exml".equals(file.getExtension()) && projectFileIndex.isInSourceContent(file)) { names.add(file.getName()); } } return names.toArray(new String[names.size()]); } @NotNull @Override public NavigationItem[] getItemsByName(String name, String pattern, Project project, boolean includeNonProjectItems) { CommonProcessors.CollectProcessor<NavigationItem> processor = new CommonProcessors.CollectProcessor<NavigationItem>(); FindSymbolParameters parameters = FindSymbolParameters.wrap(pattern, project, includeNonProjectItems); FilenameIndex.processFilesByName( name, false, processor, parameters.getSearchScope(), parameters.getProject(), parameters.getIdFilter() ); return processor.toArray(new NavigationItem[processor.getResults().size()]); } }