From c129b93ef725d04297099bde1cac1b1420f381a5 Mon Sep 17 00:00:00 2001 From: Daniel Espendiller Date: Sat, 14 Sep 2019 14:16:29 +0200 Subject: [PATCH] optimize Twig "extends" tag indexing performance --- .../indexes/TwigBlockIndexExtension.java | 44 ++++++++++--------- 1 file changed, 23 insertions(+), 21 deletions(-) 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 f7045ae7e..5474b6f32 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 @@ -54,29 +54,31 @@ public DataIndexer, FileContent> getIndexer() { } } - for(TwigExtendsTag extendsTag : PsiTreeUtil.getChildrenOfTypeAsList(psiFile, TwigExtendsTag.class)) { - for (String templateName : TwigUtil.getTwigExtendsTagTemplates(extendsTag)) { - blocks.putIfAbsent("extends", new HashSet<>()); - blocks.get("extends").add(TwigUtil.normalizeTemplateName(templateName)); - } - } - - for(TwigCompositeElement twigCompositeElement: PsiTreeUtil.getChildrenOfTypeAsList(psiFile, TwigCompositeElement.class)) { - if(twigCompositeElement.getNode().getElementType() == TwigElementTypes.TAG) { - twigCompositeElement.acceptChildren(new PsiRecursiveElementWalkingVisitor() { - @Override - 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)) { - blocks.putIfAbsent("use", new HashSet<>()); - blocks.get("use").add(templateName); + for(PsiElement psiElement : PsiTreeUtil.getChildrenOfAnyType(psiFile, TwigExtendsTag.class, TwigCompositeElement.class)) { + if (psiElement instanceof TwigExtendsTag) { + // {% extends 'foo.html.twig' %} + for (String templateName : TwigUtil.getTwigExtendsTagTemplates((TwigExtendsTag) psiElement)) { + blocks.putIfAbsent("extends", new HashSet<>()); + blocks.get("extends").add(TwigUtil.normalizeTemplateName(templateName)); + } + } else if(psiElement instanceof TwigCompositeElement) { + // {% use 'foo.html.twig' %} + if(psiElement.getNode().getElementType() == TwigElementTypes.TAG) { + psiElement.acceptChildren(new PsiRecursiveElementWalkingVisitor() { + @Override + 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)) { + blocks.putIfAbsent("use", new HashSet<>()); + blocks.get("use").add(templateName); + } } - } - super.visitElement(element); - } - }); + super.visitElement(element); + } + }); + } } } }