package org.openhab.automation.jsscripting.internal;
import javax.script.Invocable;
+import javax.script.ScriptContext;
import javax.script.ScriptEngine;
import org.eclipse.jdt.annotation.Nullable;
}
@Override
- public Exception afterThrowsInvocation(Exception e) {
+ protected void beforeInvocation() {
+ super.beforeInvocation();
if (logger == null) {
initializeLogger();
}
+ }
+ @Override
+ public Exception afterThrowsInvocation(Exception e) {
Throwable cause = e.getCause();
if (cause instanceof IllegalArgumentException) {
logger.error("Failed to execute script:", e);
* Therefore, the logger needs to be initialized on the first use after script engine creation.
*/
private void initializeLogger() {
- Object fileName = delegate.getContext().getAttribute("javax.script.filename");
- Object ruleUID = delegate.getContext().getAttribute("ruleUID");
- Object ohEngineIdentifier = delegate.getContext().getAttribute("oh.engine-identifier");
+ ScriptContext ctx = delegate.getContext();
+ Object fileName = ctx.getAttribute("javax.script.filename");
+ Object ruleUID = ctx.getAttribute("ruleUID");
+ Object ohEngineIdentifier = ctx.getAttribute("oh.engine-identifier");
String identifier = "stack";
if (fileName != null) {
private final JSRuntimeFeatures jsRuntimeFeatures;
// these fields start as null because they are populated on first use
- private @Nullable String engineIdentifier;
private @Nullable Consumer<String> scriptDependencyListener;
private boolean initialized = false;
if (localEngineIdentifier == null) {
throw new IllegalStateException("Failed to retrieve engine identifier from engine bindings");
}
- engineIdentifier = localEngineIdentifier;
ScriptExtensionAccessor scriptExtensionAccessor = (ScriptExtensionAccessor) ctx
.getAttribute(CONTEXT_KEY_EXTENSION_ACCESSOR);
throw new IllegalStateException("Failed to retrieve script extension accessor from engine bindings");
}
- scriptDependencyListener = (Consumer<String>) ctx
+ Consumer<String> localScriptDependencyListener = (Consumer<String>) ctx
.getAttribute("oh.dependency-listener"/* CONTEXT_KEY_DEPENDENCY_LISTENER */);
- if (scriptDependencyListener == null) {
+ if (localScriptDependencyListener == null) {
LOGGER.warn(
"Failed to retrieve script script dependency listener from engine bindings. Script dependency tracking will be disabled.");
}
+ scriptDependencyListener = localScriptDependencyListener;
ScriptExtensionModuleProvider scriptExtensionModuleProvider = new ScriptExtensionModuleProvider(
scriptExtensionAccessor, lock);
* @param path a root path
* @return whether the given path is a node root directory
*/
- private boolean isRootNodePath(Path path) {
+ private static boolean isRootNodePath(Path path) {
return path.startsWith(path.getRoot().resolve(NODE_DIR));
}
* @param path a root path, e.g. C:\node_modules\foo.js
* @return the class resource path for loading local modules
*/
- private String nodeFileToResource(Path path) {
+ private static String nodeFileToResource(Path path) {
return "/" + path.subpath(0, path.getNameCount()).toString().replace('\\', '/');
}