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