package org.eclipse.xtext.example.arithmetics.serializer;
import com.google.inject.Inject;
import com.google.inject.Provider;
import org.eclipse.emf.ecore.EObject;
import org.eclipse.xtext.example.arithmetics.arithmetics.ArithmeticsPackage;
import org.eclipse.xtext.example.arithmetics.arithmetics.DeclaredParameter;
import org.eclipse.xtext.example.arithmetics.arithmetics.Definition;
import org.eclipse.xtext.example.arithmetics.arithmetics.Div;
import org.eclipse.xtext.example.arithmetics.arithmetics.Evaluation;
import org.eclipse.xtext.example.arithmetics.arithmetics.FunctionCall;
import org.eclipse.xtext.example.arithmetics.arithmetics.Import;
import org.eclipse.xtext.example.arithmetics.arithmetics.Minus;
import org.eclipse.xtext.example.arithmetics.arithmetics.Module;
import org.eclipse.xtext.example.arithmetics.arithmetics.Multi;
import org.eclipse.xtext.example.arithmetics.arithmetics.NumberLiteral;
import org.eclipse.xtext.example.arithmetics.arithmetics.Plus;
import org.eclipse.xtext.example.arithmetics.services.ArithmeticsGrammarAccess;
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("restriction")
public class AbstractArithmeticsSemanticSequencer extends AbstractSemanticSequencer {
@Inject
protected ArithmeticsGrammarAccess 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() == ArithmeticsPackage.eINSTANCE) switch(semanticObject.eClass().getClassifierID()) {
case ArithmeticsPackage.DECLARED_PARAMETER:
if(context == grammarAccess.getAbstractDefinitionRule() ||
context == grammarAccess.getDeclaredParameterRule()) {
sequence_DeclaredParameter(context, (DeclaredParameter) semanticObject);
return;
}
else break;
case ArithmeticsPackage.DEFINITION:
if(context == grammarAccess.getAbstractDefinitionRule() ||
context == grammarAccess.getDefinitionRule() ||
context == grammarAccess.getStatementRule()) {
sequence_Definition(context, (Definition) semanticObject);
return;
}
else break;
case ArithmeticsPackage.DIV:
if(context == grammarAccess.getAdditionRule() ||
context == grammarAccess.getAdditionAccess().getMinusLeftAction_1_0_1_0() ||
context == grammarAccess.getAdditionAccess().getPlusLeftAction_1_0_0_0() ||
context == grammarAccess.getExpressionRule() ||
context == grammarAccess.getMultiplicationRule() ||
context == grammarAccess.getMultiplicationAccess().getDivLeftAction_1_0_1_0() ||
context == grammarAccess.getMultiplicationAccess().getMultiLeftAction_1_0_0_0() ||
context == grammarAccess.getPrimaryExpressionRule()) {
sequence_Multiplication(context, (Div) semanticObject);
return;
}
else break;
case ArithmeticsPackage.EVALUATION:
if(context == grammarAccess.getEvaluationRule() ||
context == grammarAccess.getStatementRule()) {
sequence_Evaluation(context, (Evaluation) semanticObject);
return;
}
else break;
case ArithmeticsPackage.FUNCTION_CALL:
if(context == grammarAccess.getAdditionRule() ||
context == grammarAccess.getAdditionAccess().getMinusLeftAction_1_0_1_0() ||
context == grammarAccess.getAdditionAccess().getPlusLeftAction_1_0_0_0() ||
context == grammarAccess.getExpressionRule() ||
context == grammarAccess.getMultiplicationRule() ||
context == grammarAccess.getMultiplicationAccess().getDivLeftAction_1_0_1_0() ||
context == grammarAccess.getMultiplicationAccess().getMultiLeftAction_1_0_0_0() ||
context == grammarAccess.getPrimaryExpressionRule()) {
sequence_PrimaryExpression(context, (FunctionCall) semanticObject);
return;
}
else break;
case ArithmeticsPackage.IMPORT:
if(context == grammarAccess.getImportRule()) {
sequence_Import(context, (Import) semanticObject);
return;
}
else break;
case ArithmeticsPackage.MINUS:
if(context == grammarAccess.getAdditionRule() ||
context == grammarAccess.getAdditionAccess().getMinusLeftAction_1_0_1_0() ||
context == grammarAccess.getAdditionAccess().getPlusLeftAction_1_0_0_0() ||
context == grammarAccess.getExpressionRule() ||
context == grammarAccess.getMultiplicationRule() ||
context == grammarAccess.getMultiplicationAccess().getDivLeftAction_1_0_1_0() ||
context == grammarAccess.getMultiplicationAccess().getMultiLeftAction_1_0_0_0() ||
context == grammarAccess.getPrimaryExpressionRule()) {
sequence_Addition(context, (Minus) semanticObject);
return;
}
else break;
case ArithmeticsPackage.MODULE:
if(context == grammarAccess.getModuleRule()) {
sequence_Module(context, (Module) semanticObject);
return;
}
else break;
case ArithmeticsPackage.MULTI:
if(context == grammarAccess.getAdditionRule() ||
context == grammarAccess.getAdditionAccess().getMinusLeftAction_1_0_1_0() ||
context == grammarAccess.getAdditionAccess().getPlusLeftAction_1_0_0_0() ||
context == grammarAccess.getExpressionRule() ||
context == grammarAccess.getMultiplicationRule() ||
context == grammarAccess.getMultiplicationAccess().getDivLeftAction_1_0_1_0() ||
context == grammarAccess.getMultiplicationAccess().getMultiLeftAction_1_0_0_0() ||
context == grammarAccess.getPrimaryExpressionRule()) {
sequence_Multiplication(context, (Multi) semanticObject);
return;
}
else break;
case ArithmeticsPackage.NUMBER_LITERAL:
if(context == grammarAccess.getAdditionRule() ||
context == grammarAccess.getAdditionAccess().getMinusLeftAction_1_0_1_0() ||
context == grammarAccess.getAdditionAccess().getPlusLeftAction_1_0_0_0() ||
context == grammarAccess.getExpressionRule() ||
context == grammarAccess.getMultiplicationRule() ||
context == grammarAccess.getMultiplicationAccess().getDivLeftAction_1_0_1_0() ||
context == grammarAccess.getMultiplicationAccess().getMultiLeftAction_1_0_0_0() ||
context == grammarAccess.getPrimaryExpressionRule()) {
sequence_PrimaryExpression(context, (NumberLiteral) semanticObject);
return;
}
else break;
case ArithmeticsPackage.PLUS:
if(context == grammarAccess.getAdditionRule() ||
context == grammarAccess.getAdditionAccess().getMinusLeftAction_1_0_1_0() ||
context == grammarAccess.getAdditionAccess().getPlusLeftAction_1_0_0_0() ||
context == grammarAccess.getExpressionRule() ||
context == grammarAccess.getMultiplicationRule() ||
context == grammarAccess.getMultiplicationAccess().getDivLeftAction_1_0_1_0() ||
context == grammarAccess.getMultiplicationAccess().getMultiLeftAction_1_0_0_0() ||
context == grammarAccess.getPrimaryExpressionRule()) {
sequence_Addition(context, (Plus) semanticObject);
return;
}
else break;
}
if (errorAcceptor != null) errorAcceptor.accept(diagnosticProvider.createInvalidContextOrTypeDiagnostic(semanticObject, context));
}
/**
* Constraint:
* (left=Addition_Minus_1_0_1_0 right=Multiplication)
*/
protected void sequence_Addition(EObject context, Minus semanticObject) {
if(errorAcceptor != null) {
if(transientValues.isValueTransient(semanticObject, ArithmeticsPackage.Literals.MINUS__LEFT) == ValueTransient.YES)
errorAcceptor.accept(diagnosticProvider.createFeatureValueMissing(semanticObject, ArithmeticsPackage.Literals.MINUS__LEFT));
if(transientValues.isValueTransient(semanticObject, ArithmeticsPackage.Literals.MINUS__RIGHT) == ValueTransient.YES)
errorAcceptor.accept(diagnosticProvider.createFeatureValueMissing(semanticObject, ArithmeticsPackage.Literals.MINUS__RIGHT));
}
INodesForEObjectProvider nodes = createNodeProvider(semanticObject);
SequenceFeeder feeder = createSequencerFeeder(semanticObject, nodes);
feeder.accept(grammarAccess.getAdditionAccess().getMinusLeftAction_1_0_1_0(), semanticObject.getLeft());
feeder.accept(grammarAccess.getAdditionAccess().getRightMultiplicationParserRuleCall_1_1_0(), semanticObject.getRight());
feeder.finish();
}
/**
* Constraint:
* (left=Addition_Plus_1_0_0_0 right=Multiplication)
*/
protected void sequence_Addition(EObject context, Plus semanticObject) {
if(errorAcceptor != null) {
if(transientValues.isValueTransient(semanticObject, ArithmeticsPackage.Literals.PLUS__LEFT) == ValueTransient.YES)
errorAcceptor.accept(diagnosticProvider.createFeatureValueMissing(semanticObject, ArithmeticsPackage.Literals.PLUS__LEFT));
if(transientValues.isValueTransient(semanticObject, ArithmeticsPackage.Literals.PLUS__RIGHT) == ValueTransient.YES)
errorAcceptor.accept(diagnosticProvider.createFeatureValueMissing(semanticObject, ArithmeticsPackage.Literals.PLUS__RIGHT));
}
INodesForEObjectProvider nodes = createNodeProvider(semanticObject);
SequenceFeeder feeder = createSequencerFeeder(semanticObject, nodes);
feeder.accept(grammarAccess.getAdditionAccess().getPlusLeftAction_1_0_0_0(), semanticObject.getLeft());
feeder.accept(grammarAccess.getAdditionAccess().getRightMultiplicationParserRuleCall_1_1_0(), semanticObject.getRight());
feeder.finish();
}
/**
* Constraint:
* name=ID
*/
protected void sequence_DeclaredParameter(EObject context, DeclaredParameter semanticObject) {
if(errorAcceptor != null) {
if(transientValues.isValueTransient(semanticObject, ArithmeticsPackage.Literals.ABSTRACT_DEFINITION__NAME) == ValueTransient.YES)
errorAcceptor.accept(diagnosticProvider.createFeatureValueMissing(semanticObject, ArithmeticsPackage.Literals.ABSTRACT_DEFINITION__NAME));
}
INodesForEObjectProvider nodes = createNodeProvider(semanticObject);
SequenceFeeder feeder = createSequencerFeeder(semanticObject, nodes);
feeder.accept(grammarAccess.getDeclaredParameterAccess().getNameIDTerminalRuleCall_0(), semanticObject.getName());
feeder.finish();
}
/**
* Constraint:
* (name=ID (args+=DeclaredParameter args+=DeclaredParameter*)? expr=Expression)
*/
protected void sequence_Definition(EObject context, Definition semanticObject) {
genericSequencer.createSequence(context, semanticObject);
}
/**
* Constraint:
* expression=Expression
*/
protected void sequence_Evaluation(EObject context, Evaluation semanticObject) {
if(errorAcceptor != null) {
if(transientValues.isValueTransient(semanticObject, ArithmeticsPackage.Literals.EVALUATION__EXPRESSION) == ValueTransient.YES)
errorAcceptor.accept(diagnosticProvider.createFeatureValueMissing(semanticObject, ArithmeticsPackage.Literals.EVALUATION__EXPRESSION));
}
INodesForEObjectProvider nodes = createNodeProvider(semanticObject);
SequenceFeeder feeder = createSequencerFeeder(semanticObject, nodes);
feeder.accept(grammarAccess.getEvaluationAccess().getExpressionExpressionParserRuleCall_0_0(), semanticObject.getExpression());
feeder.finish();
}
/**
* Constraint:
* importedNamespace=ImportName
*/
protected void sequence_Import(EObject context, Import semanticObject) {
if(errorAcceptor != null) {
if(transientValues.isValueTransient(semanticObject, ArithmeticsPackage.Literals.IMPORT__IMPORTED_NAMESPACE) == ValueTransient.YES)
errorAcceptor.accept(diagnosticProvider.createFeatureValueMissing(semanticObject, ArithmeticsPackage.Literals.IMPORT__IMPORTED_NAMESPACE));
}
INodesForEObjectProvider nodes = createNodeProvider(semanticObject);
SequenceFeeder feeder = createSequencerFeeder(semanticObject, nodes);
feeder.accept(grammarAccess.getImportAccess().getImportedNamespaceImportNameParserRuleCall_1_0(), semanticObject.getImportedNamespace());
feeder.finish();
}
/**
* Constraint:
* (name=ID imports+=Import* statements+=Statement*)
*/
protected void sequence_Module(EObject context, Module semanticObject) {
genericSequencer.createSequence(context, semanticObject);
}
/**
* Constraint:
* (left=Multiplication_Div_1_0_1_0 right=PrimaryExpression)
*/
protected void sequence_Multiplication(EObject context, Div semanticObject) {
if(errorAcceptor != null) {
if(transientValues.isValueTransient(semanticObject, ArithmeticsPackage.Literals.DIV__LEFT) == ValueTransient.YES)
errorAcceptor.accept(diagnosticProvider.createFeatureValueMissing(semanticObject, ArithmeticsPackage.Literals.DIV__LEFT));
if(transientValues.isValueTransient(semanticObject, ArithmeticsPackage.Literals.DIV__RIGHT) == ValueTransient.YES)
errorAcceptor.accept(diagnosticProvider.createFeatureValueMissing(semanticObject, ArithmeticsPackage.Literals.DIV__RIGHT));
}
INodesForEObjectProvider nodes = createNodeProvider(semanticObject);
SequenceFeeder feeder = createSequencerFeeder(semanticObject, nodes);
feeder.accept(grammarAccess.getMultiplicationAccess().getDivLeftAction_1_0_1_0(), semanticObject.getLeft());
feeder.accept(grammarAccess.getMultiplicationAccess().getRightPrimaryExpressionParserRuleCall_1_1_0(), semanticObject.getRight());
feeder.finish();
}
/**
* Constraint:
* (left=Multiplication_Multi_1_0_0_0 right=PrimaryExpression)
*/
protected void sequence_Multiplication(EObject context, Multi semanticObject) {
if(errorAcceptor != null) {
if(transientValues.isValueTransient(semanticObject, ArithmeticsPackage.Literals.MULTI__LEFT) == ValueTransient.YES)
errorAcceptor.accept(diagnosticProvider.createFeatureValueMissing(semanticObject, ArithmeticsPackage.Literals.MULTI__LEFT));
if(transientValues.isValueTransient(semanticObject, ArithmeticsPackage.Literals.MULTI__RIGHT) == ValueTransient.YES)
errorAcceptor.accept(diagnosticProvider.createFeatureValueMissing(semanticObject, ArithmeticsPackage.Literals.MULTI__RIGHT));
}
INodesForEObjectProvider nodes = createNodeProvider(semanticObject);
SequenceFeeder feeder = createSequencerFeeder(semanticObject, nodes);
feeder.accept(grammarAccess.getMultiplicationAccess().getMultiLeftAction_1_0_0_0(), semanticObject.getLeft());
feeder.accept(grammarAccess.getMultiplicationAccess().getRightPrimaryExpressionParserRuleCall_1_1_0(), semanticObject.getRight());
feeder.finish();
}
/**
* Constraint:
* (func=[AbstractDefinition|ID] (args+=Expression args+=Expression*)?)
*/
protected void sequence_PrimaryExpression(EObject context, FunctionCall semanticObject) {
genericSequencer.createSequence(context, semanticObject);
}
/**
* Constraint:
* value=NUMBER
*/
protected void sequence_PrimaryExpression(EObject context, NumberLiteral semanticObject) {
if(errorAcceptor != null) {
if(transientValues.isValueTransient(semanticObject, ArithmeticsPackage.Literals.NUMBER_LITERAL__VALUE) == ValueTransient.YES)
errorAcceptor.accept(diagnosticProvider.createFeatureValueMissing(semanticObject, ArithmeticsPackage.Literals.NUMBER_LITERAL__VALUE));
}
INodesForEObjectProvider nodes = createNodeProvider(semanticObject);
SequenceFeeder feeder = createSequencerFeeder(semanticObject, nodes);
feeder.accept(grammarAccess.getPrimaryExpressionAccess().getValueNUMBERTerminalRuleCall_1_1_0(), semanticObject.getValue());
feeder.finish();
}
}