我正在开发一个Eclipse插件,其中声明了一个自定义问题标记。它具有org.eclipse.core.resources.problemmarker
作为其超类型,并且persistent
属性设置为true。我贡献了一个自定义CategorizedProblem
类,其中getMarkerType
返回了我的自定义标记的ID,我使用自定义reconcile
的{{1}}方法中的问题添加到该类中,使用CompilationParticipant
方法。 ReconcileContext.putProblems
还在CompilationParticipant
属性下声明标记类型:
plugin.xml的相关部分:
managedMarker
来自CompilationParticipant的相关代码:
<extension
point="org.eclipse.jdt.core.compilationParticipant">
<compilationParticipant
class="no.tobask.sb4e.FxControllerValidator"
id="FxControllerValidator"
createsProblems="true">
<managedMarker
markerType="no.tobask.sb4e.fxcontrollerproblemmarker">
</managedMarker>
</compilationParticipant>
</extension>
<extension
id="no.tobask.sb4e.fxcontrollerproblemmarker"
point="org.eclipse.core.resources.markers">
<super
type="org.eclipse.core.resources.problemmarker">
</super>
<persistent
value="true">
</persistent>
</extension>
分类问题:
public void reconcile(ReconcileContext context) {
ICompilationUnit clazz = context.getWorkingCopy();
String className = clazz.findPrimaryType().getFullyQualifiedName();
if (documentListener.isAssignedController(className)) {
URL documentLocation = documentListener.getDocument(className);
try {
String fxmlContent = FXOMDocument.readContentFromURL(documentLocation);
FXOMDocument document = new FXOMDocument(fxmlContent, documentLocation, Activator.getClassLoader(),
I18N.getBundle());
CategorizedProblem[] problems = getProblems(context.getAST(AST.JLS11), document);
if (problems != null) {
context.putProblems("no.tobask.sb4e.fxcontrollerproblemmarker", problems);
}
} catch (IOException | JavaModelException e) {
e.printStackTrace();
}
}
}
问题在于,尽管警告确实在Java编辑器中正确显示,但它未出现在“问题”视图中。