Skip to content
This repository has been archived by the owner on May 7, 2020. It is now read-only.

Commit

Permalink
Do not inject previousState var into rules multiple times (#5164)
Browse files Browse the repository at this point in the history
Fixes #5138
Signed-off-by: Stefan Triller <stefan.triller@telekom.de>
  • Loading branch information
triller-telekom authored and Simon Kaufmann committed Feb 28, 2018
1 parent 5024dce commit f01d93f
Showing 1 changed file with 8 additions and 2 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,8 @@ import org.eclipse.xtext.xbase.jvmmodel.IJvmDeclaredTypeAcceptor
import org.eclipse.xtext.xbase.jvmmodel.JvmTypesBuilder
import org.slf4j.Logger
import org.slf4j.LoggerFactory
import org.eclipse.xtext.common.types.JvmFormalParameter
import org.eclipse.emf.common.util.EList

/**
* <p>Infers a JVM model from the source model.</p>
Expand Down Expand Up @@ -147,15 +149,15 @@ class RulesJvmModelInferrer extends ScriptJvmModelInferrer {
val commandTypeRef = ruleModel.newTypeRef(Command)
parameters += rule.toParameter(VAR_RECEIVED_COMMAND, commandTypeRef)
}
if (containsStateChangeTrigger(rule)) {
if (containsStateChangeTrigger(rule) && !containsParam(parameters, VAR_PREVIOUS_STATE)) {
val stateTypeRef = ruleModel.newTypeRef(State)
parameters += rule.toParameter(VAR_PREVIOUS_STATE, stateTypeRef)
}
if (containsEventTrigger(rule)) {
val eventTypeRef = ruleModel.newTypeRef(ChannelTriggeredEvent)
parameters += rule.toParameter(VAR_RECEIVED_EVENT, eventTypeRef)
}
if (containsThingStateChangedEventTrigger(rule)) {
if (containsThingStateChangedEventTrigger(rule) && !containsParam(parameters, VAR_PREVIOUS_STATE)) {
val stateTypeRef = ruleModel.newTypeRef(State)
parameters += rule.toParameter(VAR_PREVIOUS_STATE, stateTypeRef)
}
Expand All @@ -166,6 +168,10 @@ class RulesJvmModelInferrer extends ScriptJvmModelInferrer {
]
}

def private boolean containsParam(EList<JvmFormalParameter> params, String param) {
return params.map[name].contains(param);
}

def private boolean containsCommandTrigger(Rule rule) {
for (EventTrigger trigger : rule.getEventtrigger()) {
if (trigger instanceof CommandEventTrigger) {
Expand Down

0 comments on commit f01d93f

Please sign in to comment.