eclipse plugin -如何覆盖/停止平台SDK提供的问题装饰器



我已经参考了http://www.eclipse.org/articles/Article-Decorators/decorators.html,并且理解使用与SDK装饰器冲突的自定义装饰器是一种不好的做法。

不过,我有一个例外。在我的项目中,我们将各种模型元素的信息存储在一个物理资源文件下。模型元素在project explorer中被表示为单独的节点。当我们编译这些节点时,我想在资源上标记错误,并使用行号指示有错误的确切元素,从而反映出它有错误。但同时在项目资源管理器中,我不希望存储在该资源中的所有节点都有问题标记。只有有错误的节点应该有问题标记。

我已经尝试在BOTTOM_LEFT位置设置自定义装饰器(使用轻量级和非),但我总是得到SDK问题覆盖显示。

还有其他方法可以让这个工作吗?

下面是一个例子。

我们有一个名为nodes.xml的文件,用于保存emf模型。xml看起来像

<xml>
<rootnode name="root">
   <childnode name="child1"/>
   <childnode name="child2"/>
   <rootnode name="subroot">
     <childnode name="subchild1"/>
     <childnode name="subchild2"/>
   </rootnode>
</rootnode>
</xml>

以上所有节点在项目资源管理器中表示为项目下树形结构的不同节点。作为验证的一部分,我们分别验证每个节点根、child1、child2等。如果验证失败的child1,我想添加一个问题标记,使错误得到标记在问题视图上的文件节点。xml在第3行,但在项目资源管理器希望错误的bottom_left覆盖只显示在child1,根和项目节点,而不是在其他节点,如child2,子根等

希望这能解释我想要达到的目标。

我认为你采取的方法不正确。似乎你想从一些Java文件中删除问题,因为在你的世界里,它们不是真正的问题,即使香草Java编译器认为它们是。

相反,您应该向工作区注册一个org.eclipse.core.resources.IResourceChangeListener。将其设置为使用org.eclipse.core.resources.IResourceChangeEvent.POST_BUILD标志进行通知。这样的:

ResourcesPlugin.getWorkspace.addResourceChangeListener(myListener, POST_BUILD);

当你的插件正在启动时,你应该这样做。这将在工作区中任何项目的所有构建之后给您通知。当您感兴趣的项目弹出时,您可以删除所有Java问题标记:

interestingProject.deleteMarkers(
    IJavaModelMarker.JAVA_MODEL_PROBLEM_MARKER, 
    true, IResource.DEPTH_INFINITE);

这将删除Java编译器添加的所有Java标记。然后你可以四处转转,把你需要的添加回去。

一个警告,但是:上面的操作不是很快,可能需要几秒钟扫描所有的文件,即使是中等规模的项目。您可以更聪明地判断要删除哪些文件,但这需要更多的代码和对API更深入的了解。上面的代码片段应该足以让您开始。

最新更新