diff options
Diffstat (limited to 'Stochastic/hu.bme.mit.inf.dslreasoner.faulttree.transformation')
4 files changed, 34 insertions, 11 deletions
diff --git a/Stochastic/hu.bme.mit.inf.dslreasoner.faulttree.transformation/src/hu/bme/mit/inf/dslreasoner/faulttree/transformation/cft2ft/EventMaterializer.xtend b/Stochastic/hu.bme.mit.inf.dslreasoner.faulttree.transformation/src/hu/bme/mit/inf/dslreasoner/faulttree/transformation/cft2ft/EventMaterializer.xtend index 85396e4d..c9aefe51 100644 --- a/Stochastic/hu.bme.mit.inf.dslreasoner.faulttree.transformation/src/hu/bme/mit/inf/dslreasoner/faulttree/transformation/cft2ft/EventMaterializer.xtend +++ b/Stochastic/hu.bme.mit.inf.dslreasoner.faulttree.transformation/src/hu/bme/mit/inf/dslreasoner/faulttree/transformation/cft2ft/EventMaterializer.xtend | |||
@@ -43,7 +43,13 @@ class EventMaterializer { | |||
43 | val eventKey = new EventKey(component, eventDeclaration) | 43 | val eventKey = new EventKey(component, eventDeclaration) |
44 | pushEventKey(eventKey) | 44 | pushEventKey(eventKey) |
45 | try { | 45 | try { |
46 | materializationCache.computeIfAbsent(eventKey)[materialize(it.component, it.event)] | 46 | // computeIfAbsent cannot be used recursively, so we must manually cache the event. |
47 | var event = materializationCache.get(eventKey) | ||
48 | if (event === null) { | ||
49 | event = materialize(component, eventDeclaration) | ||
50 | materializationCache.put(eventKey, event) | ||
51 | } | ||
52 | event | ||
47 | } finally { | 53 | } finally { |
48 | popEventKey(eventKey) | 54 | popEventKey(eventKey) |
49 | } | 55 | } |
@@ -147,7 +153,13 @@ class EventMaterializer { | |||
147 | val inputKey = new EventKey(component, inputEvent) | 153 | val inputKey = new EventKey(component, inputEvent) |
148 | pushEventKey(inputKey) | 154 | pushEventKey(inputKey) |
149 | try { | 155 | try { |
150 | multipleInputCache.computeIfAbsent(inputKey)[materializeConnectedEvents(it.component, it.event)] | 156 | // computeIfAbsent cannot be used recursively, so we must manually cache the event. |
157 | var eventCollection = multipleInputCache.get(inputKey) | ||
158 | if (eventCollection === null) { | ||
159 | eventCollection = materializeConnectedEvents(component, inputEvent) | ||
160 | multipleInputCache.put(inputKey, eventCollection) | ||
161 | } | ||
162 | eventCollection | ||
151 | } finally { | 163 | } finally { |
152 | popEventKey(inputKey) | 164 | popEventKey(inputKey) |
153 | } | 165 | } |
diff --git a/Stochastic/hu.bme.mit.inf.dslreasoner.faulttree.transformation/xtend-gen/hu/bme/mit/inf/dslreasoner/faulttree/transformation/cft2ft/.Cft2FtTransformation.xtendbin b/Stochastic/hu.bme.mit.inf.dslreasoner.faulttree.transformation/xtend-gen/hu/bme/mit/inf/dslreasoner/faulttree/transformation/cft2ft/.Cft2FtTransformation.xtendbin index 20f1f4a7..226e6227 100644 --- a/Stochastic/hu.bme.mit.inf.dslreasoner.faulttree.transformation/xtend-gen/hu/bme/mit/inf/dslreasoner/faulttree/transformation/cft2ft/.Cft2FtTransformation.xtendbin +++ b/Stochastic/hu.bme.mit.inf.dslreasoner.faulttree.transformation/xtend-gen/hu/bme/mit/inf/dslreasoner/faulttree/transformation/cft2ft/.Cft2FtTransformation.xtendbin | |||
Binary files differ | |||
diff --git a/Stochastic/hu.bme.mit.inf.dslreasoner.faulttree.transformation/xtend-gen/hu/bme/mit/inf/dslreasoner/faulttree/transformation/cft2ft/.EventMaterializer.xtendbin b/Stochastic/hu.bme.mit.inf.dslreasoner.faulttree.transformation/xtend-gen/hu/bme/mit/inf/dslreasoner/faulttree/transformation/cft2ft/.EventMaterializer.xtendbin index 271c9cc0..175ae3f1 100644 --- a/Stochastic/hu.bme.mit.inf.dslreasoner.faulttree.transformation/xtend-gen/hu/bme/mit/inf/dslreasoner/faulttree/transformation/cft2ft/.EventMaterializer.xtendbin +++ b/Stochastic/hu.bme.mit.inf.dslreasoner.faulttree.transformation/xtend-gen/hu/bme/mit/inf/dslreasoner/faulttree/transformation/cft2ft/.EventMaterializer.xtendbin | |||
Binary files differ | |||
diff --git a/Stochastic/hu.bme.mit.inf.dslreasoner.faulttree.transformation/xtend-gen/hu/bme/mit/inf/dslreasoner/faulttree/transformation/cft2ft/EventMaterializer.java b/Stochastic/hu.bme.mit.inf.dslreasoner.faulttree.transformation/xtend-gen/hu/bme/mit/inf/dslreasoner/faulttree/transformation/cft2ft/EventMaterializer.java index 70481341..ac1fc209 100644 --- a/Stochastic/hu.bme.mit.inf.dslreasoner.faulttree.transformation/xtend-gen/hu/bme/mit/inf/dslreasoner/faulttree/transformation/cft2ft/EventMaterializer.java +++ b/Stochastic/hu.bme.mit.inf.dslreasoner.faulttree.transformation/xtend-gen/hu/bme/mit/inf/dslreasoner/faulttree/transformation/cft2ft/EventMaterializer.java | |||
@@ -25,7 +25,6 @@ import hu.bme.mit.inf.dslreasoner.faulttree.model.ft.RandomEvent; | |||
25 | import hu.bme.mit.inf.dslreasoner.faulttree.transformation.cft2ft.EventCollection; | 25 | import hu.bme.mit.inf.dslreasoner.faulttree.transformation.cft2ft.EventCollection; |
26 | import java.util.LinkedHashSet; | 26 | import java.util.LinkedHashSet; |
27 | import java.util.Map; | 27 | import java.util.Map; |
28 | import java.util.function.Function; | ||
29 | import org.eclipse.emf.common.util.EList; | 28 | import org.eclipse.emf.common.util.EList; |
30 | import org.eclipse.emf.ecore.util.EcoreUtil; | 29 | import org.eclipse.emf.ecore.util.EcoreUtil; |
31 | import org.eclipse.xtend.lib.annotations.Data; | 30 | import org.eclipse.xtend.lib.annotations.Data; |
@@ -145,10 +144,16 @@ public class EventMaterializer { | |||
145 | this.pushEventKey(eventKey); | 144 | this.pushEventKey(eventKey); |
146 | Event _xtrycatchfinallyexpression = null; | 145 | Event _xtrycatchfinallyexpression = null; |
147 | try { | 146 | try { |
148 | final Function<EventMaterializer.EventKey<EventDeclaration>, Event> _function = (EventMaterializer.EventKey<EventDeclaration> it) -> { | 147 | Event _xblockexpression_1 = null; |
149 | return this.materialize(it.component, it.event); | 148 | { |
150 | }; | 149 | Event event = this.materializationCache.get(eventKey); |
151 | _xtrycatchfinallyexpression = this.materializationCache.computeIfAbsent(eventKey, _function); | 150 | if ((event == null)) { |
151 | event = this.materialize(component, eventDeclaration); | ||
152 | this.materializationCache.put(eventKey, event); | ||
153 | } | ||
154 | _xblockexpression_1 = event; | ||
155 | } | ||
156 | _xtrycatchfinallyexpression = _xblockexpression_1; | ||
152 | } finally { | 157 | } finally { |
153 | this.popEventKey(eventKey); | 158 | this.popEventKey(eventKey); |
154 | } | 159 | } |
@@ -386,10 +391,16 @@ public class EventMaterializer { | |||
386 | this.pushEventKey(inputKey); | 391 | this.pushEventKey(inputKey); |
387 | EventCollection _xtrycatchfinallyexpression = null; | 392 | EventCollection _xtrycatchfinallyexpression = null; |
388 | try { | 393 | try { |
389 | final Function<EventMaterializer.EventKey<InputEvent>, EventCollection> _function = (EventMaterializer.EventKey<InputEvent> it) -> { | 394 | EventCollection _xblockexpression_1 = null; |
390 | return this.materializeConnectedEvents(it.component, it.event); | 395 | { |
391 | }; | 396 | EventCollection eventCollection = this.multipleInputCache.get(inputKey); |
392 | _xtrycatchfinallyexpression = this.multipleInputCache.computeIfAbsent(inputKey, _function); | 397 | if ((eventCollection == null)) { |
398 | eventCollection = this.materializeConnectedEvents(component, inputEvent); | ||
399 | this.multipleInputCache.put(inputKey, eventCollection); | ||
400 | } | ||
401 | _xblockexpression_1 = eventCollection; | ||
402 | } | ||
403 | _xtrycatchfinallyexpression = _xblockexpression_1; | ||
393 | } finally { | 404 | } finally { |
394 | this.popEventKey(inputKey); | 405 | this.popEventKey(inputKey); |
395 | } | 406 | } |