Xtext:使用@annotations 创建“JavaDoc”注释

Posted

技术标签:

【中文标题】Xtext:使用@annotations 创建“JavaDoc”注释【英文标题】:Xtext: Creating "JavaDoc" comments with @annotations 【发布时间】:2017-02-03 10:00:33 【问题描述】:

我正在使用 MultiLineCommentDocumentationProvider 为实体提供类似 JavaDoc 的 cmets(使用 /** */)。

但是,如果我对某些参数使用 @(注解),它不会像 Java 中那样变粗,甚至在鼠标悬停时也不会换行。

有没有办法可以使用扩展 Xtext 的 MultiLineCommentDocumentationProvider 来支持上述内容?

例子

/** some description 
@myParam param description */
someEntity(Param myParam) ..

当鼠标悬停在 someEntity(或对它的某个引用)上时应该看起来像:

一些描述

myParam:参数说明

而不是(目前看起来像):

一些描述@myparam 参数描述

提前致谢。

【问题讨论】:

【参考方案1】:

这不是MultiLineCommentDocumentationProvider 的默认功能。你可以使用XbaseHoverDocumentationProvider/XbaseHoverProvider 或者至少让你从中得到启发。

【讨论】:

【参考方案2】:

按照 Christian 的建议,我以这种方式更改了“MyDSLMultiLineCommentDocumentationProvider”:

    @Override
    public String getDocumentation(EObject o) 
        String returnValue = findComment(o);
        String returnValueWithAnnotations = getAnnotatedDocumentation(returnValue);
        return getTextFromMultilineComment(returnValueWithAnnotations);
    

    private String getAnnotatedDocumentation(String returnValue) 
      boolean isFirstAnnotationFound = false;
      StringBuilder result = new StringBuilder("");
    String[] splitted = returnValue.trim().split(" +");
    for (int i = 0; i < splitted.length; i++)
    
      if (splitted[i].charAt(0) == '@')
      
        if (! isFirstAnnotationFound)
        
          result.append("<br><b>Parameters:</b>");
          isFirstAnnotationFound = true;
        
        result.append("<br>"); //new line
        result.append("<b>"); //bold
        result.append(splitted[i].substring(1) + " "); // do not include "@"
        result.append("</b>");
      
      else
      
        result.append(splitted[i] + " ");
      
    
    String resultString = result.toString();
    return resultString.substring(0, resultString.length()-1); // getting rid of the strange "/" in the end
  

【讨论】:

以上是关于Xtext:使用@annotations 创建“JavaDoc”注释的主要内容,如果未能解决你的问题,请参考以下文章

Xtext 和 ANTLR 之间的关系是啥?

Xtext - 在没有语义谓词的情况下解决歧义?

引用实例或文字值的 Xtext 语法

spacemacs放大缩小文本

spacemacs放大缩小文本

使用 OpenOffice API 抓取整个文档树