package org.jetbrains.plugins.cucumber.psi.impl;
import com.intellij.lang.ASTNode;
import com.intellij.psi.util.PsiTreeUtil;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.plugins.cucumber.psi.GherkinElementVisitor;
import org.jetbrains.plugins.cucumber.psi.GherkinFeature;
import org.jetbrains.plugins.cucumber.psi.GherkinStepsHolder;
import org.jetbrains.plugins.cucumber.psi.GherkinTokenTypes;
/**
* @author yole
*/
public class GherkinFeatureImpl extends GherkinPsiElementBase implements GherkinFeature {
public GherkinFeatureImpl(@NotNull final ASTNode node) {
super(node);
}
@Override
public String toString() {
return "GherkinFeature:" + getFeatureName();
}
public String getFeatureName() {
ASTNode node = getNode();
final ASTNode firstText = node.findChildByType(GherkinTokenTypes.TEXT);
if (firstText != null) {
return firstText.getText();
}
final GherkinFeatureHeaderImpl header = PsiTreeUtil.getChildOfType(this, GherkinFeatureHeaderImpl.class);
if (header != null) {
return header.getElementText();
}
return getElementText();
}
public GherkinStepsHolder[] getScenarios() {
final GherkinStepsHolder[] children = PsiTreeUtil.getChildrenOfType(this, GherkinStepsHolder.class);
return children == null ? GherkinStepsHolder.EMPTY_ARRAY : children;
}
@Override
protected String getPresentableText() {
return "Feature: " + getFeatureName();
}
protected void acceptGherkin(GherkinElementVisitor gherkinElementVisitor) {
gherkinElementVisitor.visitFeature(this);
}
}