如何在编辑器关闭后删除 IMarkers(或者为什么 IMarker.TRANSIENT 属性 不工作)?
How to delete IMarkers after editor closed ( or why isnt the IMarker.TRANSIENT property working)?
我正在 Eclipse 中编写自定义编辑器,并且刚刚集成了自定义错误识别功能。现在我面临一个奇怪的问题:我可以将标记添加到我的编辑器中,这些标记可以正常显示,我也可以在编辑器处于 运行.
时删除它们
什么不起作用: 当我关闭我的编辑器时,我希望标记 disappear/get 被删除。
我现在正在做的是
使用瞬态 属性 创建标记,设置如下:marker.setAttribute(IMarker.TRANSIENT, true);
不过这似乎没有任何改变。
正在尝试通过源查看器 annotation-model 删除所有注释。这不起作用,因为当我尝试连接到我的编辑器 dispose()
方法或将 DisposeListener
添加到我的 sourceviewers textwidget 时,sourceviewer 已经被处理掉和 getSourceViewer().getAnnotationModel();
returns null
.
我的deleteMarkers
方法:
private void deleteMarkers() {
IAnnotationModel anmod = getSourceViewer().getAnnotationModel();
Iterator<Annotation> it = anmod.getAnnotationIterator();
while (it.hasNext()) {
SimpleMarkerAnnotation a = (SimpleMarkerAnnotation) it.next();
anmod.removeAnnotation(a);
try {
a.getMarker().delete();
} catch (CoreException e) {
e.printStackTrace();
}
}
}
感谢任何帮助^^
连接到您的编辑器关闭事件,为编辑器获取对 IResource 的引用(我相信您可以在 IEditorInput 上获得)并在相关资源上调用 IResource#deleteMarkers(),这将在您关闭您的资源时删除它们编辑。按照设计,当编辑器关闭时,eclipse 不会删除标记。
我正在 Eclipse 中编写自定义编辑器,并且刚刚集成了自定义错误识别功能。现在我面临一个奇怪的问题:我可以将标记添加到我的编辑器中,这些标记可以正常显示,我也可以在编辑器处于 运行.
时删除它们什么不起作用: 当我关闭我的编辑器时,我希望标记 disappear/get 被删除。
我现在正在做的是
使用瞬态 属性 创建标记,设置如下:
marker.setAttribute(IMarker.TRANSIENT, true);
不过这似乎没有任何改变。正在尝试通过源查看器 annotation-model 删除所有注释。这不起作用,因为当我尝试连接到我的编辑器
dispose()
方法或将DisposeListener
添加到我的 sourceviewers textwidget 时,sourceviewer 已经被处理掉和getSourceViewer().getAnnotationModel();
returnsnull
.
我的deleteMarkers
方法:
private void deleteMarkers() {
IAnnotationModel anmod = getSourceViewer().getAnnotationModel();
Iterator<Annotation> it = anmod.getAnnotationIterator();
while (it.hasNext()) {
SimpleMarkerAnnotation a = (SimpleMarkerAnnotation) it.next();
anmod.removeAnnotation(a);
try {
a.getMarker().delete();
} catch (CoreException e) {
e.printStackTrace();
}
}
}
感谢任何帮助^^
连接到您的编辑器关闭事件,为编辑器获取对 IResource 的引用(我相信您可以在 IEditorInput 上获得)并在相关资源上调用 IResource#deleteMarkers(),这将在您关闭您的资源时删除它们编辑。按照设计,当编辑器关闭时,eclipse 不会删除标记。