Skip to content

Commit 70f180c

Browse files
authored
Merge pull request #1796 from Haehnchen/feature/twig-extension
Twig icon extends should also support extension point
2 parents 7303e51 + e5ca55f commit 70f180c

File tree

2 files changed

+19
-4
lines changed

2 files changed

+19
-4
lines changed

src/main/java/fr/adrienbrault/idea/symfony2plugin/templating/util/TwigUtil.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -97,7 +97,7 @@ public enum NamespaceType {
9797
"fr.adrienbrault.idea.symfony2plugin.extension.TwigNamespaceExtension"
9898
);
9999

100-
private static final ExtensionPointName<TwigFileUsage> TWIG_FILE_USAGE_EXTENSIONS = new ExtensionPointName<>(
100+
public static final ExtensionPointName<TwigFileUsage> TWIG_FILE_USAGE_EXTENSIONS = new ExtensionPointName<>(
101101
"fr.adrienbrault.idea.symfony2plugin.extension.TwigFileUsage"
102102
);
103103

src/main/java/fr/adrienbrault/idea/symfony2plugin/twig/icon/TwigIconProvider.java

Lines changed: 18 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,13 +4,13 @@
44
import com.intellij.openapi.project.DumbService;
55
import com.intellij.openapi.util.Iconable;
66
import com.intellij.psi.PsiElement;
7-
import com.intellij.psi.util.PsiTreeUtil;
87
import com.intellij.ui.LayeredIcon;
98
import com.jetbrains.twig.TwigFile;
109
import com.jetbrains.twig.elements.TwigExtendsTag;
1110
import fr.adrienbrault.idea.symfony2plugin.Settings;
1211
import fr.adrienbrault.idea.symfony2plugin.Symfony2Icons;
1312
import fr.adrienbrault.idea.symfony2plugin.Symfony2ProjectComponent;
13+
import fr.adrienbrault.idea.symfony2plugin.extension.TwigFileUsage;
1414
import fr.adrienbrault.idea.symfony2plugin.templating.util.TwigUtil;
1515
import icons.TwigIcons;
1616
import org.jetbrains.annotations.NotNull;
@@ -36,8 +36,7 @@ public Icon getIcon(@NotNull PsiElement element, @Iconable.IconFlags int flags)
3636
}
3737

3838
// file provides extends tag, add another layer on top; but put the layer below the previous layer if provided
39-
TwigExtendsTag childOfType = PsiTreeUtil.findChildOfType(element, TwigExtendsTag.class);
40-
if (childOfType != null) {
39+
if (hasFileExtendsTag(element)) {
4140
if (icon == null) {
4241
// we are alone so just place the icon
4342
icon = new LayeredIcon(TwigIcons.TwigFileIcon, Symfony2Icons.TWIG_EXTENDS_FILE);
@@ -52,6 +51,22 @@ public Icon getIcon(@NotNull PsiElement element, @Iconable.IconFlags int flags)
5251
return icon;
5352
}
5453

54+
private boolean hasFileExtendsTag(@NotNull PsiElement element) {
55+
for (PsiElement child : element.getChildren()) {
56+
if (child instanceof TwigExtendsTag) {
57+
return true;
58+
}
59+
60+
for (TwigFileUsage extension : TwigUtil.TWIG_FILE_USAGE_EXTENSIONS.getExtensions()) {
61+
if (extension.isExtendsTemplate(child)) {
62+
return true;
63+
}
64+
}
65+
}
66+
67+
return false;
68+
}
69+
5570
private boolean hasController(@NotNull TwigFile twigFile) {
5671
return TwigUtil.findTwigFileController(twigFile).size() > 0
5772
|| TwigUtil.getTwigFileMethodUsageOnIndex(twigFile).size() > 0;

0 commit comments

Comments
 (0)