package at.bestsolution.efxclipse.tooling.css.serializer;
import at.bestsolution.efxclipse.tooling.css.cssDsl.CssDslPackage;
import at.bestsolution.efxclipse.tooling.css.cssDsl.URLType;
import at.bestsolution.efxclipse.tooling.css.cssDsl.charset;
import at.bestsolution.efxclipse.tooling.css.cssDsl.css_generic_declaration;
import at.bestsolution.efxclipse.tooling.css.cssDsl.expr;
import at.bestsolution.efxclipse.tooling.css.cssDsl.function;
import at.bestsolution.efxclipse.tooling.css.cssDsl.importExpression;
import at.bestsolution.efxclipse.tooling.css.cssDsl.media;
import at.bestsolution.efxclipse.tooling.css.cssDsl.page;
import at.bestsolution.efxclipse.tooling.css.cssDsl.ruleset;
import at.bestsolution.efxclipse.tooling.css.cssDsl.selector;
import at.bestsolution.efxclipse.tooling.css.cssDsl.simple_selector;
import at.bestsolution.efxclipse.tooling.css.cssDsl.stylesheet;
import at.bestsolution.efxclipse.tooling.css.cssDsl.sub_selector;
import at.bestsolution.efxclipse.tooling.css.cssDsl.term;
import at.bestsolution.efxclipse.tooling.css.cssDsl.termGroup;
import at.bestsolution.efxclipse.tooling.css.services.CssDslGrammarAccess;
import com.google.inject.Inject;
import com.google.inject.Provider;
import org.eclipse.emf.ecore.EObject;
import org.eclipse.xtext.serializer.acceptor.ISemanticSequenceAcceptor;
import org.eclipse.xtext.serializer.acceptor.SequenceFeeder;
import org.eclipse.xtext.serializer.diagnostic.ISemanticSequencerDiagnosticProvider;
import org.eclipse.xtext.serializer.diagnostic.ISerializationDiagnostic.Acceptor;
import org.eclipse.xtext.serializer.sequencer.AbstractSemanticSequencer;
import org.eclipse.xtext.serializer.sequencer.GenericSequencer;
import org.eclipse.xtext.serializer.sequencer.ISemanticNodeProvider.INodesForEObjectProvider;
import org.eclipse.xtext.serializer.sequencer.ISemanticSequencer;
import org.eclipse.xtext.serializer.sequencer.ITransientValueService;
import org.eclipse.xtext.serializer.sequencer.ITransientValueService.ValueTransient;
@SuppressWarnings("all")
public class AbstractCssDslSemanticSequencer extends AbstractSemanticSequencer {
@Inject
protected CssDslGrammarAccess grammarAccess;
@Inject
protected ISemanticSequencerDiagnosticProvider diagnosticProvider;
@Inject
protected ITransientValueService transientValues;
@Inject
@GenericSequencer
protected Provider<ISemanticSequencer> genericSequencerProvider;
protected ISemanticSequencer genericSequencer;
@Override
public void init(ISemanticSequencer sequencer, ISemanticSequenceAcceptor sequenceAcceptor, Acceptor errorAcceptor) {
super.init(sequencer, sequenceAcceptor, errorAcceptor);
this.genericSequencer = genericSequencerProvider.get();
this.genericSequencer.init(sequencer, sequenceAcceptor, errorAcceptor);
}
public void createSequence(EObject context, EObject semanticObject) {
if(semanticObject.eClass().getEPackage() == CssDslPackage.eINSTANCE) switch(semanticObject.eClass().getClassifierID()) {
case CssDslPackage.URL_TYPE:
if(context == grammarAccess.getURLTypeRule()) {
sequence_URLType(context, (URLType) semanticObject);
return;
}
else if(context == grammarAccess.getImportExpressionRule()) {
sequence_importExpression(context, (URLType) semanticObject);
return;
}
else break;
case CssDslPackage.CHARSET:
if(context == grammarAccess.getCharsetRule()) {
sequence_charset(context, (charset) semanticObject);
return;
}
else break;
case CssDslPackage.CSS_GENERIC_DECLARATION:
if(context == grammarAccess.getCss_declarationRule() ||
context == grammarAccess.getCss_generic_declarationRule()) {
sequence_css_generic_declaration(context, (css_generic_declaration) semanticObject);
return;
}
else break;
case CssDslPackage.EXPR:
if(context == grammarAccess.getExprRule()) {
sequence_expr(context, (expr) semanticObject);
return;
}
else break;
case CssDslPackage.FUNCTION:
if(context == grammarAccess.getFunctionRule()) {
sequence_function(context, (function) semanticObject);
return;
}
else break;
case CssDslPackage.IMPORT_EXPRESSION:
if(context == grammarAccess.getImportExpressionRule()) {
sequence_importExpression(context, (importExpression) semanticObject);
return;
}
else break;
case CssDslPackage.MEDIA:
if(context == grammarAccess.getMediaRule()) {
sequence_media(context, (media) semanticObject);
return;
}
else break;
case CssDslPackage.PAGE:
if(context == grammarAccess.getPageRule()) {
sequence_page(context, (page) semanticObject);
return;
}
else break;
case CssDslPackage.RULESET:
if(context == grammarAccess.getRulesetRule()) {
sequence_ruleset(context, (ruleset) semanticObject);
return;
}
else break;
case CssDslPackage.SELECTOR:
if(context == grammarAccess.getSelectorRule()) {
sequence_selector(context, (selector) semanticObject);
return;
}
else break;
case CssDslPackage.SIMPLE_SELECTOR:
if(context == grammarAccess.getSimple_selectorRule()) {
sequence_simple_selector(context, (simple_selector) semanticObject);
return;
}
else break;
case CssDslPackage.STYLESHEET:
if(context == grammarAccess.getStylesheetRule()) {
sequence_stylesheet(context, (stylesheet) semanticObject);
return;
}
else break;
case CssDslPackage.SUB_SELECTOR:
if(context == grammarAccess.getSub_selectorRule()) {
sequence_sub_selector(context, (sub_selector) semanticObject);
return;
}
else break;
case CssDslPackage.TERM:
if(context == grammarAccess.getTermRule()) {
sequence_term(context, (term) semanticObject);
return;
}
else break;
case CssDslPackage.TERM_GROUP:
if(context == grammarAccess.getTermGroupRule()) {
sequence_termGroup(context, (termGroup) semanticObject);
return;
}
else break;
}
if (errorAcceptor != null) errorAcceptor.accept(diagnosticProvider.createInvalidContextOrTypeDiagnostic(semanticObject, context));
}
/**
* Constraint:
* url=STRING
*/
protected void sequence_URLType(EObject context, URLType semanticObject) {
genericSequencer.createSequence(context, semanticObject);
}
/**
* Constraint:
* charset=STRING
*/
protected void sequence_charset(EObject context, charset semanticObject) {
if(errorAcceptor != null) {
if(transientValues.isValueTransient(semanticObject, CssDslPackage.Literals.CHARSET__CHARSET) == ValueTransient.YES)
errorAcceptor.accept(diagnosticProvider.createFeatureValueMissing(semanticObject, CssDslPackage.Literals.CHARSET__CHARSET));
}
INodesForEObjectProvider nodes = createNodeProvider(semanticObject);
SequenceFeeder feeder = createSequencerFeeder(semanticObject, nodes);
feeder.accept(grammarAccess.getCharsetAccess().getCharsetSTRINGTerminalRuleCall_1_0(), semanticObject.getCharset());
feeder.finish();
}
/**
* Constraint:
* (property=css_property expression=expr prio=css_prio?)
*/
protected void sequence_css_generic_declaration(EObject context, css_generic_declaration semanticObject) {
genericSequencer.createSequence(context, semanticObject);
}
/**
* Constraint:
* (termGroups+=termGroup termGroups+=termGroup*)
*/
protected void sequence_expr(EObject context, expr semanticObject) {
genericSequencer.createSequence(context, semanticObject);
}
/**
* Constraint:
* (name=IDENT expression=expr)
*/
protected void sequence_function(EObject context, function semanticObject) {
if(errorAcceptor != null) {
if(transientValues.isValueTransient(semanticObject, CssDslPackage.Literals.FUNCTION__NAME) == ValueTransient.YES)
errorAcceptor.accept(diagnosticProvider.createFeatureValueMissing(semanticObject, CssDslPackage.Literals.FUNCTION__NAME));
if(transientValues.isValueTransient(semanticObject, CssDslPackage.Literals.FUNCTION__EXPRESSION) == ValueTransient.YES)
errorAcceptor.accept(diagnosticProvider.createFeatureValueMissing(semanticObject, CssDslPackage.Literals.FUNCTION__EXPRESSION));
}
INodesForEObjectProvider nodes = createNodeProvider(semanticObject);
SequenceFeeder feeder = createSequencerFeeder(semanticObject, nodes);
feeder.accept(grammarAccess.getFunctionAccess().getNameIDENTTerminalRuleCall_1_0(), semanticObject.getName());
feeder.accept(grammarAccess.getFunctionAccess().getExpressionExprParserRuleCall_4_0(), semanticObject.getExpression());
feeder.finish();
}
/**
* Constraint:
* (url=STRING mediaList=media_list?)
*/
protected void sequence_importExpression(EObject context, URLType semanticObject) {
genericSequencer.createSequence(context, semanticObject);
}
/**
* Constraint:
* value=STRING
*/
protected void sequence_importExpression(EObject context, importExpression semanticObject) {
if(errorAcceptor != null) {
if(transientValues.isValueTransient(semanticObject, CssDslPackage.Literals.IMPORT_EXPRESSION__VALUE) == ValueTransient.YES)
errorAcceptor.accept(diagnosticProvider.createFeatureValueMissing(semanticObject, CssDslPackage.Literals.IMPORT_EXPRESSION__VALUE));
}
INodesForEObjectProvider nodes = createNodeProvider(semanticObject);
SequenceFeeder feeder = createSequencerFeeder(semanticObject, nodes);
feeder.accept(grammarAccess.getImportExpressionAccess().getValueSTRINGTerminalRuleCall_0_1_0(), semanticObject.getValue());
feeder.finish();
}
/**
* Constraint:
* (medialist=media_list rulesets+=ruleset*)
*/
protected void sequence_media(EObject context, media semanticObject) {
genericSequencer.createSequence(context, semanticObject);
}
/**
* Constraint:
* (pseudoPage=pseudo_page? declarations+=css_generic_declaration? declarations+=css_generic_declaration*)
*/
protected void sequence_page(EObject context, page semanticObject) {
genericSequencer.createSequence(context, semanticObject);
}
/**
* Constraint:
* (selectors+=selector selectors+=selector* declarations+=css_declaration*)
*/
protected void sequence_ruleset(EObject context, ruleset semanticObject) {
genericSequencer.createSequence(context, semanticObject);
}
/**
* Constraint:
* (simpleselectors+=simple_selector ((combinator=combinator selector=selector) | (combinator=combinator? selector=selector)?)?)
*/
protected void sequence_selector(EObject context, selector semanticObject) {
genericSequencer.createSequence(context, semanticObject);
}
/**
* Constraint:
* (((element=element_name | universal=css_universal) subSelectors+=sub_selector*) | subSelectors+=sub_selector+)
*/
protected void sequence_simple_selector(EObject context, simple_selector semanticObject) {
genericSequencer.createSequence(context, semanticObject);
}
/**
* Constraint:
* (charset=charset? imports+=importExpression* (ruleset+=ruleset | media+=media | page+=page)*)
*/
protected void sequence_stylesheet(EObject context, stylesheet semanticObject) {
genericSequencer.createSequence(context, semanticObject);
}
/**
* Constraint:
* (id=css_id | class=css_class | attrib=css_attrib | pseudoclass=css_pseudo | negotation=css_negation)
*/
protected void sequence_sub_selector(EObject context, sub_selector semanticObject) {
genericSequencer.createSequence(context, semanticObject);
}
/**
* Constraint:
* terms+=term+
*/
protected void sequence_termGroup(EObject context, termGroup semanticObject) {
genericSequencer.createSequence(context, semanticObject);
}
/**
* Constraint:
* (
* number=numberTerm |
* stringValue=STRING |
* identifier=css_property |
* url=URLType |
* function=function |
* hexColor=HexColor
* )
*/
protected void sequence_term(EObject context, term semanticObject) {
genericSequencer.createSequence(context, semanticObject);
}
}