Я использую Helios.
Мы пишем плагин, который содержит FormEditor
.В одной из вкладок этого редактора находится вложенный редактор JS.В этом редакторе JS мы бы хотели, чтобы наша объектная модель отображалась в режиме автозаполнения.
Я выяснил, как автоматически добавить JS Nature и нашу библиотеку в путь сборки JS текущего проекта.когда открывается один из наших файлов (это поведение можно отключить).
У нас есть заглушки JSDoc, a, IJsGlobalScopeContainerInitializer
, a SystemLibraryLocation
и т. д.
public class LibInitializer extends JsGlobalScopeContainerInitializer implements IJsGlobalScopeContainerInitializer {
//...
public int getKind() {
return IJsGlobalScopeContainer.K_SYSTEM;
}
public boolean canUpdateJsGlobalScopeContainer(IPath containerPath, IJavaScriptProject project) {
return true;
}
static class LibLocation extends SystemLibraryLocation {
//...
LibLocation() {
super();
}
public char[][] getLibraryFileNames() {
// what's plural of "chars"?
return LibInitializer.LIBRARY_FILE_CHARSES;
}
public IPath getWorkingLibPath() {
// stash our libraries in our state location for Easy Access.
return WebFormsUIPlugin.getDefault().getStateLocation().append( "jsLib" ); //$NON-NLS-1$
}
Код вызывается при инициализации нашего редактора JS.Все возвращенные пути кажутся действительными.
Но я не могу до конца жизни понять, почему наши объекты не появляются в автозаполнении, JSDoc или чем-то еще.Параметры отладки JS Editor не очень полезны.Нет никаких исключений в журналах или выходных данных консоли (которые я могу найти).
Как определить, правильно ли анализируются мои библиотечные файлы?Есть ли способ вывести все доступные классы JS?
РЕДАКТИРОВАТЬ Дополнительная информация:
Редактор JS действует на ByteArrayStorageEditorInput (который мы написали), а не на обычный FileEditorInput.
В этом проекте (JS nature и JS include path являются настройками уровня проекта), если я создаю JS-файл, вся информация о завершении кода будет присутствовать в любой и всех библиотеках в пути include, включая нашу.Но в нашем редакторе я не вижу информации о завершении кода.Не из нашей библиотеки.Не из каких-либо других стандартных библиотек.Даже не «встроенная библиотека ECMAScript».
Так что, похоже, единственный способ добиться этого - использовать файл.Это также привело бы к работе маркеров проблем в нашем редакторе: ни один файл не означает отсутствие списка на вкладке проблем.
Так что это похоже на проблему IEditorInput, а не на проблему с библиотекой JS.