package fr.adrienbrault.idea.symfony2plugin.templating;
import com.intellij.openapi.util.Iconable;
import com.intellij.psi.PsiElement;
import com.intellij.psi.PsiFile;
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.Symfony2Icons;
import fr.adrienbrault.idea.symfony2plugin.TwigHelper;
import fr.adrienbrault.idea.symfony2plugin.templating.util.TwigUtil;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import javax.swing.*;
import java.util.Collection;
/**
* @author Daniel Espendiller <daniel@espendiller.net>
*/
public class TwigFileIconProvider extends com.intellij.ide.IconProvider {
@Nullable
@Override
public Icon getIcon(@NotNull PsiElement psiElement, @Iconable.IconFlags int i) {
if (!(psiElement instanceof TwigFile)) {
return null;
}
TwigExtendsTag childOfType = PsiTreeUtil.findChildOfType(psiElement, TwigExtendsTag.class);
if(childOfType != null) {
return wrapIcon(((TwigFile) psiElement), Symfony2Icons.TWIG_IMPLEMENTS_FILE);
}
Collection<PsiFile> twigChild = TwigUtil.getTemplateFileReferences((TwigFile) psiElement, TwigHelper.getTemplateMap(psiElement.getProject(), true, false));
if(twigChild.size() > 0) {
return wrapIcon((TwigFile) psiElement, Symfony2Icons.TWIG_EXTENDS_FILE);
}
return null;
}
@Nullable
private Icon wrapIcon(@NotNull TwigFile psiElement, @NotNull Icon twigExtendsFile) {
Icon icon = psiElement.getFileType().getIcon();
if (icon == null) {
return null;
}
LayeredIcon rowIcon = new LayeredIcon(2);
rowIcon.setIcon(icon, 0);
rowIcon.setIcon(twigExtendsFile, 1, SwingConstants.NORTH_EAST);
return rowIcon;
}
}