Eclipse编辑器中的标记不显示消息

我正在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");

这成功地给了我一个正确的线上的形象

在这里输入图像描述

如果我将鼠标悬停在它上面,我会得到一个'你可以点击这个东西'的光标。 但我无法得到消息。

这个信息已经确定,因为:

for (IMarker marker : markers){
          System.out.println("Marker contents"+MarkerUtilities.getMessage(marker));
        } 

代码会按预期生成“标记contentshello”输出。 我究竟做错了什么?

编辑:

该消息出现在问题视图中:

在这里输入图像描述


Njol的答案是正确的,适用于我(Eclipse Neon.1)。

但另外两个建议:

  • 我正在重复使用创建的字段,所以注释hoover并不总是新创建的(getter ... not create method)
  • 默认注释hoover会显示所有注释。 所以当你只想显示标记(而没有其他的 - 例如来自GIT的Diff注释)时,你应该重写isIncluded,就像我下面的例子。
  • 例:

    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;
        }
    }
    

    这里注释hoover类

    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;
        }
    }
    

    您需要使用适当的IAnnotationHover ,它可以在您的SourceViewerConfiguration像这样定义:

    @Override
    public IAnnotationHover getAnnotationHover(ISourceViewer sourceViewer) {
        return new DefaultAnnotationHover(false);
    }
    
    链接地址: http://www.djcxy.com/p/63365.html

    上一篇: Marker in Eclipse editor not showing message

    下一篇: JavaScript Editor Plugin for Eclipse