Я использую библиотеку RSTALanguageSupport , чтобы получить автозаполнение для JavaScript в моем редакторе, часть редактора сделана с библиотекой RSyntaxTextArea , обабиблиотеки работают вместе.
Мне бы хотелось, чтобы LanguageSupportFactory для JavaScript работал бы также для классов и переменных, которые связаны с помощью метода put () движка при оценке JavaScript с использованием сценариев Java, например:
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");
}