Как реализовать Quick Fix / Quick Assist для пользовательского редактора Eclipse? - PullRequest
2 голосов
/ 20 января 2012

Я расширил org.eclipse.ui.editors.text.TextEditor для реализации пользовательского редактора.Для этого редактора я определил тип маркера (org.eclipse.core.resources.markers точка расширения) и тип аннотации (org.eclipse.ui.editors.annotationTypes точка расширения), чтобы пометить определенные части кода в моем редакторе.Я использую примиритель для обновления своей модели аннотаций.

Теперь я хочу добавить функцию быстрого исправления / быстрой помощи.Я просто хочу, чтобы затмение показывало окно с предложениями, когда я наводил курсор на аннотированную часть кода и заменял эту часть на заданную строку, когда я нажимал на предложение.Точно так же, как функция быстрого исправления для редактора Java.

Итак, каков наилучший способ реализовать это поведение?

Я читал о генераторах разрешения маркеров и быстрых вспомогательных процессорах, но явсе еще не понимает, как все это работает вместе ...

Я был бы рад, если бы кто-то мог указать мне правильное направление.

РЕДАКТИРОВАТЬ: Из того, что яДо сих пор понятно, что MarkerResolutionGenerator отвечает за быстрое исправление ошибок в представлении проблем.Чтобы получить быстрые исправления в средстве просмотра исходного кода, мне нужно установить QuickAssistAssistant для моего SourceViewer и реализовать QuickAssistProcessor, который возвращает CompletionProposals.Это правильный способ сделать это?

EDIT2: Мне интересно, нужно ли мне вообще Markers или только Annotations, я в замешательстве ...

Ответы [ 2 ]

3 голосов
/ 25 января 2012

Я наконец узнал, как заставить Quick Fix работать для моего редактора.

Я использую точку расширения annotationTypes, чтобы зарегистрировать свой собственный тип аннотации, и точку расширения markerAnnotationSpecification, чтобы указать внешний вид. В моем пользовательском классе SourceViewerConfiguration я переопределяю getAnnotationHover(...), чтобы вернуть объект DefaultAnnotationHover, и getTextHover(...), чтобы вернуть объект DefaultTextHover, поэтому аннотации отображаются в моей программе просмотра исходного кода.

Затем я переопределяю getReconciler(...), чтобы вернуть MonoReconciler с моей собственной реализацией IReconcilingStrategy, чтобы создать аннотации в ее методе reconcile(...). И, наконец, я переопределяю getQuickAssistAssistant(...), чтобы вернуть QuickAssistAssistant с моей собственной реализацией IQuickAssistProcessor. Метод computeQuickAssistProposals(...) в классе процессора вычисляет предложения по быстрому исправлению, которые появляются, когда я нажимаю CTRL + 1.

Я не создаю Marker объектов и не использую MarkerResolutionGenerator, поскольку концепция маркера гораздо более тяжелая, чем использование только аннотаций, а функциональность, предоставляемая аннотациями, соответствует моим потребностям.

2 голосов
/ 21 января 2012

Вы должны зарегистрировать расширение к точке расширения org.eclipse.ui.ide.markerResolution.Это расширение относится к markerType (с использованием markerId), а также к генератору разрешения.

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

Во время разрешения маркеров не следует беспокоиться об удалении маркеров, так как после выполнения исправления иногда проверка может выполняться снова (например,во время сборки или если автоматическая проверка недоступна, то вручную - но задача обновления маркера не состоит в обновлении списка маркеров).

...