如何为自定义eclipse编辑器实现快速修复/快速辅助?

时间:2012-01-20 17:25:28

标签: eclipse editor eclipse-pde eclipse-plugin

我已经扩展org.eclipse.ui.editors.text.TextEditor来实现自定义编辑器。 对于这个编辑器,我已经定义了一个标记类型(org.eclipse.core.resources.markers扩展点)和一个注释类型(org.eclipse.ui.editors.annotationTypes扩展点)来标记编辑器中特定的代码部分。我使用协调程序来更新我的注释模型。

现在我想添加快速修复/快速辅助功能。当我单击一个提案时,当我将鼠标悬停在代码的带注释部分并用给定字符串替换该部分时,我只是想要eclipse,以显示带有提议的框。就像java编辑器的快速修复功能一样。

那么,实现这种行为的最佳方法是什么?

我读过关于标记分辨率生成器和快速辅助处理器的内容,但我仍然感到困惑它们如何一起工作......

如果有人能指出我正确的方向,我会很高兴的。

编辑:根据我目前的理解,MarkerResolutionGenerator负责在问题视图中显示快速修复。要在源查看器中快速修复,我必须为QuickAssistAssistant设置SourceViewer并实现返回QuickAssistProcessor的{​​{1}}。 这是正确的方法吗?

EDIT2:我想知道我是否需要CompletionProposals,或只是Markers,我很困惑......

2 个答案:

答案 0 :(得分:3)

我终于找到了如何让Quick Fix为我的编辑工作。

我使用annotationTypes扩展点注册我自己的注释类型和markerAnnotationSpecification扩展点来指定外观。在我的自定义SourceViewerConfiguration类中,我重写getAnnotationHover(...)以返回DefaultAnnotationHover对象,并getTextHover(...)返回DefaultTextHover对象,因此注释显示在我的源查看器中。

然后,我覆盖getReconciler(...)以使用我自己的MonoReconciler实现返回IReconcilingStrategy,以便在其reconcile(...)方法中创建注释。最后,我覆盖getQuickAssistAssistant(...)以使用我自己的QuickAssistAssistant实现返回IQuickAssistProcessor。当我按CTRL + 1时,处理器类中的computeQuickAssistProposals(...)方法计算显示的快速修复提议。

我不创建任何Marker个对象,也不使用MarkerResolutionGenerator,因为标记概念比仅使用注释更重要,注释提供的功能符合我的需要。 / p>

答案 1 :(得分:2)

您必须在扩展点org.eclipse.ui.ide.markerResolution上注册扩展名。此扩展名是指markerType(使用markerId),也是分辨率生成器。

后一个组件负责计算可能的修复:它读取标记,它可以检查相关文件等,并创建标记解析实例。这些解决方案实例基本上处理错误的文件,并希望能解决原始问题。

在标记解析过程中,您不必担心删除标记,因为在执行修复后,有时验证会再次运行(例如,在构建期间,或者如果没有自动验证,则手动 - 但它不是标记分辨率的任务是更新标记列表。)