gpt4 book ai didi

java - 处理没有注释的java类型

转载 作者:塔克拉玛干 更新时间:2023-11-01 23:05:37 25 4
gpt4 key购买 nike

我有几个使用 java 注释处理器执行的检查,但我也想检查未注释的类型。

例如,如果我们假设我有一个像 @Responsible(name="xyz") 这样的注解,那么 Hook 编译过程以强制所有注解都存在的最佳方法是什么顶级类型。

在我当前的实现中,我依赖于两个注解,预期的注解(Responsible)和包级别的注解。后者用于“触发”注释处理器,即使不存在预期的注释也是如此。在触发的注释处理器中,我然后搜索和过滤磁盘上的 java 文件(使用传递给编译器的参数)以收集我想要处理的所有文件,并在 java 文件对应于处理器正在处理的注释类型时过滤它们.如果有人在没有指定注释的情况下提交新文件,则构建失败。

有没有更简洁的方法来查找“未注释”类型?

最佳答案

您不必依赖注释来让您的处理器运行。如 the documentation 中所述:

If there are no annotation types present, annotation processing still occurs but only universal processors which support processing "*" can claim the (empty) set of annotation types.

您查找类的方法有点笨拙。相反,您可以依赖包和类之间的父子关系:找出包含有趣类的顶级包元素的名称,然后使用 Element#getEnclosedElements 进入该包(和/或其子包) .或者,您可以在该包内找到一个类——然后使用 Element#getEnclosingElement 提升到最顶层的包。 .可以使用 Elements#getPackageElement 按名称获取包对象和类对象可以通过名称使用 Elements#getTypeElement 获得.

与手动与文件和目录交互相比,不那么脆弱,并且如果源文件在目录之间移动或拆分也不会中断。

请注意,收容令是 "a single package" -> "class" -> "method" -> ... ,每个包的父包都是包本身,而不是它的“父”包( net.example 不包含在 net 中)。

关于java - 处理没有注释的java类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40775186/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com