package insa.serializer; import com.google.inject.Inject; import com.google.inject.Provider; import insa.services.LegoGrammarAccess; 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.AbstractDelegatingSemanticSequencer; 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; import robot.FlotCtrl.AndExp; import robot.FlotCtrl.FlotCtrlPackage; import robot.FlotCtrl.IfBlock; import robot.FlotCtrl.NegExp; import robot.FlotCtrl.WhileLoop; import robot.robot.Bip; import robot.robot.HasTurnedCmd; import robot.robot.MoveCmd; import robot.robot.ObstacleCmd; import robot.robot.PrintCmd; import robot.robot.ProgramUnit; import robot.robot.RobotPackage; import robot.robot.SetTurnAngleCmd; import robot.robot.StopEngineCmd; import robot.robot.StopProgramCmd; import robot.robot.TurnCmd; @SuppressWarnings("all") public abstract class AbstractLegoSemanticSequencer extends AbstractDelegatingSemanticSequencer { @Inject private LegoGrammarAccess grammarAccess; public void createSequence(EObject context, EObject semanticObject) { if(semanticObject.eClass().getEPackage() == FlotCtrlPackage.eINSTANCE) switch(semanticObject.eClass().getClassifierID()) { case FlotCtrlPackage.AND_EXP: if(context == grammarAccess.getAndExpRule() || context == grammarAccess.getBoolExpRule() || context == grammarAccess.getExpressionRule()) { sequence_AndExp(context, (AndExp) semanticObject); return; } else break; case FlotCtrlPackage.IF_BLOCK: if(context == grammarAccess.getExpressionRule() || context == grammarAccess.getIfBlockRule()) { sequence_IfBlock(context, (IfBlock) semanticObject); return; } else break; case FlotCtrlPackage.NEG_EXP: if(context == grammarAccess.getBoolExpRule() || context == grammarAccess.getExpressionRule() || context == grammarAccess.getNegExpRule()) { sequence_NegExp(context, (NegExp) semanticObject); return; } else break; case FlotCtrlPackage.WHILE_LOOP: if(context == grammarAccess.getExpressionRule() || context == grammarAccess.getWhileLoopRule()) { sequence_WhileLoop(context, (WhileLoop) semanticObject); return; } else break; } else if(semanticObject.eClass().getEPackage() == RobotPackage.eINSTANCE) switch(semanticObject.eClass().getClassifierID()) { case RobotPackage.BIP: if(context == grammarAccess.getBipRule()) { sequence_Bip(context, (Bip) semanticObject); return; } else break; case RobotPackage.HAS_TURNED_CMD: if(context == grammarAccess.getBoolExpRule() || context == grammarAccess.getCommandRule() || context == grammarAccess.getExpressionRule() || context == grammarAccess.getHasTurnedCmdRule()) { sequence_HasTurnedCmd(context, (HasTurnedCmd) semanticObject); return; } else break; case RobotPackage.MOVE_CMD: if(context == grammarAccess.getCommandRule() || context == grammarAccess.getExpressionRule() || context == grammarAccess.getMoveCmdRule()) { sequence_MoveCmd(context, (MoveCmd) semanticObject); return; } else break; case RobotPackage.OBSTACLE_CMD: if(context == grammarAccess.getBoolExpRule() || context == grammarAccess.getCommandRule() || context == grammarAccess.getExpressionRule() || context == grammarAccess.getObstacleCmdRule()) { sequence_ObstacleCmd(context, (ObstacleCmd) semanticObject); return; } else break; case RobotPackage.PRINT_CMD: if(context == grammarAccess.getCommandRule() || context == grammarAccess.getExpressionRule() || context == grammarAccess.getPrintCmdRule()) { sequence_PrintCmd(context, (PrintCmd) semanticObject); return; } else break; case RobotPackage.PROGRAM_UNIT: if(context == grammarAccess.getProgramUnitRule()) { sequence_ProgramUnit(context, (ProgramUnit) semanticObject); return; } else break; case RobotPackage.SET_TURN_ANGLE_CMD: if(context == grammarAccess.getCommandRule() || context == grammarAccess.getExpressionRule() || context == grammarAccess.getSetTurnAngleCmdRule()) { sequence_SetTurnAngleCmd(context, (SetTurnAngleCmd) semanticObject); return; } else break; case RobotPackage.STOP_ENGINE_CMD: if(context == grammarAccess.getCommandRule() || context == grammarAccess.getExpressionRule() || context == grammarAccess.getStopEngineCmdRule()) { sequence_StopEngineCmd(context, (StopEngineCmd) semanticObject); return; } else break; case RobotPackage.STOP_PROGRAM_CMD: if(context == grammarAccess.getCommandRule() || context == grammarAccess.getExpressionRule() || context == grammarAccess.getStopProgramCmdRule()) { sequence_StopProgramCmd(context, (StopProgramCmd) semanticObject); return; } else break; case RobotPackage.TURN_CMD: if(context == grammarAccess.getCommandRule() || context == grammarAccess.getExpressionRule() || context == grammarAccess.getTurnCmdRule()) { sequence_TurnCmd(context, (TurnCmd) semanticObject); return; } else break; } if (errorAcceptor != null) errorAcceptor.accept(diagnosticProvider.createInvalidContextOrTypeDiagnostic(semanticObject, context)); } /** * Constraint: * (leftExp=BoolExp rightExp=BoolExp) */ protected void sequence_AndExp(EObject context, AndExp semanticObject) { if(errorAcceptor != null) { if(transientValues.isValueTransient(semanticObject, FlotCtrlPackage.Literals.AND_EXP__LEFT_EXP) == ValueTransient.YES) errorAcceptor.accept(diagnosticProvider.createFeatureValueMissing(semanticObject, FlotCtrlPackage.Literals.AND_EXP__LEFT_EXP)); if(transientValues.isValueTransient(semanticObject, FlotCtrlPackage.Literals.AND_EXP__RIGHT_EXP) == ValueTransient.YES) errorAcceptor.accept(diagnosticProvider.createFeatureValueMissing(semanticObject, FlotCtrlPackage.Literals.AND_EXP__RIGHT_EXP)); } INodesForEObjectProvider nodes = createNodeProvider(semanticObject); SequenceFeeder feeder = createSequencerFeeder(semanticObject, nodes); feeder.accept(grammarAccess.getAndExpAccess().getLeftExpBoolExpParserRuleCall_1_0(), semanticObject.getLeftExp()); feeder.accept(grammarAccess.getAndExpAccess().getRightExpBoolExpParserRuleCall_2_0(), semanticObject.getRightExp()); feeder.finish(); } /** * Constraint: * (duration=INT power=DOUBLE repet=BOOLEAN_LITERAL) */ protected void sequence_Bip(EObject context, Bip semanticObject) { if(errorAcceptor != null) { if(transientValues.isValueTransient(semanticObject, RobotPackage.Literals.BIP__DURATION) == ValueTransient.YES) errorAcceptor.accept(diagnosticProvider.createFeatureValueMissing(semanticObject, RobotPackage.Literals.BIP__DURATION)); if(transientValues.isValueTransient(semanticObject, RobotPackage.Literals.BIP__POWER) == ValueTransient.YES) errorAcceptor.accept(diagnosticProvider.createFeatureValueMissing(semanticObject, RobotPackage.Literals.BIP__POWER)); if(transientValues.isValueTransient(semanticObject, RobotPackage.Literals.BIP__REPET) == ValueTransient.YES) errorAcceptor.accept(diagnosticProvider.createFeatureValueMissing(semanticObject, RobotPackage.Literals.BIP__REPET)); } INodesForEObjectProvider nodes = createNodeProvider(semanticObject); SequenceFeeder feeder = createSequencerFeeder(semanticObject, nodes); feeder.accept(grammarAccess.getBipAccess().getDurationINTTerminalRuleCall_4_0(), semanticObject.getDuration()); feeder.accept(grammarAccess.getBipAccess().getPowerDOUBLETerminalRuleCall_8_0(), semanticObject.getPower()); feeder.accept(grammarAccess.getBipAccess().getRepetBOOLEAN_LITERALParserRuleCall_12_0(), semanticObject.getRepet()); feeder.finish(); } /** * Constraint: * angle=DOUBLE */ protected void sequence_HasTurnedCmd(EObject context, HasTurnedCmd semanticObject) { if(errorAcceptor != null) { if(transientValues.isValueTransient(semanticObject, RobotPackage.Literals.HAS_TURNED_CMD__ANGLE) == ValueTransient.YES) errorAcceptor.accept(diagnosticProvider.createFeatureValueMissing(semanticObject, RobotPackage.Literals.HAS_TURNED_CMD__ANGLE)); } INodesForEObjectProvider nodes = createNodeProvider(semanticObject); SequenceFeeder feeder = createSequencerFeeder(semanticObject, nodes); feeder.accept(grammarAccess.getHasTurnedCmdAccess().getAngleDOUBLETerminalRuleCall_4_0(), semanticObject.getAngle()); feeder.finish(); } /** * Constraint: * (condition=BoolExp thenBlock+=Expression* elseBlock+=Expression*) */ protected void sequence_IfBlock(EObject context, IfBlock semanticObject) { genericSequencer.createSequence(context, semanticObject); } /** * Constraint: * power=DOUBLE */ protected void sequence_MoveCmd(EObject context, MoveCmd semanticObject) { if(errorAcceptor != null) { if(transientValues.isValueTransient(semanticObject, RobotPackage.Literals.MOVE_CMD__POWER) == ValueTransient.YES) errorAcceptor.accept(diagnosticProvider.createFeatureValueMissing(semanticObject, RobotPackage.Literals.MOVE_CMD__POWER)); } INodesForEObjectProvider nodes = createNodeProvider(semanticObject); SequenceFeeder feeder = createSequencerFeeder(semanticObject, nodes); feeder.accept(grammarAccess.getMoveCmdAccess().getPowerDOUBLETerminalRuleCall_4_0(), semanticObject.getPower()); feeder.finish(); } /** * Constraint: * exp=BoolExp */ protected void sequence_NegExp(EObject context, NegExp semanticObject) { if(errorAcceptor != null) { if(transientValues.isValueTransient(semanticObject, FlotCtrlPackage.Literals.NEG_EXP__EXP) == ValueTransient.YES) errorAcceptor.accept(diagnosticProvider.createFeatureValueMissing(semanticObject, FlotCtrlPackage.Literals.NEG_EXP__EXP)); } INodesForEObjectProvider nodes = createNodeProvider(semanticObject); SequenceFeeder feeder = createSequencerFeeder(semanticObject, nodes); feeder.accept(grammarAccess.getNegExpAccess().getExpBoolExpParserRuleCall_1_0(), semanticObject.getExp()); feeder.finish(); } /** * Constraint: * distance=DOUBLE */ protected void sequence_ObstacleCmd(EObject context, ObstacleCmd semanticObject) { if(errorAcceptor != null) { if(transientValues.isValueTransient(semanticObject, RobotPackage.Literals.OBSTACLE_CMD__DISTANCE) == ValueTransient.YES) errorAcceptor.accept(diagnosticProvider.createFeatureValueMissing(semanticObject, RobotPackage.Literals.OBSTACLE_CMD__DISTANCE)); } INodesForEObjectProvider nodes = createNodeProvider(semanticObject); SequenceFeeder feeder = createSequencerFeeder(semanticObject, nodes); feeder.accept(grammarAccess.getObstacleCmdAccess().getDistanceDOUBLETerminalRuleCall_4_0(), semanticObject.getDistance()); feeder.finish(); } /** * Constraint: * (msg=STRING duration=INT line=INT col=INT) */ protected void sequence_PrintCmd(EObject context, PrintCmd semanticObject) { if(errorAcceptor != null) { if(transientValues.isValueTransient(semanticObject, RobotPackage.Literals.PRINT_CMD__MSG) == ValueTransient.YES) errorAcceptor.accept(diagnosticProvider.createFeatureValueMissing(semanticObject, RobotPackage.Literals.PRINT_CMD__MSG)); if(transientValues.isValueTransient(semanticObject, RobotPackage.Literals.PRINT_CMD__DURATION) == ValueTransient.YES) errorAcceptor.accept(diagnosticProvider.createFeatureValueMissing(semanticObject, RobotPackage.Literals.PRINT_CMD__DURATION)); if(transientValues.isValueTransient(semanticObject, RobotPackage.Literals.PRINT_CMD__LINE) == ValueTransient.YES) errorAcceptor.accept(diagnosticProvider.createFeatureValueMissing(semanticObject, RobotPackage.Literals.PRINT_CMD__LINE)); if(transientValues.isValueTransient(semanticObject, RobotPackage.Literals.PRINT_CMD__COL) == ValueTransient.YES) errorAcceptor.accept(diagnosticProvider.createFeatureValueMissing(semanticObject, RobotPackage.Literals.PRINT_CMD__COL)); } INodesForEObjectProvider nodes = createNodeProvider(semanticObject); SequenceFeeder feeder = createSequencerFeeder(semanticObject, nodes); feeder.accept(grammarAccess.getPrintCmdAccess().getMsgSTRINGTerminalRuleCall_4_0(), semanticObject.getMsg()); feeder.accept(grammarAccess.getPrintCmdAccess().getDurationINTTerminalRuleCall_8_0(), semanticObject.getDuration()); feeder.accept(grammarAccess.getPrintCmdAccess().getLineINTTerminalRuleCall_12_0(), semanticObject.getLine()); feeder.accept(grammarAccess.getPrintCmdAccess().getColINTTerminalRuleCall_16_0(), semanticObject.getCol()); feeder.finish(); } /** * Constraint: * block+=Expression* */ protected void sequence_ProgramUnit(EObject context, ProgramUnit semanticObject) { genericSequencer.createSequence(context, semanticObject); } /** * Constraint: * angle=DOUBLE */ protected void sequence_SetTurnAngleCmd(EObject context, SetTurnAngleCmd semanticObject) { if(errorAcceptor != null) { if(transientValues.isValueTransient(semanticObject, RobotPackage.Literals.SET_TURN_ANGLE_CMD__ANGLE) == ValueTransient.YES) errorAcceptor.accept(diagnosticProvider.createFeatureValueMissing(semanticObject, RobotPackage.Literals.SET_TURN_ANGLE_CMD__ANGLE)); } INodesForEObjectProvider nodes = createNodeProvider(semanticObject); SequenceFeeder feeder = createSequencerFeeder(semanticObject, nodes); feeder.accept(grammarAccess.getSetTurnAngleCmdAccess().getAngleDOUBLETerminalRuleCall_4_0(), semanticObject.getAngle()); feeder.finish(); } /** * Constraint: * {StopEngineCmd} */ protected void sequence_StopEngineCmd(EObject context, StopEngineCmd semanticObject) { genericSequencer.createSequence(context, semanticObject); } /** * Constraint: * {StopProgramCmd} */ protected void sequence_StopProgramCmd(EObject context, StopProgramCmd semanticObject) { genericSequencer.createSequence(context, semanticObject); } /** * Constraint: * (power=DOUBLE angle=DOUBLE) */ protected void sequence_TurnCmd(EObject context, TurnCmd semanticObject) { if(errorAcceptor != null) { if(transientValues.isValueTransient(semanticObject, RobotPackage.Literals.TURN_CMD__POWER) == ValueTransient.YES) errorAcceptor.accept(diagnosticProvider.createFeatureValueMissing(semanticObject, RobotPackage.Literals.TURN_CMD__POWER)); if(transientValues.isValueTransient(semanticObject, RobotPackage.Literals.TURN_CMD__ANGLE) == ValueTransient.YES) errorAcceptor.accept(diagnosticProvider.createFeatureValueMissing(semanticObject, RobotPackage.Literals.TURN_CMD__ANGLE)); } INodesForEObjectProvider nodes = createNodeProvider(semanticObject); SequenceFeeder feeder = createSequencerFeeder(semanticObject, nodes); feeder.accept(grammarAccess.getTurnCmdAccess().getPowerDOUBLETerminalRuleCall_4_0(), semanticObject.getPower()); feeder.accept(grammarAccess.getTurnCmdAccess().getAngleDOUBLETerminalRuleCall_8_0(), semanticObject.getAngle()); feeder.finish(); } /** * Constraint: * (loopCond=BoolExp block+=Expression*) */ protected void sequence_WhileLoop(EObject context, WhileLoop semanticObject) { genericSequencer.createSequence(context, semanticObject); } }