我正在使用 RSTALanguageSupport 库以在我的编辑器中获取JavaScript的自动补全,编辑器部分由库 RSyntaxTextArea 组成>,两个库一起工作。
我希望JavaScript的 LanguageSupportFactory 也适用于在使用Java脚本评估javascript时使用引擎put()方法绑定的类和变量,例如:
engine = new ScriptEngineManager().getEngineByName("JavaScript");
engine.put("obj", new MyClass());
所以当我输入obj时。在编辑器中,它将建议使用MyClass的方法。
gitHub中的这个问题解释了我想要做的事情:
https://github.com/bobbylight/RSyntaxTextArea
我试图实施该问题中给出的解决方案,但没有成功:
public Example() {
expTextArea = new RSyntaxTextArea(20, 60);
expTextArea.setSyntaxEditingStyle(SyntaxConstants.SYNTAX_STYLE_JAVASCRIPT);
sp1 = new RTextScrollPane(expTextArea);
factory = new ScriptEngineManager();
engine = factory.getEngineByName("JavaScript");
JavaScriptLanguageSupport languageSupport = new JavaScriptLanguageSupport();
initMainPanel();
initFrame();
JavaScriptCompletionProvider jsProvider = new JavaScriptCompletionProvider(languageSupport.getJarManager(),
languageSupport);
TypeDeclaration type = JavaScriptHelper.findOrMakeTypeDeclaration(User.class.getName(),
jsProvider.getProvider());
JavaScriptVariableDeclaration subject = new JavaScriptVariableDeclaration("s", Integer.MAX_VALUE,
jsProvider.getProvider(), null);
subject.setTypeDeclaration(type);
jsProvider.getProvider().getVariableResolver().addPreProcessingVariable(subject);
languageSupport.install(expTextArea);
}
public void initFrame() {
frame = new JFrame();
frame.getContentPane();
frame.setTitle("Example");
frame.setSize(500, 500);
frame.setLocationRelativeTo(null);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.getContentPane().add(mainPanel);
}
public void initMainPanel() {
mainPanel = new JPanel(new MigLayout("", "[]", "[]"));
mainPanel.add(sp1, "cell 0 0");
}