2015-04-13 4 views
0

Я создал плагин для нового языка и использовал DLTK для функции индексирования и поиска.Редактор индексирования и обновления DLTK

Я использую Eclipse, Luna (ФДЭ 3.10.1) и DLTK (5,0)

Мой вопрос: Как я могу вручную повторно индексировать файл и обновить редактор при переключении между вкладками?

Потому что теперь происходит, если файл снова открывается, и время его обновления индексируется, а маркеры ошибок обновляются, но при его переключении он не обновляет маркеры ошибок, поскольку зависимые файлы изменяются на других вкладках.

Я пробовал, как показано ниже: он индексирует, но не обновляет редактор.

Я добавил метод IPartListener2, а частично методBroughtToTop() у меня есть следующий код для индексирования и обновления.

IModelElement model = EditorUtility.getEditorInputModelElement(partRef.getPage().getActiveEditor(), true); 

if (model instanceof ISourceModule) { 
    ProblemCollector prob = new ProblemCollector(); 
    SourceParserUtil.clearCache(); 
    // get cache entry 
    final ISourceModuleInfo cacheEntry = ModelManager.getModelManager().getSourceModuleInfoCache().get((ISourceModule)model); 
    ModuleDeclaration mod = (ModuleDeclaration)SourceParserUtil.parse((ISourceModule)model, prob); 
    SourceParserUtil.putModuleToCache(cacheEntry, mod, prob); 
    SourceParserUtil.enableCache(); 

    IEditorPart editor = partRef.getPage().getActiveEditor(); 
    IEditorInput input = editor.getEditorInput(); 
    try { 
    ((ScriptEditor)editor).getDocumentProvider().resetDocument(input); 
    } 
    catch (CoreException e) { 
    } 
} 

Заранее спасибо.

+0

Немного непонятно, что делает ваш код. Проект должен иметь свой язык и файлы в нем будут индексироваться автоматически после каждого изменения. –

+0

@AlexPanchenko У меня есть язык, где есть разные типы файлов. Например, в программе на C++ у нас есть файлы .cpp и .h. Если я изменяю переменную в зависимом файле .h, она не отражается в файле cpp, когда я переключаю вкладку. Но он отражает изменения, если я снова открою файл cpp. Итак, я хочу сделать обновление вручную из кода, когда я переключаю вкладку в Eclipse. –

ответ

1

Если я правильно понимаю, проблема заключается в повторной проверке файлов после изменения зависимостей. 1. Он не связан с индексом (он просто записывает, что файл содержит некоторые элементы) 2. Он не связан с парсером (который производит AST).

Это должно произойти в строителе. Вы можете попробовать DLTK-поддержку для этого, выполнив IBuildParticipant или IScriptBuilder.

+0

Благодаря @Alex ваш ответ был полезен при поиске решения. Я добавил buildParticipant, расширение для плагина. И затем я добавил IBuildParticipant так же, как ParserBuildParticipant. Когда я переключаюсь между вкладками, я вызываю метод ScriptBuilderUtil.build(). Он будет вызывать метод build() для ParserBuildParticipant, и там я делаю сильное разборе файла. И он повторно индексирует файл и правильно обновляет маркеры проблем. Хотя это немного снижает производительность, потому что индексирование происходит дважды. Трудно понять концепцию индексации DLTK, но теперь она отлично работает. –