Можно ли узнать, действителен ли код, написанный в редакторе Eclipse, и соответственно отключить/включить кнопку контекстного меню?

Я создаю плагин Eclipse для своего DSL, используя Xtext, и мне нужно добавить пункт контекстного меню для моего редактора (что я уже сделал), но мне нужно выяснить, действителен ли код в редакторе, если да -> этот пункт меню должен быть включен, в противном случае отключен. Можно ли как-то проверить, действителен ли весь код, и соответствующим образом обновить состояние этого пункта контекстного меню? Я добавил этот пункт контекстного меню, добавив этот фрагмент в файл plugin.xml в проекте .ui в Xtext.

<extension point="org.eclipse.ui.menus">
        <menuContribution locationURI="popup:#TextEditorContext?after=additions">
            <command commandId="org.first.langu.ui.handler.InterpreterCommand" style="push">
                <enabledWhen checkEnabled="true">
                    <reference definitionId="org.first.langu.Program.XtextEditor.opened"/>
                </enabledWhen>
            </command>
        </menuContribution>
    </extension>
    <extension point="org.eclipse.ui.commands">
        <command id="org.first.langu.ui.handler.InterpreterCommand" name="Interpret Code"/>
    </extension>
    <extension point="org.eclipse.ui.handlers">
        <handler
                class="org.first.langu.ui.ProgramExecutableExtensionFactory:org.first.langu.ui.handler.InterpretCodeHandler"
                commandId="org.first.langu.ui.handler.InterpreterCommand"/>
    </extension>

В основном мне нужно проверить, действителен ли код в редакторе, а не только что открыт редактор.


person scanyboss    schedule 29.03.2019    source источник
comment
возможно, вам следует взглянуть на концепцию тестеров свойств и проверить, есть ли в файле маркеры (ранее потребуется выполнить сборку). кроме того, что ваше требование не имеет смысла для меня. есть ли проблема, которую вы пытаетесь решить   -  person Christian Dietrich    schedule 29.03.2019
comment
или это про редактор. тогда вы можете проверить аннотации в тестере свойств   -  person Christian Dietrich    schedule 29.03.2019
comment
в моем случае достаточно проверить, есть ли в редакторе маркеры, но есть ли способ автоматически запускать сборку в коде? потому что у меня проблема, когда редактор только что открывается с некоторыми ошибками, и в файле ничего не изменилось, сборка не запускается автоматически, даже если сборка автоматически проверяется непосредственно в eclipse.   -  person scanyboss    schedule 29.03.2019
comment
я не понимаю. ошибки по редактору и по билду должны быть одинаковыми =› зачем вам что то билдить   -  person Christian Dietrich    schedule 29.03.2019
comment
когда я закрываю eclipse с открытым редактором с некоторыми ошибками, снова открываю его и вызываю XtextResource.getErrors(), в этом списке нет ошибок, даже когда я вижу маркеры непосредственно в редакторе Eclipse. но когда я что-то меняю в коде --> срабатывает сборка и выполняется валидация, так что после этого в том списке ошибки   -  person scanyboss    schedule 29.03.2019
comment
если вы не проверите в своем ресурсе, ошибок не будет. я имею в виду аннотации или маркеры в файле, поддерживаемые редактором. проверка в редакторе и сборка не имеют ничего общего друг с другом => мне все еще нужно понять ваш вариант использования   -  person Christian Dietrich    schedule 29.03.2019
comment
Моя цель проста. Когда в коде есть ошибки (то есть какие-то маркеры), пункт контекстного меню отключается. Когда код действителен, он включен. Теперь я реализовал обработчик нажатия на эту кнопку в контекстном меню (InterpretCodeHandler). В этом обработчике также есть метод isEnabled(), в котором я могу определить, включена ли эта кнопка или нет, но в текущей ситуации мне нужен какой-нибудь Listener, который прослушивал бы изменения в редакторе и смотрел, есть ли какие-то ошибки при каждом сохранении файла - › затем установите переменную, которая представляет включенное/отключенное состояние, в правильное состояние.   -  person scanyboss    schedule 29.03.2019
comment
тогда вам следует взглянуть на модель аннотаций редактора   -  person Christian Dietrich    schedule 29.03.2019
comment
см. напр. org.eclipse.xtext.ui.editor.XtextEditorErrorTickUpdater.getSeverity(XtextEditor) — это то, что добавляет красный крестик к значку редактора на вкладке   -  person Christian Dietrich    schedule 29.03.2019
comment
Спасибо большое Кристиан! Это помогло. Даже если в XtextResource.getErrors() в начале затмения нет ошибок, модель аннотаций знает о существующих маркерах. Вы также можете добавить его как ответ на этот вопрос.   -  person scanyboss    schedule 29.03.2019


Ответы (1)


вы можете использовать модель аннотации редактора, чтобы узнать, есть ли какие-либо ошибки. см. org.eclipse.xtext.ui.editor.XtextEditorErrorTickUpdater.getSeverity(XtextEditor) пример извлечения и фильтрации аннотаций. этот класс используется для отображения красного x в значке редактора, если есть ошибки

person Christian Dietrich    schedule 29.03.2019