2

我为自己的 DSL 编写了一个 Eclipse 编辑器。当打开或保存编辑器时,我会检查内容并为任何语法错误创建问题标记。标记按预期显示在我的编辑器中,也在“问题”视图中。

我有一个扩展点org.eclipse.ui.ide.markerResolution并提供了一个IMarkerResolutionGenerator为问题标记创建解决方案的实现。这很好用;当我右键单击问题视图中的问题时,快速修复选项会显示在上下文菜单中并且工作正常。

我的编辑器扩展SourceViewerConfiguration,我覆盖getQuickAssistAssistant(),返回一个扩展QuickAssistAssistant。这使我可以右键单击编辑器中的问题并在菜单中查看“快速修复”选项。

当我将鼠标悬停在编辑器中的问题上时,我真的很想获得快速修复解决方案,就像在 java 编辑器中一样。目前只有问题文本出现在工具提示中。是否有一个单独的钩子,或者它是否应该包含在我已经实施的两个快速修复钩子中?

4

1 回答 1

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)

看看IAnnotationModel界面

于 2012-05-26T11:11:09.010 回答