package org.jetbrains.plugins.cucumber.psi.impl;
import com.intellij.lang.ASTNode;
import com.intellij.psi.PsiElement;
import com.intellij.psi.PsiReference;
import com.intellij.psi.impl.source.tree.LeafPsiElement;
import com.intellij.psi.search.LocalSearchScope;
import com.intellij.psi.search.SearchScope;
import com.intellij.psi.util.PsiTreeUtil;
import com.intellij.util.IncorrectOperationException;
import org.jetbrains.annotations.NonNls;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.plugins.cucumber.psi.GherkinElementFactory;
import org.jetbrains.plugins.cucumber.psi.GherkinElementVisitor;
import org.jetbrains.plugins.cucumber.psi.GherkinStepParameter;
public class GherkinStepParameterImpl extends GherkinPsiElementBase implements GherkinStepParameter {
public GherkinStepParameterImpl(@NotNull final ASTNode node) {
super(node);
}
@Override
protected void acceptGherkin(GherkinElementVisitor gherkinElementVisitor) {
gherkinElementVisitor.visitStepParameter(this);
}
@Override
public String toString() {
return "GherkinStepParameter:" + getText();
}
@Override
public PsiElement setName(@NonNls @NotNull String name) throws IncorrectOperationException {
final LeafPsiElement content = PsiTreeUtil.getChildOfType(this, LeafPsiElement.class);
PsiElement[] elements = GherkinElementFactory.getTopLevelElements(getProject(), name);
getNode().replaceChild(content, elements[0].getNode());
return this;
}
@Override
public PsiReference getReference() {
return new GherkinStepParameterReference(this);
}
@Override
public String getName() {
return getText();
}
@Override
public PsiElement getNameIdentifier() {
return this;
}
@NotNull
@Override
public SearchScope getUseScope() {
return new LocalSearchScope(getContainingFile());
}
}