RSTALanguageSupport库JS代码完成

时间:2019-02-21 14:39:25

标签: java swing

我正在使用 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");
    }

0 个答案:

没有答案