use of org.yakindu.base.expressions.expressions.AssignmentExpression in project statecharts by Yakindu.
the class ExpressionsJavaValidator method checkAssignmentToFinalVariable.
@Check(CheckType.FAST)
public void checkAssignmentToFinalVariable(AssignmentExpression exp) {
Expression varRef = exp.getVarRef();
EObject referencedObject = null;
if (varRef instanceof FeatureCall)
referencedObject = ((FeatureCall) varRef).getFeature();
else if (varRef instanceof ElementReferenceExpression)
referencedObject = ((ElementReferenceExpression) varRef).getReference();
if (referencedObject instanceof Property) {
if (((Property) referencedObject).isConst()) {
error(ERROR_ASSIGNMENT_TO_CONST_MSG, ExpressionsPackage.Literals.ASSIGNMENT_EXPRESSION__VAR_REF, ERROR_ASSIGNMENT_TO_CONST_CODE);
}
}
}
use of org.yakindu.base.expressions.expressions.AssignmentExpression in project statecharts by Yakindu.
the class ModelSequencerStateReactionTest method testAlwaysLocalReaction.
/**
* Local reactions must be created for behavior with 'always' trigger
*/
@SuppressWarnings("unused")
@Test
public void testAlwaysLocalReaction() {
Statechart sc = _createStatechart("test");
Scope scope = _createInterfaceScope("interface", sc);
VariableDefinition v1 = _createVariableDefinition("v1", TYPE_INTEGER, scope);
Region r = _createRegion("main", sc);
State s = _createState("s", r);
LocalReaction timeTriggeredReaction = _createLocalReaction(s, StextFactory.eINSTANCE.createAlwaysEvent());
AssignmentExpression assign = _createVariableAssignment(v1, AssignmentOperator.ASSIGN, _createValue(42), (ReactionEffect) timeTriggeredReaction.getEffect());
ExecutionFlow flow = sequencer.transform(sc);
ExecutionState _s = flow.getStates().get(0);
// assert that a local reaction is created
Reaction reaction = _s.getReactions().get(0);
PrimitiveValueExpression pve = (PrimitiveValueExpression) reaction.getCheck().getCondition();
assertBoolLiteral(true, pve.getValue());
}
use of org.yakindu.base.expressions.expressions.AssignmentExpression in project statecharts by Yakindu.
the class ModelSequencerStateTest method testStateReaction_WithExitAction.
/**
* The exit action must be part of the reaction effect sequence
*/
@SuppressWarnings("unused")
@Test
public void testStateReaction_WithExitAction() {
SimpleFlatTSC tsc = new SimpleFlatTSC();
VariableDefinition v1 = _createVariableDefinition("v1", TYPE_INTEGER, tsc.s_scope);
LocalReaction exitAction = _createExitAction(tsc.s1);
AssignmentExpression assign = _createVariableAssignment(v1, AssignmentOperator.ASSIGN, _createValue(21), (ReactionEffect) exitAction.getEffect());
ExecutionFlow flow = sequencer.transform(tsc.sc);
// test state with one outgoing transition
ExecutionState _s1 = flow.getStates().get(0);
ExecutionState _s2 = flow.getStates().get(1);
assertEquals(tsc.s1.getName(), _s1.getSimpleName());
assertEquals(tsc.s2.getName(), _s2.getSimpleName());
assertEquals(1, _s1.getReactions().size());
Reaction reaction = _s1.getReactions().get(0);
assertNotNull(reaction.getCheck());
assertNotNull(reaction.getEffect());
Sequence seq = (Sequence) reaction.getEffect();
assertCall(seq, 0, _s1.getExitSequence());
assertCall(_s1.getExitSequence(), 1, _s1.getExitAction());
}
use of org.yakindu.base.expressions.expressions.AssignmentExpression in project statecharts by Yakindu.
the class ModelSequencerStateTest method testStateCycle_EntryActionExclusion.
/**
* Entry action behaviors are not directly part of the states cycle steps
*/
@SuppressWarnings("unused")
@Test
public void testStateCycle_EntryActionExclusion() {
MinimalTSC tsc = new MinimalTSC();
VariableDefinition v1 = _createVariableDefinition("v1", TYPE_INTEGER, tsc.s_scope);
// add a simple entry action: "entry / x=42;"
LocalReaction lr = _createEntryAction(tsc.s1);
ReactionEffect lr_eff = _createReactionEffect(lr);
AssignmentExpression assign1 = _createVariableAssignment(v1, AssignmentOperator.ASSIGN, _createValue(42), lr_eff);
// TRANSFORM
ExecutionFlow flow = sequencer.transform(tsc.sc);
// test state with one outgoing transition
ExecutionState s1 = flow.getStates().get(0);
assertEquals(0, s1.getReactions().size());
assertNotNull(s1.getReactSequence());
assertEquals(1, s1.getReactSequence().getSteps().size());
}
use of org.yakindu.base.expressions.expressions.AssignmentExpression in project statecharts by Yakindu.
the class ModelSequencerStateTest method testStateReaction_WithEntryAction.
/**
* The exit action must be part of the reaction effect sequence
*/
@SuppressWarnings("unused")
@Test
public void testStateReaction_WithEntryAction() {
SimpleFlatTSC tsc = new SimpleFlatTSC();
VariableDefinition v1 = _createVariableDefinition("v1", TYPE_INTEGER, tsc.s_scope);
LocalReaction entryAction = _createEntryAction(tsc.s2);
AssignmentExpression assign = _createVariableAssignment(v1, AssignmentOperator.ASSIGN, _createValue(21), (ReactionEffect) entryAction.getEffect());
ExecutionFlow flow = sequencer.transform(tsc.sc);
// test state with one outgoing transition
ExecutionState _s1 = flow.getStates().get(0);
ExecutionState _s2 = flow.getStates().get(1);
assertEquals(tsc.s1.getName(), _s1.getSimpleName());
assertEquals(tsc.s2.getName(), _s2.getSimpleName());
assertEquals(1, _s1.getReactions().size());
Reaction reaction = _s1.getReactions().get(0);
assertNotNull(reaction.getCheck());
assertNotNull(reaction.getEffect());
Sequence seq = (Sequence) reaction.getEffect();
assertEquals(2, seq.getSteps().size());
assertCall(seq, 0, _s1.getExitSequence());
assertCall(seq, 1, _s2.getEnterSequences().get(0));
assertCall(_s2.getEnterSequences().get(0), 0, _s2.getEntryAction());
}
Aggregations