X-Git-Url: https://gerrit.simantics.org/r/gitweb?p=simantics%2Fplatform.git;a=blobdiff_plain;f=bundles%2Forg.simantics.db.impl%2Fsrc%2Forg%2Fsimantics%2Fdb%2Fimpl%2Fquery%2FCodeGen.java;fp=bundles%2Forg.simantics.db.impl%2Fsrc%2Forg%2Fsimantics%2Fdb%2Fimpl%2Fquery%2FCodeGen.java;h=feac07ea284625f9f20a7d775faa08dba62598af;hp=66ee865a6ed3355ee7eefd0571d7739235fde231;hb=0db1af75cd14f99f16c42c920562708abf37be93;hpb=b000e272429e157638c0384878b07b8dcd758472 diff --git a/bundles/org.simantics.db.impl/src/org/simantics/db/impl/query/CodeGen.java b/bundles/org.simantics.db.impl/src/org/simantics/db/impl/query/CodeGen.java index 66ee865a6..feac07ea2 100644 --- a/bundles/org.simantics.db.impl/src/org/simantics/db/impl/query/CodeGen.java +++ b/bundles/org.simantics.db.impl/src/org/simantics/db/impl/query/CodeGen.java @@ -94,14 +94,29 @@ public class CodeGen { line(content, " " + clazz + " entry = (" + clazz + ")cache.getOrCreate" + clazz + "(graph, " + signature.keyName + ");"); } line(content, " " + signature.procedure + " procedure_ = procedure != null ? procedure : emptyProcedure" + clazz + ";"); - line(content, " ListenerEntry listenerEntry = cache.registerDependencies(graph, entry, parent, listener, procedure_, false);"); - line(content, " if(entry.isReady()) " + (genReturn ? "return " : "") + "entry.performFromCache(graph, procedure_);"); + line(content, " if(entry.isReady()) {"); + line(content, " graph.processor.listening.registerDependencies(graph, entry, parent, listener, procedure_, false);"); + if(genReturn) { + line(content, " Object result = entry.performFromCache(graph, procedure_);"); + line(content, " graph.processor.listening.registerFirstKnown(listener, result);"); + line(content, " return result;"); + } else { + line(content, " entry.performFromCache(graph, procedure_);"); + } + line(content, " }"); line(content, " else {"); line(content, " assert(entry.isPending());"); - if(shortcut) line(content, " " + (genReturn ? "Object result = " : "") + clazz + ".computeForEach(graph, " + signature.keyName + ", entry, procedure_" + (signature.useNeedsToBlock ? ", needsToBlock" : "") + ");"); - else line(content, " entry.compute(graph, procedure_);"); - line(content, " if(listenerEntry != null) cache.primeListenerEntry(listenerEntry, entry.getResult());"); - if(genReturn) line(content, " return result;"); + if(genReturn) { + line(content, " graph.processor.listening.registerDependencies(graph, entry, parent, listener, procedure_, false);"); + if(shortcut) line(content, " Object result = " + clazz + ".computeForEach(graph, " + signature.keyName + ", entry, procedure_" + (signature.useNeedsToBlock ? ", needsToBlock" : "") + ");"); + else line(content, " entry.compute(graph, procedure_);"); + line(content, " graph.processor.listening.registerFirstKnown(listener, result);"); + line(content, " return result;"); + } else { + line(content, " graph.processor.listening.registerDependencies(graph, entry, parent, listener, procedure_, false);"); + if(shortcut) line(content, " " + clazz + ".computeForEach(graph, " + signature.keyName + ", entry, procedure_" + (signature.useNeedsToBlock ? ", needsToBlock" : "") + ");"); + else line(content, " entry.compute(graph, procedure_);"); + } line(content, " }"); line(content, "}"); line(content, ""); @@ -203,7 +218,7 @@ public class CodeGen { content.append("public class QueryCache extends QueryCacheBase {\n"); content.append("\n"); - line(content, "private static final boolean SINGLE = false;"); + line(content, "private static final boolean SINGLE = true;"); content.append("\n"); line(content,"public QueryCache(QuerySupport querySupport, int threads) {");