Skip to content

Commit 24fa775

Browse files
committed
JavaScriptScriptLanguage: fix Context detection
Rather than hardcoding the JDK-flavored Rhino Context class name, let's make a best effort to return the correct Context class for the current flavor of JavaScript.
1 parent 94f8315 commit 24fa775

File tree

1 file changed

+21
-1
lines changed

1 file changed

+21
-1
lines changed

src/main/java/org/scijava/plugins/scripting/javascript/JavaScriptScriptLanguage.java

Lines changed: 21 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -86,7 +86,7 @@ public ScriptEngine getScriptEngine() {
8686
final ScriptEngine engine = super.getScriptEngine();
8787
try {
8888
engine.eval("function load(path) {\n"
89-
+ " importClass(Packages.sun.org.mozilla.javascript.internal.Context);\n"
89+
+ " importClass(Packages." + contextClass(engine) + ");\n"
9090
+ " importClass(Packages.java.io.FileReader);\n"
9191
+ " var cx = Context.getCurrentContext();\n"
9292
+ " cx.evaluateReader(this, new FileReader(path), path, 1, null);\n"
@@ -134,4 +134,24 @@ public Object decode(final Object object) {
134134
return null;
135135
}
136136

137+
// -- Helper methods --
138+
139+
private String contextClass(final ScriptEngine engine) {
140+
if (isNashorn()) return "jdk.nashorn.internal.runtime.Context";
141+
142+
final String engineClassName = engine.getClass().getName();
143+
144+
if (isRhino()) {
145+
if (engineClassName.startsWith("com.sun.")) {
146+
// assume JDK-flavored Rhino script engine
147+
return "sun.org.mozilla.javascript.internal.Context";
148+
}
149+
// assume vanilla Mozilla-flavored Rhino script engine
150+
return "org.mozilla.javascript.Context";
151+
}
152+
153+
throw new UnsupportedOperationException("Unknown JavaScript flavor: " +
154+
engineClassName);
155+
}
156+
137157
}

0 commit comments

Comments
 (0)