package org.jetbrains.plugins.cucumber.psi.structure; import com.intellij.ide.structureView.StructureViewTreeElement; import com.intellij.ide.structureView.impl.common.PsiTreeElementBase; import com.intellij.navigation.NavigationItem; import com.intellij.psi.PsiElement; import org.jetbrains.annotations.NotNull; import org.jetbrains.plugins.cucumber.psi.*; import org.jetbrains.plugins.cucumber.psi.impl.GherkinFeatureHeaderImpl; import org.jetbrains.plugins.cucumber.psi.impl.GherkinTableImpl; import org.jetbrains.plugins.cucumber.psi.impl.GherkinTagImpl; import javax.swing.*; import java.util.ArrayList; import java.util.Collection; import java.util.List; /** * @author yole */ public class GherkinStructureViewElement extends PsiTreeElementBase<PsiElement> { protected GherkinStructureViewElement(PsiElement psiElement) { super(psiElement); } @NotNull public Collection<StructureViewTreeElement> getChildrenBase() { List<StructureViewTreeElement> result = new ArrayList<>(); for (PsiElement element : getElement().getChildren()) { if (element instanceof GherkinPsiElement && !(element instanceof GherkinFeatureHeaderImpl) && !(element instanceof GherkinTableImpl) && !(element instanceof GherkinTagImpl) && !(element instanceof GherkinPystring)) { result.add(new GherkinStructureViewElement(element)); } } return result; } @Override public Icon getIcon(boolean open) { final PsiElement element = getElement(); if (element instanceof GherkinFeature || element instanceof GherkinStepsHolder) { return open ? icons.CucumberIcons.Steps_group_opened : icons.CucumberIcons.Steps_group_closed; } if (element instanceof GherkinStep) { return icons.CucumberIcons.Cucumber; } return null; } public String getPresentableText() { return ((NavigationItem) getElement()).getPresentation().getPresentableText(); } }