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); } } }