The JavaScript Nashorn is deprecated with the intention of removing it (learn more about deprecated JavaScript Nashorn).

Please use JavaScript Rhino instead.

To find the usages of the JavaScript Nashorn in the project, run the Deprecated JavaScript validation suite (Analyze > Validation > Validate).


The key differences are listed below. For more information please check Nashorn/Rhino Migration Guide.

Class object and .class property

If a java API accepts a java.lang.Class object, in Nashorn ".class" property (similar to Java) is used. In Rhino you pass script representation of class "as is".

// Nashorn
var types = [com.nomagic.uml2.ext.magicdraw.classes.mdkernel.Class.class]
// Rhino
var types = [com.nomagic.uml2.ext.magicdraw.classes.mdkernel.Class]

var project = com.nomagic.magicdraw.core.Application.getInstance().getProject()
var Finder = com.nomagic.magicdraw.uml.Finder
Finder.byTypeRecursively().find(project, types, false)

Accessing Java packages and classes from script

Nashorn's recommended way to access Java classes (by using Java.type) is not supported in Rhino.

// Nashorn
var Vector = Java.type("java.util.Vector")
var JFrame = Java.type("javax.swing.JFrame")

// Rhino
var Vector = java.util.Vector
var JFrame = Packages.javax.swing.JFrame

Creating Java arrays from script

In Nashorn, you can resolve to a Java array class using the same Java.type API. And array creation is done using new operator. In Rhino, you create a Java array using Java reflection from script.

// Nashorn
var IntArray = Java.type("int[]")
var array = new IntArray(8)

// Rhino
var Array = java.lang.reflect.Array
var intClass = java.lang.Integer.TYPE
var array = Array.newInstance(intClass, 8)

Java exceptions

In Nashorn Java exception objects are thrown "as is". Rhino wraps Java exceptions as a script object. If you want underlying Java exception, use "javaException" property to access it.

try
{
    <...>
} 
catch (e)
{
    // Nashorn
    e.printStackTrace()
    // Rhino
    e.javaException.printStackTrace()
}