X-Git-Url: https://gerrit.simantics.org/r/gitweb?a=blobdiff_plain;f=bundles%2Forg.simantics.scl.db%2Fsrc%2Forg%2Fsimantics%2Fscl%2Fdb%2FSCLFunctions.java;h=bca7ba2481ff641b5a7d4c300ed80642cb751ac2;hb=HEAD;hp=d8f83e05f5b2f231bc5dcd14bf27bf93ff85ffdc;hpb=1ae2c52a087a20a7fc9c0288b7e2398b4429e20e;p=simantics%2Fplatform.git diff --git a/bundles/org.simantics.scl.db/src/org/simantics/scl/db/SCLFunctions.java b/bundles/org.simantics.scl.db/src/org/simantics/scl/db/SCLFunctions.java index d8f83e05f..bca7ba248 100644 --- a/bundles/org.simantics.scl.db/src/org/simantics/scl/db/SCLFunctions.java +++ b/bundles/org.simantics.scl.db/src/org/simantics/scl/db/SCLFunctions.java @@ -123,7 +123,7 @@ public class SCLFunctions { } private static T evaluate(RuntimeModule rm, String function, Object ... args) throws ValueNotFound { - return evaluate(resolveFunction(rm, function)); + return evaluate(resolveFunction(rm, function), args); } public static T evaluate(String module, String function, Object ... args) throws ValueNotFound { @@ -151,7 +151,7 @@ public class SCLFunctions { } } - public static T evaluateGraph(String module, String function, Object graph, Object ... args) throws DatabaseException { + public static T evaluateGraph(String module, String function, ReadGraph graph, Object ... args) throws DatabaseException { final SCLContext context = SCLContext.getCurrent(); SCLContext.push(context); Object oldGraph = context.put(GRAPH, graph); @@ -163,7 +163,7 @@ public class SCLFunctions { } } - public static void runWithGraph(Object graph, Runnable r) { + public static void runWithGraph(ReadGraph graph, Runnable r) { final SCLContext context = SCLContext.getCurrent(); SCLContext.push(context); Object oldGraph = context.put(GRAPH, graph); @@ -177,7 +177,7 @@ public class SCLFunctions { private static Object[] NO_ARGS = new Object[] { Tuple0.INSTANCE }; - public static void asyncRead(final Function f) throws DatabaseException { + public static void asyncRead(final Function f) throws DatabaseException { asyncRead(f, NO_ARGS); } @@ -189,7 +189,7 @@ public class SCLFunctions { SCLContext.push(context); context.put(GRAPH, graph); try { - f.apply(Tuple0.INSTANCE); + f.applyArray(args); } finally { SCLContext.pop(); } @@ -213,7 +213,7 @@ public class SCLFunctions { SCLContext.push(context); ReadGraph oldGraph = (ReadGraph)context.put(GRAPH, graph); try { - return (T)f.apply(Tuple0.INSTANCE); + return (T)f.applyArray(args); } finally { context.put(GRAPH, oldGraph); SCLContext.pop(); @@ -236,7 +236,7 @@ public class SCLFunctions { SCLContext.push(context); context.put(GRAPH, graph); try { - f.apply(args); + f.applyArray(args); } finally { SCLContext.pop(); } @@ -254,9 +254,14 @@ public class SCLFunctions { public static T syncWrite(final Function f, final Object ... args) throws DatabaseException { final SCLContext context = SCLContext.getCurrent(); Object graph = context.get(GRAPH); - if (graph != null) { - return (T)f.apply(Tuple0.INSTANCE); + if (graph != null && graph instanceof WriteGraph) { + return (T)f.applyArray(args); } else { + if (graph != null) { + LOGGER.error( + "SCLContext {} for current thread {} contains an existing graph object but it is not WriteGraph - Somewhere is a function that forgets to remove the graph from the context!!", + context, Thread.currentThread()); + } final SCLReportingHandler printer = (SCLReportingHandler)SCLContext.getCurrent().get(SCLReportingHandler.REPORTING_HANDLER); return Simantics.getSession().syncRequest(new WriteResultRequest() { @Override @@ -265,7 +270,7 @@ public class SCLFunctions { SCLReportingHandler oldPrinter = (SCLReportingHandler)context.put(SCLReportingHandler.REPORTING_HANDLER, printer); ReadGraph oldGraph = (ReadGraph)context.put(GRAPH, graph); try { - return (T)f.apply(args); + return (T)f.applyArray(args); } finally { context.put(GRAPH, oldGraph); context.put(SCLReportingHandler.REPORTING_HANDLER, oldPrinter);