我正在为Eclipse中的特定于域的语言构建自定义文本编辑器插件。
我可以检测编辑器内容格式的错误,并希望使用eclipse的标记向用户指出错误。
我在插件中有以下代码:
public static void createMarkerForResource(int linenumber, String message) throws CoreException {
IResource resource = getFile();
createMarkerForResource(resource, linenumber, message);
}
public static void createMarkerForResource(IResource resource, int linenumber, String message)
throws CoreException {
HashMap<String, Object> map = new HashMap<String, Object>();
MarkerUtilities.setLineNumber(map, linenumber);
MarkerUtilities.setMessage(map, message);
MarkerUtilities.createMarker(resource, map, IMarker.PROBLEM);
IMarker[] markers = resource.findMarkers(null, true, IResource.DEPTH_INFINITE);
for (IMarker marker : markers){
System.out.println("Marker contents"+MarkerUtilities.getMessage(marker));
}
}
我使用以下命令运行此代码:
createMarkerForResource(2, "hello");
这成功地为我提供了正确行的图像
如果我将鼠标悬停在它上面,我会得到一个&#39;你可以点击这个东西&#39;光标。 但我无法收到消息。
邮件肯定已被放置,因为:
for (IMarker marker : markers){
System.out.println("Marker contents"+MarkerUtilities.getMessage(marker));
}
代码产生&#34; Marker contentshello&#34;按预期输出。我究竟做错了什么?
编辑:
问题视图中出现 消息:
答案 0 :(得分:2)
Njol的答案是正确的,对我有用(Eclipse Neon.1)。
但另外两项建议:
示例:
import org.eclipse.jface.text.source.SourceViewerConfiguration;
...
public class MySourceViewerConfiguration extends SourceViewerConfiguration {
...
private IAnnotationHover annotationHoover;
...
public MySourceViewerConfiguration(){
this.annotationHoover=new MyAnnotationHoover();
}
...
@Override
public IAnnotationHover getAnnotationHover(ISourceViewer sourceViewer) {
return annotationHoover;
}
}
这里是注释胡佛类
private class MyAnnotationHoover extends DefaultAnnotationHover{
@Override
protected boolean isIncluded(Annotation annotation) {
if (annotation instanceof MarkerAnnotation){
return true;
}
/* we do not support other annotations than markers*/
return false;
}
}
答案 1 :(得分:0)
您需要使用正确的SourceViewerConfiguration
,例如@Override
public IAnnotationHover getAnnotationHover(ISourceViewer sourceViewer) {
return new DefaultAnnotationHover(false);
}
。在您的uniqid()
中定义如下:
$key = 'field_' . uniqid();