可插拔注释处理器 API 能否检索源代码注释?

我正在使用Java6 +的可插入注释处理API来自动创建一些部署XML文件。这些 XML 文件的一部分包含对象的说明。描述始终与与类本身关联的 Javadoc 的内容相同。我可以强制注释成为@Block注释的字段,但这会复制信息。在注释处理期间,有没有办法获取类/类型注释的内容?

在此示例中,我想在注释处理期间获得“我的块的漂亮描述”。

/**
* A nice description of my block
**/
@Block
public class CustomBlock {
}

答案 1

我似乎总是在SO上发帖后立即找到答案。

供将来参考,这是解决方案

import java.util.Set;
import javax.annotation.processing.AbstractProcessor;
import javax.annotation.processing.RoundEnvironment;
import javax.lang.model.element.TypeElement;

public class CustomAnnotationProcessor extends AbstractProcessor
{
    @Override
    public boolean process(Set<? extends TypeElement> set, RoundEnvironment re)
    {
 
        // use the protected member, processingEnv
        
        String comment = processingEnv.getElementUtils().getDocComment(anyElement);
    }
}

答案 2

注释处理 API 使用包中的类。这些模型语言构造和所述模型必须在编译期间生成。由于编译器旨在忽略注释和文档,因此这些包中似乎没有任何内容,我也没有想到会有,这使您可以访问注释/ doc。javax.lang.model(.*)

我不确定javadoc工具如何执行其工作,也许这会有所帮助。

Kapep的答案看起来很有趣,但请注意它使用包中的东西,这是特定于实现的。除非您绝对确定提供给注释处理器环境的资源是使用这些类实现的,并且您可以从接口安全地进行下沉,否则最好不要使用它。这充其量只是一个脆弱的解决方案。com.sun.*

编辑:顺便说一句,我还使用自定义注释+处理器来生成XML格式的元数据,以进行连接,验证等。我还需要描述。因此,我所做的是保留 JavaDoc 用于编程目的和详细信息,这些细节对于直接在代码中使用类的人来说可能很有趣,同时在注释中有一些描述键(如果没有给出,则基于类名/其他注释值的默认值),这些键可用于从某个资源文件中获取描述。该描述面向“最终用户”,侧重于高级内容,而不是代码细节。它具有促进国际化的额外好处。我不确定这对你有什么用处,但有我的两分钱。


推荐