package de.sebastianbenz.xgherkin.serializer;
import com.google.inject.Inject;
import de.sebastianbenz.xgherkin.services.GherkinGrammarAccess;
import java.util.List;
import org.eclipse.emf.ecore.EObject;
import org.eclipse.xtext.IGrammarAccess;
import org.eclipse.xtext.RuleCall;
import org.eclipse.xtext.nodemodel.INode;
import org.eclipse.xtext.serializer.analysis.GrammarAlias.AbstractElementAlias;
import org.eclipse.xtext.serializer.analysis.ISyntacticSequencerPDAProvider.ISynTransition;
import org.eclipse.xtext.serializer.sequencer.AbstractSyntacticSequencer;
@SuppressWarnings("all")
public abstract class AbstractGherkinSyntacticSequencer extends AbstractSyntacticSequencer {
protected GherkinGrammarAccess grammarAccess;
@Inject
protected void init(IGrammarAccess access) {
grammarAccess = (GherkinGrammarAccess) access;
}
@Override
protected String getUnassignedRuleCallToken(EObject semanticObject, RuleCall ruleCall, INode node) {
if(ruleCall.getRule() == grammarAccess.getEXAMPLE_HEADINGRule())
return getEXAMPLE_HEADINGToken(semanticObject, ruleCall, node);
else if(ruleCall.getRule() == grammarAccess.getEXAMPLE_ROW_ENDRule())
return getEXAMPLE_ROW_ENDToken(semanticObject, ruleCall, node);
return "";
}
/**
* terminal EXAMPLE_HEADING: 'Examples' SPACES ':' SPACES '\r'? '\n';
*/
protected String getEXAMPLE_HEADINGToken(EObject semanticObject, RuleCall ruleCall, INode node) {
if (node != null)
return getTokenText(node);
return "Examples:\n";
}
/**
* terminal EXAMPLE_ROW_END: '|' SPACES NL;
*/
protected String getEXAMPLE_ROW_ENDToken(EObject semanticObject, RuleCall ruleCall, INode node) {
if (node != null)
return getTokenText(node);
return "|";
}
@Override
protected void emitUnassignedTokens(EObject semanticObject, ISynTransition transition, INode fromNode, INode toNode) {
if (transition.getAmbiguousSyntaxes().isEmpty()) return;
List<INode> transitionNodes = collectNodes(fromNode, toNode);
for (AbstractElementAlias syntax : transition.getAmbiguousSyntaxes()) {
List<INode> syntaxNodes = getNodesFor(transitionNodes, syntax);
acceptNodes(getLastNavigableState(), syntaxNodes);
}
}
}