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}