diff options
author | 2024-06-27 18:54:23 +0200 | |
---|---|---|
committer | 2024-06-27 18:54:23 +0200 | |
commit | e37f75d3d9b8cfda74fc48766c890dda07343794 (patch) | |
tree | 66fb10fda353c4653a0f879c15ede73b140ce4a4 | |
parent | docs: add links between Javadocs (diff) | |
download | refinery-e37f75d3d9b8cfda74fc48766c890dda07343794.tar.gz refinery-e37f75d3d9b8cfda74fc48766c890dda07343794.tar.zst refinery-e37f75d3d9b8cfda74fc48766c890dda07343794.zip |
interpreter: Fix NPE in VQE wipe/dispose -> EVM -> MatchUpdateListener chains
Port
https://github.com/eclipse-viatra/org.eclipse.viatra/commit/a70e5e35f254079fbb0819731c81f64b3c79d1d7
from the VIATRA upstream repository
2 files changed, 25 insertions, 19 deletions
diff --git a/subprojects/interpreter-rete/src/main/java/tools/refinery/interpreter/rete/matcher/ReteEngine.java b/subprojects/interpreter-rete/src/main/java/tools/refinery/interpreter/rete/matcher/ReteEngine.java index aa793e11..fba257e0 100644 --- a/subprojects/interpreter-rete/src/main/java/tools/refinery/interpreter/rete/matcher/ReteEngine.java +++ b/subprojects/interpreter-rete/src/main/java/tools/refinery/interpreter/rete/matcher/ReteEngine.java | |||
@@ -9,34 +9,30 @@ | |||
9 | 9 | ||
10 | package tools.refinery.interpreter.rete.matcher; | 10 | package tools.refinery.interpreter.rete.matcher; |
11 | 11 | ||
12 | import java.lang.reflect.InvocationTargetException; | ||
13 | import java.util.Collection; | ||
14 | import java.util.LinkedList; | ||
15 | import java.util.Map; | ||
16 | import java.util.concurrent.Callable; | ||
17 | |||
18 | import org.apache.log4j.Logger; | 12 | import org.apache.log4j.Logger; |
19 | import tools.refinery.interpreter.rete.boundary.Disconnectable; | ||
20 | import tools.refinery.interpreter.rete.boundary.ReteBoundary; | ||
21 | import tools.refinery.interpreter.rete.construction.RetePatternBuildException; | ||
22 | import tools.refinery.interpreter.rete.construction.plancompiler.ReteRecipeCompiler; | ||
23 | import tools.refinery.interpreter.rete.network.Network; | ||
24 | import tools.refinery.interpreter.rete.network.NodeProvisioner; | ||
25 | import tools.refinery.interpreter.rete.network.ReteContainer; | ||
26 | import tools.refinery.interpreter.matchers.InterpreterRuntimeException; | 13 | import tools.refinery.interpreter.matchers.InterpreterRuntimeException; |
27 | import tools.refinery.interpreter.matchers.backend.IQueryBackend; | 14 | import tools.refinery.interpreter.matchers.backend.*; |
28 | import tools.refinery.interpreter.matchers.backend.IQueryBackendFactory; | ||
29 | import tools.refinery.interpreter.matchers.backend.IQueryBackendHintProvider; | ||
30 | import tools.refinery.interpreter.matchers.backend.IQueryResultProvider; | ||
31 | import tools.refinery.interpreter.matchers.backend.QueryEvaluationHint; | ||
32 | import tools.refinery.interpreter.matchers.context.IQueryBackendContext; | 15 | import tools.refinery.interpreter.matchers.context.IQueryBackendContext; |
33 | import tools.refinery.interpreter.matchers.context.IQueryRuntimeContext; | 16 | import tools.refinery.interpreter.matchers.context.IQueryRuntimeContext; |
34 | import tools.refinery.interpreter.matchers.psystem.queries.PQuery; | 17 | import tools.refinery.interpreter.matchers.psystem.queries.PQuery; |
35 | import tools.refinery.interpreter.matchers.tuple.TupleMask; | 18 | import tools.refinery.interpreter.matchers.tuple.TupleMask; |
36 | import tools.refinery.interpreter.matchers.util.CollectionsFactory; | 19 | import tools.refinery.interpreter.matchers.util.CollectionsFactory; |
20 | import tools.refinery.interpreter.rete.boundary.Disconnectable; | ||
21 | import tools.refinery.interpreter.rete.boundary.ReteBoundary; | ||
22 | import tools.refinery.interpreter.rete.construction.RetePatternBuildException; | ||
23 | import tools.refinery.interpreter.rete.construction.plancompiler.ReteRecipeCompiler; | ||
37 | import tools.refinery.interpreter.rete.index.Indexer; | 24 | import tools.refinery.interpreter.rete.index.Indexer; |
25 | import tools.refinery.interpreter.rete.network.Network; | ||
26 | import tools.refinery.interpreter.rete.network.NodeProvisioner; | ||
27 | import tools.refinery.interpreter.rete.network.ReteContainer; | ||
38 | import tools.refinery.interpreter.rete.traceability.RecipeTraceInfo; | 28 | import tools.refinery.interpreter.rete.traceability.RecipeTraceInfo; |
39 | 29 | ||
30 | import java.lang.reflect.InvocationTargetException; | ||
31 | import java.util.Collection; | ||
32 | import java.util.LinkedList; | ||
33 | import java.util.Map; | ||
34 | import java.util.concurrent.Callable; | ||
35 | |||
40 | /** | 36 | /** |
41 | * @author Gabor Bergmann | 37 | * @author Gabor Bergmann |
42 | * | 38 | * |
@@ -262,6 +258,7 @@ public class ReteEngine implements IQueryBackend { | |||
262 | * @since 2.4 | 258 | * @since 2.4 |
263 | */ | 259 | */ |
264 | public <T> T constructionWrapper(final Callable<T> payload) { | 260 | public <T> T constructionWrapper(final Callable<T> payload) { |
261 | ensureInitialized(); | ||
265 | T result = null; | 262 | T result = null; |
266 | // context.modelReadLock(); | 263 | // context.modelReadLock(); |
267 | // try { | 264 | // try { |
@@ -533,7 +530,15 @@ public class ReteEngine implements IQueryBackend { | |||
533 | 530 | ||
534 | } | 531 | } |
535 | 532 | ||
536 | @Override | 533 | /** |
534 | * @since 2.9 | ||
535 | */ | ||
536 | public boolean isDisposedOrUninitialized() { | ||
537 | return disposedOrUninitialized; | ||
538 | } | ||
539 | |||
540 | |||
541 | @Override | ||
537 | public IQueryResultProvider getResultProvider(PQuery query) { | 542 | public IQueryResultProvider getResultProvider(PQuery query) { |
538 | return accessMatcher(query); | 543 | return accessMatcher(query); |
539 | } | 544 | } |
diff --git a/subprojects/interpreter-rete/src/main/java/tools/refinery/interpreter/rete/matcher/RetePatternMatcher.java b/subprojects/interpreter-rete/src/main/java/tools/refinery/interpreter/rete/matcher/RetePatternMatcher.java index 5d04081c..21154bd5 100644 --- a/subprojects/interpreter-rete/src/main/java/tools/refinery/interpreter/rete/matcher/RetePatternMatcher.java +++ b/subprojects/interpreter-rete/src/main/java/tools/refinery/interpreter/rete/matcher/RetePatternMatcher.java | |||
@@ -441,6 +441,7 @@ public class RetePatternMatcher extends TransformerNode implements IQueryResultP | |||
441 | 441 | ||
442 | @Override | 442 | @Override |
443 | public void removeUpdateListener(Object listenerTag) { | 443 | public void removeUpdateListener(Object listenerTag) { |
444 | if (engine.isDisposedOrUninitialized()) return; // NO-OP | ||
444 | engine.constructionWrapper(() -> { | 445 | engine.constructionWrapper(() -> { |
445 | disconnectByTag(listenerTag); | 446 | disconnectByTag(listenerTag); |
446 | return null; | 447 | return null; |