From: Hannu Niemistö Date: Thu, 28 Feb 2019 14:34:22 +0000 (+0200) Subject: Expose CommandSession in SCL X-Git-Tag: v1.43.0~136^2~183^2 X-Git-Url: https://gerrit.simantics.org/r/gitweb?a=commitdiff_plain;h=refs%2Fchanges%2F39%2F2739%2F1;p=simantics%2Fplatform.git Expose CommandSession in SCL Change-Id: Ie4bee3c9a56f357e8e8797f96254731dcd9878a6 --- diff --git a/bundles/org.simantics.scl.compiler/scl/SCL/CommandSession.scl b/bundles/org.simantics.scl.compiler/scl/SCL/CommandSession.scl new file mode 100644 index 000000000..33b4dd7fc --- /dev/null +++ b/bundles/org.simantics.scl.compiler/scl/SCL/CommandSession.scl @@ -0,0 +1,19 @@ +// This module is meant to be imported with namespace +import "SCL/ModuleRepository" +import "SafeDynamic" + +importJava "org.simantics.scl.compiler.commands.CommandSession" where + data CommandSession + + @JavaName "" + create :: ModuleRepository -> CommandSession + + execute :: CommandSession -> String -> () + + @JavaName getVariableValueAndType + get :: CommandSession -> String -> Maybe SafeDynamic + @JavaName setVariable + set :: CommandSession -> String -> SafeDynamic -> () + + @JavaName removeVariable + remove :: CommandSession -> String -> () \ No newline at end of file diff --git a/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/commands/CommandSession.java b/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/commands/CommandSession.java index d0e44a9c7..00a7714a6 100644 --- a/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/commands/CommandSession.java +++ b/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/commands/CommandSession.java @@ -17,6 +17,7 @@ import java.util.Set; import org.simantics.scl.compiler.common.names.Names; import org.simantics.scl.compiler.constants.StringConstant; +import org.simantics.scl.compiler.dynamic.SafeDynamic; import org.simantics.scl.compiler.elaboration.expressions.EApply; import org.simantics.scl.compiler.elaboration.expressions.EBlock; import org.simantics.scl.compiler.elaboration.expressions.EConstant; @@ -84,6 +85,10 @@ public class CommandSession { */ private boolean validateOnly; + public CommandSession(ModuleRepository moduleRepository) { + this(moduleRepository, SCLReporting.getCurrentReportingHandler()); + } + public CommandSession(ModuleRepository moduleRepository, SCLReportingHandler handler) { this.moduleRepository = moduleRepository; this.defaultHandler = new PrintDecorator( @@ -615,6 +620,11 @@ public class CommandSession { variableTypes.put(name, type); } + public void setVariable(String name, SafeDynamic typeAndValue) { + variableValues.put(name, typeAndValue.value); + variableTypes.put(name, typeAndValue.type_); + } + public Object getVariableValue(String name) { return variableValues.get(name); } @@ -623,6 +633,14 @@ public class CommandSession { return variableTypes.get(name); } + public SafeDynamic getVariableValueAndType(String name) { + Type type = variableTypes.get(name); + if(type == null) + return null; + Object value = variableValues.get(name); + return new SafeDynamic(type, value); + } + public void removeVariable(String name) { variableValues.remove(name); variableTypes.remove(name); diff --git a/bundles/org.simantics.scl.runtime/src/org/simantics/scl/runtime/reporting/SCLReporting.java b/bundles/org.simantics.scl.runtime/src/org/simantics/scl/runtime/reporting/SCLReporting.java index 97ef75f8b..5266b13a2 100644 --- a/bundles/org.simantics.scl.runtime/src/org/simantics/scl/runtime/reporting/SCLReporting.java +++ b/bundles/org.simantics.scl.runtime/src/org/simantics/scl/runtime/reporting/SCLReporting.java @@ -18,6 +18,11 @@ public class SCLReporting { private static final Logger LOGGER = LoggerFactory.getLogger(SCLReporting.class); + public static SCLReportingHandler getCurrentReportingHandler() { + SCLReportingHandler handler = ((SCLReportingHandler)SCLContext.getCurrent().get(SCLReportingHandler.REPORTING_HANDLER)); + return handler == null ? SCLReportingHandler.DEFAULT : handler; + } + public static void print(String text) { SCLReportingHandler handler = ((SCLReportingHandler)SCLContext.getCurrent().get(SCLReportingHandler.REPORTING_HANDLER)); if(handler != null)