001/*******************************************************************************
002 * Copyright (c) 2018 Red Hat Inc
003 * All rights reserved. This program and the accompanying materials
004 * are made available under the terms of the Eclipse Public License v1.0
005 * which accompanies this distribution, and is available at
006 * http://www.eclipse.org/legal/epl-v10.html
007 *
008 * Contributors:
009 *     Jens Reimann - initial API and implementation
010 *******************************************************************************/
011package de.dentrassi.varlink.idl.serializer;
012
013import com.google.inject.Inject;
014import de.dentrassi.varlink.idl.services.VarlinkIdlGrammarAccess;
015import java.util.List;
016import org.eclipse.emf.ecore.EObject;
017import org.eclipse.xtext.IGrammarAccess;
018import org.eclipse.xtext.RuleCall;
019import org.eclipse.xtext.nodemodel.INode;
020import org.eclipse.xtext.serializer.analysis.GrammarAlias.AbstractElementAlias;
021import org.eclipse.xtext.serializer.analysis.ISyntacticSequencerPDAProvider.ISynTransition;
022import org.eclipse.xtext.serializer.sequencer.AbstractSyntacticSequencer;
023
024@SuppressWarnings("all")
025public class VarlinkIdlSyntacticSequencer extends AbstractSyntacticSequencer {
026
027        protected VarlinkIdlGrammarAccess grammarAccess;
028        
029        @Inject
030        protected void init(IGrammarAccess access) {
031                grammarAccess = (VarlinkIdlGrammarAccess) access;
032        }
033        
034        @Override
035        protected String getUnassignedRuleCallToken(EObject semanticObject, RuleCall ruleCall, INode node) {
036                return "";
037        }
038        
039        
040        @Override
041        protected void emitUnassignedTokens(EObject semanticObject, ISynTransition transition, INode fromNode, INode toNode) {
042                if (transition.getAmbiguousSyntaxes().isEmpty()) return;
043                List<INode> transitionNodes = collectNodes(fromNode, toNode);
044                for (AbstractElementAlias syntax : transition.getAmbiguousSyntaxes()) {
045                        List<INode> syntaxNodes = getNodesFor(transitionNodes, syntax);
046                        acceptNodes(getLastNavigableState(), syntaxNodes);
047                }
048        }
049
050}