我为自己的DSL编写了一个eclipse编辑器。打开或保存编辑器时,我会检查内容并为任何语法错误创建问题标记。标记按预期显示在我的编辑器中,也显示在“问题”视图中。
我有一个扩展点org.eclipse.ui.ide.markerResolution
并提供了IMarkerResolutionGenerator
的实现,它为问题标记创建了解决方案。这很好用;当我右键单击问题视图中的问题时,快速修复选项显示在上下文菜单中并且工作正常。
我的编辑器扩展SourceViewerConfiguration
并覆盖getQuickAssistAssistant()
,返回QuickAssistAssistant
的扩展名。这允许我在编辑器中右键单击问题并查看菜单中的“快速修复”选项。
当我将鼠标悬停在编辑器中的问题上时,我真的很想得到快速解决方案,就像在java编辑器中一样。目前只有问题文本出现在工具提示中。是否有单独的钩子或是否应该用我已经实施的两个快速固定钩子覆盖?
答案 0 :(得分:1)
我遇到了同样的问题并为自己找到了解决方案:How to implement Quick Fix / Quick Assist for custom eclipse editor?
根据我的理解,标记显示在编辑器中显示的问题视图和注释中(在标尺和鼠标悬停上)。
我使用org.eclipse.ui.editors.annotationTypes
扩展点注册我自己的注释类型和org.eclipse.ui.editors.markerAnnotationSpecification
扩展点来指定外观。在我的自定义SourceViewerConfiguration
类中,我重写getAnnotationHover(...)
以返回DefaultAnnotationHover
对象,并getTextHover(...)
返回DefaultTextHover
对象,因此注释显示在我的源查看器中。
要创建注释,您可以使用org.eclipse.ui.texteditor.SimpleMarkerAnnotation
,您可以构造一个SimpleMarkerAnnotation
将标记对象传递给构造函数。
然后,您需要将注释添加到注释模型。您可以在getAnnotationModel()
上使用SourceViewer
,然后在addAnnotation(Annotation annotation, Position position)
上使用AnnotationModel
。模型中的所有注释都将显示在编辑器中。
您也可以使用org.eclipse.ui.texteditor.AbstractMarkerAnnotationModel
作为注释模型。然后,您不需要首先创建注释对象,因为AbstractMarkerAnnotationModel
提供了方法addMarkerAnnotation(IMarker marker)
。