我已经扩展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
,我很困惑......
答案 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),也是分辨率生成器。
后一个组件负责计算可能的修复:它读取标记,它可以检查相关文件等,并创建标记解析实例。这些解决方案实例基本上处理错误的文件,并希望能解决原始问题。
在标记解析过程中,您不必担心删除标记,因为在执行修复后,有时验证会再次运行(例如,在构建期间,或者如果没有自动验证,则手动 - 但它不是标记分辨率的任务是更新标记列表。)