2017-02-10 7 views
0

При отладке некоторого JavaScript, который работает в интерпретаторе Nashorn (работает в версии 2016.3.4), я вижу, что некоторые из переменных отображаются корректно как объекты JavaScript и могут быть оценены в окно Evaluate Expression, в то время как другие отображаются как объекты JO. Те, которые отображаются как объекты JO, не могут быть оценены, поскольку это дает исключение NativeReferenceError.IntelliJ Nashorn отладка и оценка объектов JO дает ошибку

Что я могу сделать, чтобы увидеть объекты JO как переменные JavaScript и оценить их?

IntelliJ window showing how some JavaScript objects cannot be evaluated

ответ

0

Это оказалось удивительно легко работать вокруг. Просто нужно было записать переменные JavaScript в классе Java, чтобы на них можно было ссылаться в окне Evaluate Expression. Класс, как это будет делать работу:

package foo; 

import jdk.nashorn.api.scripting.ScriptObjectMirror; 

public class NashornCapture { 
    private static Object[] args; 
    private static ScriptObjectMirror arg; 

    public static void capture(Object... vars) { 
     args = vars; 
    } 

    public static void capture(ScriptObjectMirror vars) { 
     arg = vars; 
    } 

    public static Object arg(int index) { 
     return args[index]; 
    } 

    public static Object arg(String name) { 
     return arg.get(name); 
    } 
} 

, а затем вы можете ссылаться на переменные по индексу или имени, как на следующем изображении.

IntelliJ window showing how you can evaluate variables using a helper class