Pluggable Annotation Processor API可以检索源代码注释吗?

时间:2011-10-28 16:53:38

标签: java annotations comments metaprogramming

我正在使用带有Java6 +的可插入注释处理api来自动创建一些部署XML文件。这些XML文件的一部分包含对象的描述。描述始终与与类本身关联的Javadoc具有相同的内容。我可以强制注释成为@Block注释的一个字段,但这会复制信息。在注释处理过程中是否有任何方法可以获取类/类型注释的内容?

在这个例子中,我希望在注释处理期间得到“我的块的一个很好的描述”。

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

3 个答案:

答案 0 :(得分:15)

在我发布SO之后,我似乎总能找到答案。

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

public class CustomAnnotationProcessor extends AbstractAnnotationProcessor
{
    public boolean process(...)
    {

        // use the protected member, processingEnv

        String comment = processingEnv.getElementUtils().getDocComment(anyElement);


    }
}

答案 1 :(得分:0)

getDocComment听起来应该返回评论。

更新:已移至elements utitlity

答案 2 :(得分:0)

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

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

Kapep的答案看起来很有趣,但请注意它使用com.sun.*包中的内容,这是特定于实现的。除非您完全确定为您的annotatation处理器环境提供的资源是使用这些类实现的,并且您可以安全地从接口转发,所以最好不要使用它。它充其量只是一种脆弱的解决方案。

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