From 0805f7adaaf680cbd20ea430662f32ba65031dea Mon Sep 17 00:00:00 2001 From: Daniel Espendiller Date: Sat, 9 Apr 2022 11:18:50 +0200 Subject: [PATCH 1/2] prevent indexing long strings --- .../stubs/indexes/FileResourcesIndex.java | 9 ++++--- .../stubs/indexes/RoutesStubIndex.java | 10 ++++++-- .../stubs/indexes/TranslationStubIndex.java | 24 +++++++++---------- .../indexes/TwigBlockIndexExtension.java | 9 +++++-- .../indexes/TwigControllerStubIndex.java | 10 +++++++- .../indexes/TwigMacroFunctionStubIndex.java | 11 ++++++++- 6 files changed, 52 insertions(+), 21 deletions(-) diff --git a/src/main/java/fr/adrienbrault/idea/symfony2plugin/stubs/indexes/FileResourcesIndex.java b/src/main/java/fr/adrienbrault/idea/symfony2plugin/stubs/indexes/FileResourcesIndex.java index aef2a4f92..6a2aa3b83 100644 --- a/src/main/java/fr/adrienbrault/idea/symfony2plugin/stubs/indexes/FileResourcesIndex.java +++ b/src/main/java/fr/adrienbrault/idea/symfony2plugin/stubs/indexes/FileResourcesIndex.java @@ -45,9 +45,12 @@ public DataIndexer getIndexer() { final Map items = new THashMap<>(); - FileResourceVisitorUtil.visitFile(psiFile, consumer -> - items.put(consumer.getResource(), consumer.createFileResource()) - ); + FileResourceVisitorUtil.visitFile(psiFile, consumer -> { + String resource = consumer.getResource(); + if (resource.length() < 255) { + items.put(resource, consumer.createFileResource()); + } + }); return items; }; diff --git a/src/main/java/fr/adrienbrault/idea/symfony2plugin/stubs/indexes/RoutesStubIndex.java b/src/main/java/fr/adrienbrault/idea/symfony2plugin/stubs/indexes/RoutesStubIndex.java index faf530fef..26f315342 100644 --- a/src/main/java/fr/adrienbrault/idea/symfony2plugin/stubs/indexes/RoutesStubIndex.java +++ b/src/main/java/fr/adrienbrault/idea/symfony2plugin/stubs/indexes/RoutesStubIndex.java @@ -64,13 +64,19 @@ public DataIndexer getIndexer() { } for(StubIndexedRoute indexedRoutes: RouteHelper.getYamlRouteDefinitions(yamlDocument)) { - map.put(indexedRoutes.getName(), indexedRoutes); + String name = indexedRoutes.getName(); + if (name.length() < 255) { + map.put(name, indexedRoutes); + } } return map; } else if(psiFile instanceof XmlFile) { for(StubIndexedRoute indexedRoutes: RouteHelper.getXmlRouteDefinitions((XmlFile) psiFile)) { - map.put(indexedRoutes.getName(), indexedRoutes); + String name = indexedRoutes.getName(); + if (name.length() < 255) { + map.put(name, indexedRoutes); + } } } else if(psiFile instanceof PhpFile) { // annotations: @Route() diff --git a/src/main/java/fr/adrienbrault/idea/symfony2plugin/stubs/indexes/TranslationStubIndex.java b/src/main/java/fr/adrienbrault/idea/symfony2plugin/stubs/indexes/TranslationStubIndex.java index 6ccc3cd0d..d4966444d 100644 --- a/src/main/java/fr/adrienbrault/idea/symfony2plugin/stubs/indexes/TranslationStubIndex.java +++ b/src/main/java/fr/adrienbrault/idea/symfony2plugin/stubs/indexes/TranslationStubIndex.java @@ -34,21 +34,21 @@ public class TranslationStubIndex extends FileBasedIndexExtension, FileContent> getIndexer() { - return new DataIndexer, FileContent>() { + return new DataIndexer<>() { @NotNull @Override public Map> map(@NotNull FileContent inputData) { - if(!Symfony2ProjectComponent.isEnabledForIndex(inputData.getProject())) { + if (!Symfony2ProjectComponent.isEnabledForIndex(inputData.getProject())) { return Collections.emptyMap(); } String extension = inputData.getFile().getExtension(); - if("xlf".equalsIgnoreCase(extension) || "xliff".equalsIgnoreCase(extension)) { + if ("xlf".equalsIgnoreCase(extension) || "xliff".equalsIgnoreCase(extension)) { return getXlfStringMap(inputData); } PsiFile psiFile = inputData.getPsiFile(); - if(!(psiFile instanceof YAMLFile)) { + if (!(psiFile instanceof YAMLFile)) { return Collections.emptyMap(); } @@ -58,7 +58,7 @@ public Map> map(@NotNull FileContent inputData) { } String domainName = this.getDomainName(inputData.getFileName()); - if(domainName == null) { + if (domainName == null) { return Collections.emptyMap(); } @@ -68,7 +68,7 @@ public Map> map(@NotNull FileContent inputData) { return true; }); - if(translationKeySet.size() == 0) { + if (translationKeySet.size() == 0) { return Collections.emptyMap(); } @@ -84,7 +84,7 @@ private boolean isValidTranslationFile(@NotNull FileContent inputData, @NotNull // - "Resources/translations" // - "translations/[.../]foo.de.yml" String relativePath = VfsUtil.getRelativePath(inputData.getFile(), ProjectUtil.getProjectDir(inputData.getProject()), '/'); - if(relativePath != null) { + if (relativePath != null) { return relativePath.contains("/translations") || relativePath.startsWith("translations/"); } @@ -98,13 +98,13 @@ private boolean isValidTranslationFile(@NotNull FileContent inputData, @NotNull private Map> getXlfStringMap(@NotNull FileContent inputData) { // testing files are not that nice String relativePath = VfsUtil.getRelativePath(inputData.getFile(), ProjectUtil.getProjectDir(inputData.getProject()), '/'); - if(relativePath != null && (relativePath.contains("/Test/") || relativePath.contains("/Tests/") || relativePath.contains("/Fixture/") || relativePath.contains("/Fixtures/"))) { + if (relativePath != null && (relativePath.contains("/Test/") || relativePath.contains("/Tests/") || relativePath.contains("/Fixture/") || relativePath.contains("/Fixtures/"))) { return Collections.emptyMap(); } // extract domain name String domainName = getDomainName(inputData.getFileName()); - if(domainName == null) { + if (domainName == null) { return Collections.emptyMap(); } @@ -116,7 +116,7 @@ private Map> getXlfStringMap(@NotNull FileContent inputData) } Set set = TranslationUtil.getXliffTranslations(inputStream); - if(set.size() == 0) { + if (set.size() == 0) { return Collections.emptyMap(); } @@ -129,14 +129,14 @@ private Map> getXlfStringMap(@NotNull FileContent inputData) @Nullable private String getDomainName(@NotNull String fileName) { String[] split = fileName.split("\\."); - if(split.length < 2 || Arrays.stream(split).anyMatch(s -> s.length() == 0)) { + if (split.length < 2 || Arrays.stream(split).anyMatch(s -> s.length() == 0)) { return null; } // foo.fr.yml // dont index fr.yml int domainSplit = fileName.lastIndexOf("."); - if(domainSplit <= 2) { + if (domainSplit <= 2) { return null; } diff --git a/src/main/java/fr/adrienbrault/idea/symfony2plugin/stubs/indexes/TwigBlockIndexExtension.java b/src/main/java/fr/adrienbrault/idea/symfony2plugin/stubs/indexes/TwigBlockIndexExtension.java index 72bdef4a1..9c7cd411d 100644 --- a/src/main/java/fr/adrienbrault/idea/symfony2plugin/stubs/indexes/TwigBlockIndexExtension.java +++ b/src/main/java/fr/adrienbrault/idea/symfony2plugin/stubs/indexes/TwigBlockIndexExtension.java @@ -45,12 +45,17 @@ public DataIndexer, FileContent> getIndexer() { PsiFile psiFile = fileContent.getPsiFile(); if(psiFile instanceof TwigFile) { for (TwigBlock twigBlock : TwigUtil.getBlocksInFile((TwigFile) psiFile)) { + String blockName = twigBlock.getName(); + if (blockName.length() > 255) { + continue; + } + // we only index file scope // {% embed 'foo.html.twig' %}{% block foo %}{% endembed %} PsiElement embedStatement = PsiElementUtils.getParentOfType(twigBlock.getTarget(), TwigElementTypes.EMBED_STATEMENT); if(embedStatement == null) { blocks.putIfAbsent("block", new HashSet<>()); - blocks.get("block").add(twigBlock.getName()); + blocks.get("block").add(blockName); } } @@ -63,7 +68,7 @@ public DataIndexer, FileContent> getIndexer() { public void visitElement(PsiElement element) { if(TwigPattern.getTwigTagUseNamePattern().accepts(element) && PsiElementUtils.getParentOfType(element, TwigElementTypes.EMBED_STATEMENT) == null) { String templateName = TwigUtil.normalizeTemplateName(PsiElementUtils.trimQuote(element.getText())); - if(StringUtils.isNotBlank(templateName)) { + if(templateName.length() < 255 && StringUtils.isNotBlank(templateName)) { blocks.putIfAbsent("use", new HashSet<>()); blocks.get("use").add(templateName); } diff --git a/src/main/java/fr/adrienbrault/idea/symfony2plugin/stubs/indexes/TwigControllerStubIndex.java b/src/main/java/fr/adrienbrault/idea/symfony2plugin/stubs/indexes/TwigControllerStubIndex.java index 007e89ea9..1d66606ce 100644 --- a/src/main/java/fr/adrienbrault/idea/symfony2plugin/stubs/indexes/TwigControllerStubIndex.java +++ b/src/main/java/fr/adrienbrault/idea/symfony2plugin/stubs/indexes/TwigControllerStubIndex.java @@ -1,6 +1,9 @@ package fr.adrienbrault.idea.symfony2plugin.stubs.indexes; +import com.intellij.openapi.util.Pair; +import com.intellij.psi.PsiElement; import com.intellij.psi.PsiFile; +import com.intellij.util.Consumer; import com.intellij.util.indexing.*; import com.intellij.util.io.DataExternalizer; import com.intellij.util.io.EnumeratorStringDescriptor; @@ -42,7 +45,12 @@ public DataIndexer getIndexer() { } final Map map = new THashMap<>(); - TwigUtil.visitControllerFunctions(psiFile, pair -> map.put(pair.getFirst(), null)); + TwigUtil.visitControllerFunctions(psiFile, pair -> { + String name = pair.getFirst(); + if (name.length() < 255) { + map.put(name, null); + } + }); return map; }; diff --git a/src/main/java/fr/adrienbrault/idea/symfony2plugin/stubs/indexes/TwigMacroFunctionStubIndex.java b/src/main/java/fr/adrienbrault/idea/symfony2plugin/stubs/indexes/TwigMacroFunctionStubIndex.java index debbb848b..95347c9fc 100644 --- a/src/main/java/fr/adrienbrault/idea/symfony2plugin/stubs/indexes/TwigMacroFunctionStubIndex.java +++ b/src/main/java/fr/adrienbrault/idea/symfony2plugin/stubs/indexes/TwigMacroFunctionStubIndex.java @@ -1,6 +1,9 @@ package fr.adrienbrault.idea.symfony2plugin.stubs.indexes; +import com.intellij.openapi.util.Pair; +import com.intellij.psi.PsiElement; import com.intellij.psi.PsiFile; +import com.intellij.util.Consumer; import com.intellij.util.indexing.*; import com.intellij.util.io.DataExternalizer; import com.intellij.util.io.EnumeratorStringDescriptor; @@ -10,6 +13,7 @@ import fr.adrienbrault.idea.symfony2plugin.Symfony2ProjectComponent; import fr.adrienbrault.idea.symfony2plugin.stubs.dict.TwigMacroTagIndex; import fr.adrienbrault.idea.symfony2plugin.stubs.indexes.externalizer.ObjectStreamDataExternalizer; +import fr.adrienbrault.idea.symfony2plugin.templating.dict.TwigMacroTag; import fr.adrienbrault.idea.symfony2plugin.templating.util.TwigUtil; import gnu.trove.THashMap; import org.jetbrains.annotations.NotNull; @@ -46,7 +50,12 @@ public DataIndexer getIndexer() { return map; } - TwigUtil.visitMacros(psiFile, pair -> map.put(pair.getFirst().getName(), new TwigMacroTagIndex(pair.getFirst().getName(), pair.getFirst().getParameters()))); + TwigUtil.visitMacros(psiFile, pair -> { + String templateName = pair.getFirst().getName(); + if (templateName.length() < 255) { + map.put(templateName, new TwigMacroTagIndex(templateName, pair.getFirst().getParameters())); + } + }); return map; }; From 7fb90305e85cf0267fcd766b7f889ab9502c7fdb Mon Sep 17 00:00:00 2001 From: Daniel Espendiller Date: Sat, 9 Apr 2022 11:42:17 +0200 Subject: [PATCH 2/2] prevent indexing all xml file types; filter by extension --- .../indexes/ContainerIdUsagesStubIndex.java | 5 +- .../indexes/ContainerParameterStubIndex.java | 5 +- .../DoctrineMetadataFileStubIndex.java | 14 +---- .../stubs/indexes/FileResourcesIndex.java | 6 +-- .../stubs/indexes/RoutesStubIndex.java | 10 +--- .../indexes/ServicesDefinitionStubIndex.java | 7 +-- .../stubs/indexes/ServicesTagStubIndex.java | 6 +-- .../indexes/inputFilter/FileInputFilter.java | 51 +++++++++++++++++++ 8 files changed, 65 insertions(+), 39 deletions(-) create mode 100644 src/main/java/fr/adrienbrault/idea/symfony2plugin/stubs/indexes/inputFilter/FileInputFilter.java diff --git a/src/main/java/fr/adrienbrault/idea/symfony2plugin/stubs/indexes/ContainerIdUsagesStubIndex.java b/src/main/java/fr/adrienbrault/idea/symfony2plugin/stubs/indexes/ContainerIdUsagesStubIndex.java index c3959a3af..904ae1447 100644 --- a/src/main/java/fr/adrienbrault/idea/symfony2plugin/stubs/indexes/ContainerIdUsagesStubIndex.java +++ b/src/main/java/fr/adrienbrault/idea/symfony2plugin/stubs/indexes/ContainerIdUsagesStubIndex.java @@ -1,6 +1,5 @@ package fr.adrienbrault.idea.symfony2plugin.stubs.indexes; -import com.intellij.ide.highlighter.XmlFileType; import com.intellij.psi.PsiElement; import com.intellij.psi.PsiFile; import com.intellij.psi.xml.XmlDocument; @@ -12,10 +11,10 @@ import com.intellij.util.io.EnumeratorStringDescriptor; import com.intellij.util.io.KeyDescriptor; import fr.adrienbrault.idea.symfony2plugin.Symfony2ProjectComponent; +import fr.adrienbrault.idea.symfony2plugin.stubs.indexes.inputFilter.FileInputFilter; import fr.adrienbrault.idea.symfony2plugin.util.yaml.YamlHelper; import org.apache.commons.lang.StringUtils; import org.jetbrains.annotations.NotNull; -import org.jetbrains.yaml.YAMLFileType; import org.jetbrains.yaml.psi.*; import java.util.Collections; @@ -76,7 +75,7 @@ public DataExternalizer getValueExternalizer() { @NotNull @Override public FileBasedIndex.InputFilter getInputFilter() { - return file -> file.getFileType() == XmlFileType.INSTANCE || file.getFileType() == YAMLFileType.YML; + return FileInputFilter.XML_YAML; } @Override diff --git a/src/main/java/fr/adrienbrault/idea/symfony2plugin/stubs/indexes/ContainerParameterStubIndex.java b/src/main/java/fr/adrienbrault/idea/symfony2plugin/stubs/indexes/ContainerParameterStubIndex.java index af847ceb5..b5c243d7b 100644 --- a/src/main/java/fr/adrienbrault/idea/symfony2plugin/stubs/indexes/ContainerParameterStubIndex.java +++ b/src/main/java/fr/adrienbrault/idea/symfony2plugin/stubs/indexes/ContainerParameterStubIndex.java @@ -1,6 +1,5 @@ package fr.adrienbrault.idea.symfony2plugin.stubs.indexes; -import com.intellij.ide.highlighter.XmlFileType; import com.intellij.psi.PsiFile; import com.intellij.psi.xml.XmlFile; import com.intellij.util.indexing.*; @@ -9,9 +8,9 @@ import com.intellij.util.io.KeyDescriptor; import fr.adrienbrault.idea.symfony2plugin.Symfony2ProjectComponent; import fr.adrienbrault.idea.symfony2plugin.config.xml.XmlHelper; +import fr.adrienbrault.idea.symfony2plugin.stubs.indexes.inputFilter.FileInputFilter; import fr.adrienbrault.idea.symfony2plugin.util.yaml.YamlHelper; import org.jetbrains.annotations.NotNull; -import org.jetbrains.yaml.YAMLFileType; import org.jetbrains.yaml.psi.YAMLFile; import java.util.HashMap; @@ -84,7 +83,7 @@ public DataExternalizer getValueExternalizer() { @NotNull @Override public FileBasedIndex.InputFilter getInputFilter() { - return file -> file.getFileType() == XmlFileType.INSTANCE || file.getFileType() == YAMLFileType.YML; + return FileInputFilter.XML_YAML; } @Override diff --git a/src/main/java/fr/adrienbrault/idea/symfony2plugin/stubs/indexes/DoctrineMetadataFileStubIndex.java b/src/main/java/fr/adrienbrault/idea/symfony2plugin/stubs/indexes/DoctrineMetadataFileStubIndex.java index 6ba2198e0..5defe98fd 100644 --- a/src/main/java/fr/adrienbrault/idea/symfony2plugin/stubs/indexes/DoctrineMetadataFileStubIndex.java +++ b/src/main/java/fr/adrienbrault/idea/symfony2plugin/stubs/indexes/DoctrineMetadataFileStubIndex.java @@ -1,22 +1,19 @@ package fr.adrienbrault.idea.symfony2plugin.stubs.indexes; -import com.intellij.ide.highlighter.XmlFileType; -import com.intellij.openapi.fileTypes.FileType; import com.intellij.openapi.util.Pair; import com.intellij.psi.PsiFile; import com.intellij.util.indexing.*; import com.intellij.util.io.DataExternalizer; import com.intellij.util.io.EnumeratorStringDescriptor; import com.intellij.util.io.KeyDescriptor; -import com.jetbrains.php.lang.PhpFileType; import fr.adrienbrault.idea.symfony2plugin.Symfony2ProjectComponent; import fr.adrienbrault.idea.symfony2plugin.doctrine.DoctrineUtil; import fr.adrienbrault.idea.symfony2plugin.doctrine.dict.DoctrineModel; import fr.adrienbrault.idea.symfony2plugin.doctrine.dict.DoctrineModelSerializable; import fr.adrienbrault.idea.symfony2plugin.stubs.indexes.externalizer.ObjectStreamDataExternalizer; +import fr.adrienbrault.idea.symfony2plugin.stubs.indexes.inputFilter.FileInputFilter; import gnu.trove.THashMap; import org.jetbrains.annotations.NotNull; -import org.jetbrains.yaml.YAMLFileType; import java.util.Collection; import java.util.Map; @@ -89,14 +86,7 @@ public DataExternalizer getValueExternalizer() { @NotNull @Override public FileBasedIndex.InputFilter getInputFilter() { - return virtualFile -> { - FileType fileType = virtualFile.getFileType(); - return - fileType == XmlFileType.INSTANCE || - fileType == PhpFileType.INSTANCE || - fileType == YAMLFileType.YML - ; - }; + return FileInputFilter.XML_YAML_PHP; } @Override diff --git a/src/main/java/fr/adrienbrault/idea/symfony2plugin/stubs/indexes/FileResourcesIndex.java b/src/main/java/fr/adrienbrault/idea/symfony2plugin/stubs/indexes/FileResourcesIndex.java index 6a2aa3b83..82fd397a4 100644 --- a/src/main/java/fr/adrienbrault/idea/symfony2plugin/stubs/indexes/FileResourcesIndex.java +++ b/src/main/java/fr/adrienbrault/idea/symfony2plugin/stubs/indexes/FileResourcesIndex.java @@ -1,6 +1,5 @@ package fr.adrienbrault.idea.symfony2plugin.stubs.indexes; -import com.intellij.ide.highlighter.XmlFileType; import com.intellij.psi.PsiFile; import com.intellij.util.indexing.*; import com.intellij.util.io.DataExternalizer; @@ -9,10 +8,10 @@ import fr.adrienbrault.idea.symfony2plugin.Symfony2ProjectComponent; import fr.adrienbrault.idea.symfony2plugin.stubs.dict.FileResource; import fr.adrienbrault.idea.symfony2plugin.stubs.indexes.externalizer.ObjectStreamDataExternalizer; +import fr.adrienbrault.idea.symfony2plugin.stubs.indexes.inputFilter.FileInputFilter; import fr.adrienbrault.idea.symfony2plugin.util.FileResourceVisitorUtil; import gnu.trove.THashMap; import org.jetbrains.annotations.NotNull; -import org.jetbrains.yaml.YAMLFileType; import java.util.Collections; import java.util.Map; @@ -71,8 +70,7 @@ public DataExternalizer getValueExternalizer() { @NotNull @Override public FileBasedIndex.InputFilter getInputFilter() { - return virtualFile -> - virtualFile.getFileType() == XmlFileType.INSTANCE || virtualFile.getFileType() == YAMLFileType.YML; + return FileInputFilter.XML_YAML; } @Override diff --git a/src/main/java/fr/adrienbrault/idea/symfony2plugin/stubs/indexes/RoutesStubIndex.java b/src/main/java/fr/adrienbrault/idea/symfony2plugin/stubs/indexes/RoutesStubIndex.java index 26f315342..44913bb6d 100644 --- a/src/main/java/fr/adrienbrault/idea/symfony2plugin/stubs/indexes/RoutesStubIndex.java +++ b/src/main/java/fr/adrienbrault/idea/symfony2plugin/stubs/indexes/RoutesStubIndex.java @@ -1,7 +1,5 @@ package fr.adrienbrault.idea.symfony2plugin.stubs.indexes; -import com.intellij.ide.highlighter.XmlFileType; -import com.intellij.openapi.fileTypes.FileType; import com.intellij.openapi.vfs.VfsUtil; import com.intellij.openapi.vfs.VirtualFile; import com.intellij.psi.PsiFile; @@ -11,17 +9,16 @@ import com.intellij.util.io.DataExternalizer; import com.intellij.util.io.EnumeratorStringDescriptor; import com.intellij.util.io.KeyDescriptor; -import com.jetbrains.php.lang.PhpFileType; import com.jetbrains.php.lang.psi.PhpFile; import fr.adrienbrault.idea.symfony2plugin.Symfony2ProjectComponent; import fr.adrienbrault.idea.symfony2plugin.routing.RouteHelper; import fr.adrienbrault.idea.symfony2plugin.stubs.dict.StubIndexedRoute; import fr.adrienbrault.idea.symfony2plugin.stubs.indexes.externalizer.ObjectStreamDataExternalizer; +import fr.adrienbrault.idea.symfony2plugin.stubs.indexes.inputFilter.FileInputFilter; import fr.adrienbrault.idea.symfony2plugin.stubs.indexes.visitor.AnnotationRouteElementWalkingVisitor; import fr.adrienbrault.idea.symfony2plugin.util.ProjectUtil; import gnu.trove.THashMap; import org.jetbrains.annotations.NotNull; -import org.jetbrains.yaml.YAMLFileType; import org.jetbrains.yaml.psi.YAMLDocument; import org.jetbrains.yaml.psi.YAMLFile; @@ -107,10 +104,7 @@ public DataExternalizer getValueExternalizer() { @NotNull @Override public FileBasedIndex.InputFilter getInputFilter() { - return file -> { - FileType fileType = file.getFileType(); - return fileType == YAMLFileType.YML || fileType == XmlFileType.INSTANCE || fileType == PhpFileType.INSTANCE; - }; + return FileInputFilter.XML_YAML_PHP; } @Override diff --git a/src/main/java/fr/adrienbrault/idea/symfony2plugin/stubs/indexes/ServicesDefinitionStubIndex.java b/src/main/java/fr/adrienbrault/idea/symfony2plugin/stubs/indexes/ServicesDefinitionStubIndex.java index 3395d9670..eb9985deb 100644 --- a/src/main/java/fr/adrienbrault/idea/symfony2plugin/stubs/indexes/ServicesDefinitionStubIndex.java +++ b/src/main/java/fr/adrienbrault/idea/symfony2plugin/stubs/indexes/ServicesDefinitionStubIndex.java @@ -1,21 +1,19 @@ package fr.adrienbrault.idea.symfony2plugin.stubs.indexes; -import com.intellij.ide.highlighter.XmlFileType; import com.intellij.openapi.vfs.VfsUtil; import com.intellij.psi.PsiFile; import com.intellij.util.indexing.*; import com.intellij.util.io.DataExternalizer; import com.intellij.util.io.EnumeratorStringDescriptor; import com.intellij.util.io.KeyDescriptor; -import com.jetbrains.php.lang.PhpFileType; import fr.adrienbrault.idea.symfony2plugin.Symfony2ProjectComponent; import fr.adrienbrault.idea.symfony2plugin.dic.container.ServiceSerializable; import fr.adrienbrault.idea.symfony2plugin.dic.container.util.ServiceContainerUtil; import fr.adrienbrault.idea.symfony2plugin.stubs.indexes.externalizer.ObjectStreamDataExternalizer; +import fr.adrienbrault.idea.symfony2plugin.stubs.indexes.inputFilter.FileInputFilter; import fr.adrienbrault.idea.symfony2plugin.util.ProjectUtil; import gnu.trove.THashMap; import org.jetbrains.annotations.NotNull; -import org.jetbrains.yaml.YAMLFileType; import java.io.File; import java.util.Collection; @@ -74,8 +72,7 @@ public DataExternalizer getValueExternalizer() { @NotNull @Override public FileBasedIndex.InputFilter getInputFilter() { - return file -> - file.getFileType() == XmlFileType.INSTANCE || file.getFileType() == YAMLFileType.YML || file.getFileType() == PhpFileType.INSTANCE; + return FileInputFilter.XML_YAML_PHP; } @Override diff --git a/src/main/java/fr/adrienbrault/idea/symfony2plugin/stubs/indexes/ServicesTagStubIndex.java b/src/main/java/fr/adrienbrault/idea/symfony2plugin/stubs/indexes/ServicesTagStubIndex.java index 11ffcce6d..eae0ddc98 100644 --- a/src/main/java/fr/adrienbrault/idea/symfony2plugin/stubs/indexes/ServicesTagStubIndex.java +++ b/src/main/java/fr/adrienbrault/idea/symfony2plugin/stubs/indexes/ServicesTagStubIndex.java @@ -1,6 +1,5 @@ package fr.adrienbrault.idea.symfony2plugin.stubs.indexes; -import com.intellij.ide.highlighter.XmlFileType; import com.intellij.psi.PsiFile; import com.intellij.psi.xml.XmlFile; import com.intellij.util.indexing.*; @@ -10,9 +9,9 @@ import fr.adrienbrault.idea.symfony2plugin.Symfony2ProjectComponent; import fr.adrienbrault.idea.symfony2plugin.form.util.FormUtil; import fr.adrienbrault.idea.symfony2plugin.stubs.indexes.externalizer.StringSetDataExternalizer; +import fr.adrienbrault.idea.symfony2plugin.stubs.indexes.inputFilter.FileInputFilter; import gnu.trove.THashMap; import org.jetbrains.annotations.NotNull; -import org.jetbrains.yaml.YAMLFileType; import org.jetbrains.yaml.psi.YAMLFile; import java.util.Map; @@ -75,8 +74,7 @@ public DataExternalizer> getValueExternalizer() { @NotNull @Override public FileBasedIndex.InputFilter getInputFilter() { - return file -> - file.getFileType() == XmlFileType.INSTANCE || file.getFileType() == YAMLFileType.YML; + return FileInputFilter.XML_YAML; } @Override diff --git a/src/main/java/fr/adrienbrault/idea/symfony2plugin/stubs/indexes/inputFilter/FileInputFilter.java b/src/main/java/fr/adrienbrault/idea/symfony2plugin/stubs/indexes/inputFilter/FileInputFilter.java new file mode 100644 index 000000000..20a72ed11 --- /dev/null +++ b/src/main/java/fr/adrienbrault/idea/symfony2plugin/stubs/indexes/inputFilter/FileInputFilter.java @@ -0,0 +1,51 @@ +package fr.adrienbrault.idea.symfony2plugin.stubs.indexes.inputFilter; + +import com.intellij.ide.highlighter.XmlFileType; +import com.intellij.openapi.fileTypes.FileType; +import com.intellij.openapi.vfs.VirtualFile; +import com.intellij.util.indexing.FileBasedIndex; +import com.jetbrains.php.lang.PhpFileType; +import org.jetbrains.annotations.NotNull; +import org.jetbrains.yaml.YAMLFileType; + +/** + * Files which are allowed for cusomng on index + * + * Its a performance issue indexing too many files + * + * @author Daniel Espendiller + */ +public class FileInputFilter { + public static FileBasedIndex.InputFilter XML_YAML_PHP = new XmlYamlAndPhpFileInputFilter(); + public static FileBasedIndex.InputFilter XML_YAML = new XmlAndYamlFileInputFilter(); + + private static class XmlAndYamlFileInputFilter implements FileBasedIndex.InputFilter { + @Override + public boolean acceptInput(@NotNull VirtualFile file) { + FileType fileType = file.getFileType(); + + // "xsd" and other file types are inside file tye, filter by extension + if (fileType == XmlFileType.INSTANCE) { + String extension = file.getExtension(); + return "xml".equalsIgnoreCase(extension); + } + + return fileType == YAMLFileType.YML; + } + } + + private static class XmlYamlAndPhpFileInputFilter implements FileBasedIndex.InputFilter { + @Override + public boolean acceptInput(@NotNull VirtualFile file) { + FileType fileType = file.getFileType(); + + // "xsd" and other file types are inside file tye, filter by extension + if (fileType == XmlFileType.INSTANCE) { + String extension = file.getExtension(); + return "xml".equalsIgnoreCase(extension); + } + + return fileType == YAMLFileType.YML || fileType == PhpFileType.INSTANCE; + } + } +}