Eclipse PDE:如何获取IMarker类型的显示值

Eclipse PDE: how to get the display value of IMarker type

这看起来是一个简单的问题,但我没有从 google 那里得到任何想法。在 Eclipse IDE 中,当我使用 java 项目时,"Problems" 视图将动态显示错误和警告。我试图在我的 PDE 项目中包含一个类似的功能。我得到了 IMarker 对象

IMarker[] markers = ResourcesPlugin.getWorkspace().getRoot().findMarkers(IMarker.PROBLEM, true, IResource.DEPTH_INFINITE);

每个对象的类型都是 "org.eclipse.jdt.core.problem"。这是 IJavaModelMarker 中定义的 JAVA_MODEL_PROBLEM_MARKER 的常量值。在 IDE 的 "Markers" 视图中,它将显示为 "Java Problems"。我不确定如何获得 "org.eclipse.jdt.core.problem" 和 "Java Problems" 之间的映射?任何信息表示赞赏。谢谢

名称是使用 org.eclipse.jdt.core 插件中定义标记的扩展点的 'name' 属性声明的:

<extension id="problem" point="org.eclipse.core.resources.markers"
           name="Java Problems">
    <super type="org.eclipse.core.resources.problemmarker"/>
    <super type="org.eclipse.core.resources.textmarker"/>
    <persistent value="true"/>
    <attribute name="id"/>
    <attribute name="flags"/>
    <attribute name="arguments"/>
    <attribute name="categoryId"/>
</extension>   

因此,要获得此值,您需要读取所有标记扩展点并找到您想要的那个:

IExtensionPoint point = Platform.getExtensionRegistry().getExtensionPoint(ResourcesPlugin.PI_RESOURCES,
            ResourcesPlugin.PT_MARKERS);

IExtension [] extensions = point.getExtensions();

for (IExtension extension : extensions) {
    String id = ext.getUniqueIdentifier();

    if ("org.eclipse.jdt.core.problem".equals(id)) {
       String label = ext.getLabel();

       // TODO save the label
    }
}

详情取自org.eclipse.ui.views.markers.internal.MarkerTypesModel