@@ -2807,29 +2807,38 @@ public static Collection<LookupElement> getBlockLookupElements(@NotNull Project
28072807 return lookupElements ;
28082808 }
28092809
2810- public static void visitTemplateExtends (@ NotNull TwigFile twigFile ,@ NotNull Consumer <Pair <String , PsiElement >> consumer ) {
2811- twigFile .acceptChildren (new PsiRecursiveElementWalkingVisitor () {
2812- @ Override
2813- public void visitElement (PsiElement element ) {
2814- if (element instanceof TwigExtendsTag ) {
2815- for (String s : TwigUtil .getTwigExtendsTagTemplates ((TwigExtendsTag ) element )) {
2816- consumer .consume (Pair .create (TwigUtil .normalizeTemplateName (s ), element ));
2817- }
2810+ public static void visitTemplateExtends (@ NotNull TwigFile twigFile , @ NotNull Consumer <Pair <String , PsiElement >> consumer ) {
2811+ for (PsiElement element : twigFile .getChildren ()) {
2812+ // "extends" must not be nested, support 1 level at least for invalid files
2813+ if (element instanceof TwigBlockStatement || element .getNode ().getElementType () == TwigElementTypes .IF_STATEMENT ) {
2814+ for (PsiElement child : element .getChildren ()) {
2815+ visitTemplateExtendsConsumer (child , consumer );
28182816 }
28192817
2820- for (TwigFileUsage extension : TWIG_FILE_USAGE_EXTENSIONS .getExtensions ()) {
2821- if (!extension .isExtendsTemplate (element )) {
2822- continue ;
2823- }
2818+ continue ;
2819+ }
28242820
2825- for (String template : extension .getExtendsTemplate (element )) {
2826- consumer .consume (Pair .create (TwigUtil .normalizeTemplateName (template ), element ));
2827- }
2828- }
2821+ visitTemplateExtendsConsumer (element , consumer );
2822+ }
2823+ }
28292824
2830- super .visitElement (element );
2825+ private static void visitTemplateExtendsConsumer (@ NotNull PsiElement element , @ NotNull Consumer <Pair <String , PsiElement >> consumer ) {
2826+ if (element instanceof TwigExtendsTag ) {
2827+ for (String s : TwigUtil .getTwigExtendsTagTemplates ((TwigExtendsTag ) element )) {
2828+ String first = TwigUtil .normalizeTemplateName (s );
2829+ consumer .consume (new Pair <>(first , element ));
28312830 }
2832- });
2831+ }
2832+
2833+ for (TwigFileUsage extension : TWIG_FILE_USAGE_EXTENSIONS .getExtensions ()) {
2834+ if (!extension .isExtendsTemplate (element )) {
2835+ continue ;
2836+ }
2837+
2838+ for (String template : extension .getExtendsTemplate (element )) {
2839+ consumer .consume (Pair .create (TwigUtil .normalizeTemplateName (template ), element ));
2840+ }
2841+ }
28332842 }
28342843
28352844 public static List <String > getIncludeTemplateUsageAsOrderedList (@ NotNull Project project ) {
0 commit comments