java - 编辑器关闭后如何删除 IMarkers(或者为什么 IMarker.TRANSIENT 属性不起作用)?
问题描述
我正在 Eclipse 中编写一个自定义编辑器,并且只是集成了自定义错误识别。现在我面临一个奇怪的问题:我可以将标记添加到我的编辑器中,并且可以很好地显示,我也可以在编辑器运行时删除它们。
什么不起作用:当我关闭我的编辑器时,我希望标记消失/被删除。
我现在正在做的是
使用像这样设置的瞬态属性创建标记:
marker.setAttribute(IMarker.TRANSIENT, true);
但这似乎并没有改变任何东西。试图通过源查看器 annotation-model删除所有注释。这不起作用,因为当我尝试挂钩到我的 editors
dispose()
方法或将 a 添加DisposeListener
到我的sourceviewers textwidget时, sourceviewer 已经被处理并getSourceViewer().getAnnotationModel();
返回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 不会删除标记。
推荐阅读
- python-3.x - python3 和 pystfp 中的 AWS Secrets Manager 密码问题
- android - 如何使 InetAddress.reachable() 执行得更快?
- python - 如何在网站上抓取嵌入的整数
- docker - Docker:构建映像时永久获取文件
- java - java中的四舍五入问题
- python - 使用 python 和 html 发送邮件
- javascript - 当边界改变时,谷歌地图标记会奇怪地刷新
- xamarin.forms - Xamarin.Forms iOS 使用图像创建动画
- python - 限制pytest中要执行的测试用例的数量
- ios - 在itunesconnect上看不到构建