我正在尝试使用协调程序编写自定义文本编辑器,该协调程序将更新AST并为错误创建标记(如果有)。我设法添加了显示在编辑器左侧标尺和问题视图中的标记。但是,我也希望在文本中强调这些错误。这不起作用。没有任何文字加下划线。但是,如果我双击问题视图中的一个错误,则会选择文本编辑器中的相应文本。据我了解,除了标记之外,我还需要添加注释。这是我到目前为止所尝试的:
final IResource resource = ResourceUtil.getResource(getEditorInput());
final IMarker marker = resource.createMarker("com.test.myproblemmarker");
marker.setAttribute(IMarker.MESSAGE, "hello");
marker.setAttribute(IMarker.CHAR_START, 2);
marker.setAttribute(IMarker.CHAR_END, 10);
marker.setAttribute(IMarker.SEVERITY, IMarker.SEVERITY_ERROR);
final IDocumentProvider idp = getDocumentProvider();
final IDocument document = idp.getDocument(getEditorInput());
final IAnnotationModel iamf = idp.getAnnotationModel(getEditorInput());
final SimpleMarkerAnnotation ma = new SimpleMarkerAnnotation("org.eclipse.ui.workbench.texteditor.error", marker);
ma.setText("hello");
iamf.connect(document);
iamf.addAnnotation(ma, new Position(2, 8));
ma.update();
iamf.disconnect(document);
ma.update();
plugin.xml
的相关部分:
<extension id="com.test.problemmarker" point="org.eclipse.core.resources.markers" name="A Problem">
<super type="org.eclipse.core.resources.problemmarker"/>
<super type="org.eclipse.core.resources.textmarker"/>
<persistent value="true"/>
</extension>
<extension point="org.eclipse.ui.editors.markerAnnotationSpecification" id="myannotationspecification" name="MyAnnotation">
<specification
annotationType="com.test.problemannotation"
label="MyAnnotation"
icon="icons/icon16x16.png"
overviewRulerPreferenceKey="clruler"
overviewRulerPreferenceValue="true"
colorPreferenceKey="clcolor"
colorPreferenceValue="255,0,0"
textPreferenceKey="cltext"
textPreferenceValue="true"
verticalRulerPreferenceKey="clvertical"
verticalRulerPreferenceValue="true"
textStylePreferenceKey="clstyle"
textStylePreferenceValue="UNDERLINE"
presentationLayer="4">
</specification>
</extension>
<extension point="org.eclipse.ui.editors.annotationTypes">
<type
markerSeverity="2"
super="org.eclipse.ui.workbench.texteditor.error"
name="com.test.problemannotation"
markerType="com.test.problemmarker"/>
</extension>
自定义文本编辑器继承自TextEditor
,协调程序为MonoReconciler
。当我查看现有的编辑器/协调器实现时,看起来像一个非常标准的设置。我感谢任何帮助!
答案 0 :(得分:2)
好的,我能够自己修复它。问题是,我在TextEditor
子类的构造函数中设置了我自己的首选项存储:
setPreferenceStore(MyPlugin.getDefault().getPreferenceStore());
我在AnnotationPainter
课程中设置了一些断点,并意识到了这一切
注释被禁用。当我从编辑器中删除此行时,会出现注释。
我还注意到只需创建一个标记就足够了。将自动添加相应的注释。