当前位置: 首页 > 面试题库 >

Java注释处理器可以分析表达式?

潘修为
2023-03-14
问题内容

我一直在玩Java注释处理器,并取得了不错的成绩。现在,我想做以下事情,据我所知,这是不可能的。

我有几个实现Builder模式的类。举例来说

new FooBuilder().doSomething("A").doSomethingElse("B").execute();

使用execute()方法终止方法调用的“链”至关重要。否则,建造者基本上将什么都不做。

因此,我想使用JAP
execute()在编译时验证某些表达式类型上是否存在方法。不幸的是,我可以检索到的最细粒度的信息似乎在方法声明级别,而不是表达式。

我到底想要什么?


问题答案:

Java的标准注释处理器仅在声明(例如方法和字段声明)处提供回调。

可以使用注释处理器来分析表达式,但这需要更多的工作。您将必须编写一个注释处理器,该处理器在每种方法中都获取该方法的AST(抽象语法树或解析树),然后访问该方法中的每个表达式。AST是特定于编译器的。

执行此操作的两个最著名的项目是Checker Framework和Project
Lombok
。也许您可以从它们的实现中汲取灵感,甚至可以在其中之一的基础上编写注释处理器。



 类似资料:
  • 我正在使用注释处理器来处理方法参数的注释。 用于参数的注释类型有一个注释@参数 现在,当注释处理器运行时,我想检查参数注释()是否有参数注释。我通过执行以下代码来实现这一点。 由于某种原因,arg始终为空。是否有注释未返回的原因?

  • 但当我尝试构建以下类时,它表示找不到AbstractProcessor类: 如何让它识别这个类? 下面是确切的错误: 我的导入内容如下所示: 这是我的java版本:

  • 需要注释处理器的帮助。我创建了一个简单的注释处理器,它使用@autoservice注释来检查注释的字段是否为最终字段。但它没有显示任何编译时错误。这是我的配置 注释: 注释处理器: pom文件: 测试文件:

  • 我使用抽象处理器创建了一个自定义注释和注释处理器。这意味着我想在编译之前进行注释处理。我将自定义注释和处理器导出为Jar,并尝试将其与简单的java测试程序一起使用。我确信在编译时它会找到我的java处理器类,但不知何故,我并没有得到我在控制台上期望的o/p。下面是我的处理器中处理方法的代码。 此外,我故意使用以便我得到一个版本警告,它确认当我执行一个测试类时,它找到了我的注释处理器。 这里是我的

  • 我有下面的课程。两个注释(AnnotA和AnnotB),一个类的子类。java'(带@AnnotA)及其“父”基。java'(带有@AnnotB)。 编译子对象时。java,我的注释处理器报告AnnotA,但它不报告在Base中找到的注释(AnnotB)。JAVA 安诺塔。JAVA 阿诺特。JAVA 基础JAVA 小孩JAVA MyProc。JAVA 这是编译过程及其输出,正如您所看到的,没有关于

  • 问题内容: 我可能只是看错了方向,但我发现有关批注处理的JSE文档非常稀疏。我想编写一个注释处理器,该处理器处理带注释的String字段和局部变量,以计算的String表达式替换它们。这应该不会太复杂,但是我对于Javax.annotation.processing的Javadoc却迷失了。 编辑:我需要在编译时处理批注,因为我想修改生成的代码。它应将带注释的常量String表达式替换为计算的St