From e5ca55f0f851cb853e1dcacf6ed75fd15af73aa7 Mon Sep 17 00:00:00 2001 From: Daniel Espendiller Date: Wed, 6 Apr 2022 17:09:20 +0200 Subject: [PATCH] Twig icon extends should also support extension point --- .../templating/util/TwigUtil.java | 2 +- .../twig/icon/TwigIconProvider.java | 21 ++++++++++++++++--- 2 files changed, 19 insertions(+), 4 deletions(-) diff --git a/src/main/java/fr/adrienbrault/idea/symfony2plugin/templating/util/TwigUtil.java b/src/main/java/fr/adrienbrault/idea/symfony2plugin/templating/util/TwigUtil.java index d6d174721..ab6167140 100644 --- a/src/main/java/fr/adrienbrault/idea/symfony2plugin/templating/util/TwigUtil.java +++ b/src/main/java/fr/adrienbrault/idea/symfony2plugin/templating/util/TwigUtil.java @@ -97,7 +97,7 @@ public enum NamespaceType { "fr.adrienbrault.idea.symfony2plugin.extension.TwigNamespaceExtension" ); - private static final ExtensionPointName TWIG_FILE_USAGE_EXTENSIONS = new ExtensionPointName<>( + public static final ExtensionPointName TWIG_FILE_USAGE_EXTENSIONS = new ExtensionPointName<>( "fr.adrienbrault.idea.symfony2plugin.extension.TwigFileUsage" ); diff --git a/src/main/java/fr/adrienbrault/idea/symfony2plugin/twig/icon/TwigIconProvider.java b/src/main/java/fr/adrienbrault/idea/symfony2plugin/twig/icon/TwigIconProvider.java index 124697fee..0dc8e595a 100644 --- a/src/main/java/fr/adrienbrault/idea/symfony2plugin/twig/icon/TwigIconProvider.java +++ b/src/main/java/fr/adrienbrault/idea/symfony2plugin/twig/icon/TwigIconProvider.java @@ -4,13 +4,13 @@ import com.intellij.openapi.project.DumbService; import com.intellij.openapi.util.Iconable; import com.intellij.psi.PsiElement; -import com.intellij.psi.util.PsiTreeUtil; import com.intellij.ui.LayeredIcon; import com.jetbrains.twig.TwigFile; import com.jetbrains.twig.elements.TwigExtendsTag; import fr.adrienbrault.idea.symfony2plugin.Settings; import fr.adrienbrault.idea.symfony2plugin.Symfony2Icons; import fr.adrienbrault.idea.symfony2plugin.Symfony2ProjectComponent; +import fr.adrienbrault.idea.symfony2plugin.extension.TwigFileUsage; import fr.adrienbrault.idea.symfony2plugin.templating.util.TwigUtil; import icons.TwigIcons; import org.jetbrains.annotations.NotNull; @@ -36,8 +36,7 @@ public Icon getIcon(@NotNull PsiElement element, @Iconable.IconFlags int flags) } // file provides extends tag, add another layer on top; but put the layer below the previous layer if provided - TwigExtendsTag childOfType = PsiTreeUtil.findChildOfType(element, TwigExtendsTag.class); - if (childOfType != null) { + if (hasFileExtendsTag(element)) { if (icon == null) { // we are alone so just place the icon icon = new LayeredIcon(TwigIcons.TwigFileIcon, Symfony2Icons.TWIG_EXTENDS_FILE); @@ -52,6 +51,22 @@ public Icon getIcon(@NotNull PsiElement element, @Iconable.IconFlags int flags) return icon; } + private boolean hasFileExtendsTag(@NotNull PsiElement element) { + for (PsiElement child : element.getChildren()) { + if (child instanceof TwigExtendsTag) { + return true; + } + + for (TwigFileUsage extension : TwigUtil.TWIG_FILE_USAGE_EXTENSIONS.getExtensions()) { + if (extension.isExtendsTemplate(child)) { + return true; + } + } + } + + return false; + } + private boolean hasController(@NotNull TwigFile twigFile) { return TwigUtil.findTwigFileController(twigFile).size() > 0 || TwigUtil.getTwigFileMethodUsageOnIndex(twigFile).size() > 0;