/** * So support only some file types, so we can filter them and xml and yaml for now */ public static GlobalSearchScope getRestrictedFileTypesScope(@NotNull Project project) { return GlobalSearchScope.getScopeRestrictedByFileTypes(GlobalSearchScope.allScope(project), XmlFileType.INSTANCE, YAMLFileType.YML); }
private static VirtualFile[] findServiceDefinitionFiles(@NotNull Project project, @NotNull String serviceName) { final List<VirtualFile> virtualFiles = new ArrayList<>(); FileBasedIndex.getInstance().getFilesWithKey(ServicesDefinitionStubIndex.KEY, new HashSet<>(Collections.singletonList(serviceName.toLowerCase())), virtualFile -> { virtualFiles.add(virtualFile); return true; }, GlobalSearchScope.getScopeRestrictedByFileTypes(GlobalSearchScope.allScope(project), XmlFileType.INSTANCE, YAMLFileType.YML)); return virtualFiles.toArray(new VirtualFile[virtualFiles.size()]); }
public static Set<String> getTaggedServices(Project project, String tagName) { Set<String> service = new HashSet<>(); for(String serviceName: SymfonyProcessors.createResult(project, ServicesTagStubIndex.KEY)) { List<Set<String>> serviceDefinitions = FileBasedIndex.getInstance().getValues(ServicesTagStubIndex.KEY, serviceName, GlobalSearchScope.getScopeRestrictedByFileTypes(GlobalSearchScope.allScope(project), XmlFileType.INSTANCE, YAMLFileType.YML)); for(Set<String> strings: serviceDefinitions) { if(strings.contains(tagName)) { service.add(serviceName); } } } return service; }
private Collection<VirtualFile> getImplements(TwigFile twigFile) { final Set<VirtualFile> targets = new HashSet<>(); for(String templateName: TwigUtil.getTemplateNamesForFile(twigFile)) { FileBasedIndex.getInstance().getFilesWithKey(TwigIncludeStubIndex.KEY, new HashSet<>(Collections.singletonList(templateName)), virtualFile -> { targets.add(virtualFile); return true; }, GlobalSearchScope.getScopeRestrictedByFileTypes(GlobalSearchScope.allScope(twigFile.getProject()), TwigFileType.INSTANCE)); } return targets; }
private static void getTemplatesExtendingFile(@NotNull Project project, @NotNull VirtualFile virtualFile, @NotNull Set<VirtualFile> twigChild, int depth) { if(depth <= 0) { return; } // use set here, we have multiple shortcut on one file, but only one is required HashSet<VirtualFile> virtualFiles = new LinkedHashSet<>(); for(String templateName: getTemplateNamesForFile(project, virtualFile)) { // getFilesWithKey dont support keyset with > 1 items (bug?), so we cant merge calls FileBasedIndex.getInstance().getFilesWithKey(TwigExtendsStubIndex.KEY, new HashSet<>(Collections.singletonList(templateName)), myVirtualFile -> { virtualFiles.add(myVirtualFile); return true; }, GlobalSearchScope.getScopeRestrictedByFileTypes(GlobalSearchScope.allScope(project), TwigFileType.INSTANCE)); } // finally resolve virtual file to twig files for(VirtualFile myVirtualFile: virtualFiles) { // stop if already inside if(twigChild.contains(myVirtualFile)) { continue; } twigChild.add(myVirtualFile); getTemplatesExtendingFile(project, myVirtualFile, twigChild, --depth); } }
/** * Get parameter def inside xml or yaml file */ public static Collection<PsiElement> getParameterDefinition(Project project, String parameterName) { if(parameterName.length() > 2 && parameterName.startsWith("%") && parameterName.endsWith("%")) { parameterName = parameterName.substring(1, parameterName.length() - 1); } Collection<PsiElement> psiElements = new ArrayList<>(); Collection<VirtualFile> fileCollection = FileBasedIndex.getInstance().getContainingFiles(ContainerParameterStubIndex.KEY, parameterName, GlobalSearchScope.getScopeRestrictedByFileTypes(GlobalSearchScope.allScope(project), XmlFileType.INSTANCE, YAMLFileType.YML)); for(VirtualFile virtualFile: fileCollection) { PsiFile psiFile = PsiManager.getInstance(project).findFile(virtualFile); if(psiFile != null) { psiElements.addAll(ServiceIndexUtil.findParameterDefinitions(psiFile, parameterName)); } } return psiElements; }
public static Collection<PsiElement> getTwigMacroTargets(final Project project, final String name) { final Collection<PsiElement> targets = new ArrayList<>(); FileBasedIndex.getInstance().getFilesWithKey(TwigMacroFunctionStubIndex.KEY, new HashSet<>(Collections.singletonList(name)), virtualFile -> { PsiFile psiFile = PsiManager.getInstance(project).findFile(virtualFile); if (psiFile != null) { PsiTreeUtil.processElements(psiFile, psiElement -> { if (TwigPattern.getTwigMacroNameKnownPattern(name).accepts(psiElement)) { targets.add(psiElement); } return true; }); } return true; }, GlobalSearchScope.getScopeRestrictedByFileTypes(GlobalSearchScope.allScope(project), TwigFileType.INSTANCE)); return targets; }
TwigIncludeStubIndex.KEY, templateName, GlobalSearchScope.getScopeRestrictedByFileTypes(GlobalSearchScope.allScope(project), TwigFileType.INSTANCE)) );
List<Set<String>> tags = FileBasedIndex.getInstance().getValues(ServicesTagStubIndex.KEY, serviceName, GlobalSearchScope.getScopeRestrictedByFileTypes(GlobalSearchScope.allScope(project), XmlFileType.INSTANCE, YAMLFileType.YML)); for(Set<String> tagDef: tags) { for(String tag: tagDef) {
List<Set<String>> values = FileBasedIndex.getInstance().getValues(ServicesTagStubIndex.KEY, serviceName, GlobalSearchScope.getScopeRestrictedByFileTypes(GlobalSearchScope.allScope(project), XmlFileType.INSTANCE, YAMLFileType.YML)); if(values.size() == 0) { continue;
private LineMarkerInfo attachIncludes(@NotNull TwigFile twigFile) { Collection<String> templateNames = TwigUtil.getTemplateNamesForFile(twigFile); boolean found = false; for(String templateName: templateNames) { Project project = twigFile.getProject(); Collection<VirtualFile> containingFiles = FileBasedIndex.getInstance().getContainingFiles( TwigIncludeStubIndex.KEY, templateName, GlobalSearchScope.getScopeRestrictedByFileTypes(GlobalSearchScope.allScope(project), TwigFileType.INSTANCE) ); // stop on first target, we load them lazily afterwards if(containingFiles.size() > 0) { found = true; break; } } if(!found) { return null; } NavigationGutterIconBuilder<PsiElement> builder = NavigationGutterIconBuilder.create(PhpIcons.IMPLEMENTED) .setTargets(new MyTemplateIncludeLazyValue(twigFile, templateNames)) .setTooltipText("Navigate to includes") .setCellRenderer(new MyFileReferencePsiElementListCellRenderer()); return builder.createLineMarkerInfo(twigFile); }
public static GlobalSearchScope bashOnly(GlobalSearchScope scope) { return GlobalSearchScope.getScopeRestrictedByFileTypes(scope, BashFileType.BASH_FILE_TYPE); } }
for (PsiFile psiFile : FilenameIndex.getFilesByName(project, files, GlobalSearchScope.getScopeRestrictedByFileTypes(GlobalSearchScope.allScope(project), YAMLFileType.YML))) { if(!(psiFile instanceof YAMLFile)) { continue;