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

2023-12-14

我一直在尝试 Java 注释处理器,并取得了很好的结果。 现在我想做以下事情,据我所知这是不可能的。

我有几个实现构建器模式的类。比如说

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

至关重要的是,方法调用的“链”必须使用execute()方法。否则,建设者基本上什么也不做。

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

我想要的到底有可能吗?


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

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

执行此操作的两个最著名的项目是检查框架 and 龙目岛计划。也许您可以从他们的实现中获得灵感,甚至可以在其中之一之上编写注释处理器。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Java注释处理器来分析表达式? 的相关文章

  • 了解 netty 通道缓冲区和水印

    我正在尝试了解网络缓冲区和水印 作为一个测试用例 我有一个 netty 服务器 它向客户端写入数据 客户端被阻止 基本上每次读取之间有 10 秒的睡眠时间 在正常 I O 下 如果接收方被阻塞 TCP 发送方将受到限制 由于流量控制 发送速
  • 垂直 ViewPager 中的动画

    我需要垂直制作这个动画ViewPager https www youtube com watch v wuE 4jjnp3g https www youtube com watch v wuE 4jjnp3g 这是我到目前为止所尝试的 vi
  • Apache Thrift Java-Javascript 通信

    我正在编写一个基于 Apache Thrift 的 Java 服务器 它将从 Javascript 客户端接收数据 我已经完成了 Java 服务器 但问题是我可以获得 Javascript 客户端的工作示例 我无法找到一个好的示例 构建文档
  • H2数据库:如何进行加密保护,而不暴露文件加密密钥

    我们在服务器模式下使用Java H2数据库 因为我们不希望用户访问数据库文件 为了对数据库文件添加更多保护 我们计划使用 AES 加密 将 CIPHER AES 添加到数据库 URL 以防存储被盗 但是 每个用户在连接时还需要提供文件保护密
  • 未注入带有 JPA2 的 Apache Ignite 2.7 IgniteRepository

    使用在 Web 上建立的 guildes 我使用 Spring Data JPA 2 应用程序制作了简单的 Spring Boot 2 仅在 2 7 版本中才向 Apache Ignite 添加了 Spring Boot JPA 2 支持
  • 使用 kryo 注册课程的策略

    我最近发现了 kryonet 库 它非常棒并且非常适合我的需求 然而 我遇到的一个问题是制定一种好的策略来注册所有可以转移的类 我知道我可以在每个对象中编写一个静态方法 该方法将返回它使用的所有类的列表 但我真的不想这样做 为了我自己的时间
  • 如何在Netbeans中设置JList的ListModel?

    我在 Netbeans IDE 的帮助下设计了一个 Swing GUI 该 GUI 包含一个 JList 默认情况下 它使用 QAbstractListModel 将其作为 JList 构造函数中的参数传递以创建该 JList 我想在 Ne
  • 从 CLI 部署 Maven 项目?

    在 IDE 中构建并运行良好 cd home thufir NetBeansProjects HelloMaven JAVA HOME usr lib jvm java 8 openjdk amd64 home thufir local s
  • 膨胀类 android.support.design.widget.NavigationView 时出错

    我按照 NavigationView 的教程进行操作 但无法解决此错误消息 Error inflating class android support design widget NavigationView 教程链接 https www
  • 避免 @Secured 注释的重复值

    我正在尝试使用以下方法来保护我的服务方法 Secured如下 public interface IUserService Secured ROLE ROLE1 ROLE ROLE2 ResponseEntity saveUser Creat
  • 在Java中如何将字节数组转换为十六进制?

    我有一个字节数组 我希望该数组的每个字节字符串转换为其相应的十六进制值 Java中有没有将字节数组转换为十六进制的函数 byte bytes 1 0 1 2 3 StringBuilder sb new StringBuilder for
  • 使用 Guava Ordering 对对象列表进行多条件排序

    我有一个类无法实现可比较 但需要根据 2 个字段进行排序 我怎样才能用番石榴实现这一目标 假设班级是 class X String stringValue java util Date dateValue 我有一个清单 List
  • 了解Kafka流groupBy和window

    我无法理解 kafka 流中的 groupBy groupById 和窗口的概念 我的目标是聚合一段时间内 例如 5 秒 的流数据 我的流数据看起来像 value 0 time 1533875665509 value 10 time 153
  • Janusgraph 0.3.2 + HBase 1.4.9 - 无法设置 graph.timestamps

    我在 Docker 容器中运行 Janusgraph 0 3 2 并尝试使用运行 HBase 1 4 9 的 AWS EMR 集群作为存储后端 我可以运行 gremlin server sh 但如果我尝试保存某些内容 我会得到粘贴在下面的堆
  • Java 8 方法签名不一致

    Java 8 为我们提供了具有很长签名的新方法 如下所示 static
  • 无法连接到docker中的elasticsearch容器

    我正在尝试使用 docker 的官方 elasticsearch 镜像 我遵循了本指南 https www elastic co guide en elasticsearch reference current docker html但是当
  • java Web应用程序中的日期转换

    String date1 13 03 2014 16 56 46 AEDT SimpleDateFormat sdf new SimpleDateFormat dd MM yyyy HH mm ss z sdf setTimeZone Ti
  • Java 中序列化的目的是什么?

    我读过很多关于序列化的文章 以及它如何如此美好和伟大 但没有一个论点足够令人信服 我想知道是否有人能真正告诉我通过序列化一个类我们真正可以实现什么 让我们先定义序列化 然后我们才能讨论它为什么如此有用 序列化只是将现有对象转换为字节数组 该
  • Android ClassNotFoundException:在路径上找不到类

    10 22 15 29 40 897 E AndroidRuntime 2561 FATAL EXCEPTION main 10 22 15 29 40 897 E AndroidRuntime 2561 java lang Runtime
  • 如何使用socket.io发送图像文件(二进制数据)?

    我无法从以下位置发送数据Android Client to NodeJS Server I use Socket IO 客户端 https github com socketio socket io client java我的客户端中的ja

随机推荐

  • 仅在有效文本选择的情况下启用 CKEditor 工具栏按钮?

    我正在开发一个 CKEditor 插件 用于注释文本和添加边距注释 但我希望仅当用户已经选择了一系列文本时才启用一些自定义工具栏按钮 每当用户打字或光标位于单个点 而不是范围 时 按钮 及其关联的命令 都应该被禁用 我是一位经验丰富的插件作
  • 导入错误:无法导入名称“Deque”

    我正在尝试在 Heroku 上托管我的 Discord py 机器人 当我的机器人启动时出现以下错误 2020 01 31T20 49 31 501236 00 00 heroku worker 1 State changed from s
  • 如何使用 git filter-repo 作为带有 Python 模块接口的库?

    我知道我在命令行中将 Python 代码作为字符串给出 例如 git filter repo name callback return name replace b Wiliam b William 但特别是当我进入更复杂的脚本时 这会变得
  • 无法加载库“libdl.so.2”

    我一直在尝试将 linux 编译的预构建共享库与我的 android jni 应用程序一起使用 但是当我尝试运行该应用程序时 它会出现以下错误 04 16 19 09 13 633 E dalvikvm 11810 dlopen data
  • 在原始类类型上忽略显式方法类型参数;编译器错误? [复制]

    这个问题在这里已经有答案了 我在调用具有显式类型参数的泛型方法时收到编译器错误 就好像未考虑显式类型参数一样 最小的例子 class CastExample static class ThingProducer
  • 多个 AND 条件 MySQL

    如何在一个子句中包含多个 AND 条件 喜欢SELECT FROM database WHERE x x y y AND z z我尝试过 但没有成功 谢谢 SELECT FROM table WHERE x x AND y y AND z
  • “人民币”货币符号的 HTML 标签是什么?

    什么 HTML 标签代表中国货币符号 或者有这样的标签吗 我猜你的意思是 的 HTML 实体 yen 方便的参考
  • 比较 bash 脚本中的数字

    我编写了这个脚本来比较 bash 中的 2 个数字 但它给了我一些数字的错误答案 就像如果我给它 2 2 作为输入 它会给我 X 大于 Y bin bash read num1 read num2 if num1 gt num2 then
  • 从 Nib 文件加载自定义表格视图单元

    我目前正在研究苹果文档中的一个示例 但在找到他们正在谈论的一些内容时遇到了一些麻烦 特别是在里面 仔细查看表格视图单元格 gt 从 Nib 文件加载自定义表格视图单元格 Here 我不确定需要设置哪个类 7 在nib文档窗口中选择File
  • 从 DatagridView 创建 Tiff 位图文件

    我想从 Datagridview 创建 Tiff 文件 我能够将 Datagridview 获取到 Tiff 文件 但我只想要行和列 而不需要其他任何东西 不使用第三方工具可以实现吗 Private Sub Form1 Load sende
  • 像钟摆一样旋转布局[关闭]

    很难说出这里问的是什么 这个问题模棱两可 含糊不清 不完整 过于宽泛或言辞激烈 无法以目前的形式合理回答 如需帮助澄清此问题以便重新打开 访问帮助中心 我可以像钟摆一样移动膨胀的布局或对话框或 另一种方式 等吗 膨胀布局包含一些图像视图和文
  • OKHTTP newCall() 调用 REST API 时挂起

    尝试使用 JAVA OKHttp 发布到restAPI 我的代码如下所示 try loggingInterceptor new HttpLoggingInterceptor loggingInterceptor setLevel HttpL
  • CSS - 即使没有足够的内容,也将页脚放在页面底部[重复]

    这个问题在这里已经有答案了 With HTML CSS 我需要得到footer被放置在bottom即使有页面no enough content 如果有大量内容导致滚动 则很容易实现这一点 当内容不足时就会出现问题 因为在这种情况下 页脚会上
  • 基于堆栈的机器依赖于基于寄存器的机器?

    普通 CPU 例如 Android 设备 是基于寄存器的机器 Java虚拟机是一个基于堆栈的机器 但是基于堆栈的机器是否依赖于基于寄存器的机器来工作 基于堆栈的机器不能孤独运行吗 因为它不是操作系统 除了 JVM 之外 还有其他基于堆栈的机
  • Jupyter Notebook:在上一行输出图像

    我想在我的 jupyter 笔记本中并排绘制一些图像 这样可以节省一些展示空间 例如 这是通过 fig plt figure figsize 14 3 ax1 fig add subplot 1 3 1 projection 3d ax2
  • 为什么在控制器上下文之外获取路由值如此困难?

    我不明白这背后是什么意思 为什么这么容易获取内部的路由值Request控制器但几乎不可能做同样的事情HttpContext Current Request 也许我只是不知道更好的方法 但它确实存在 有人可以确认这是在控制器外部获取路线数据的
  • 如何过滤与android room db的一对多关系

    我有一个用户实体和一个记录实体 我想要获取一个列表 其中显示所有用户及其按记录日期过滤的记录列表 然而 我陷入了无法用条件过滤结果的困境 def room version 2 2 5 implementation androidx room
  • matplotlib.pyplot 在相等范围内绘制 x 轴刻度

    我需要根据 x 值序列绘制 y 值序列 x 值在很大范围内变化 pyplot 似乎使用线性 x 轴 所以下面的代码给了我一个不好的数字 def bad plot x 1 2 10 100 1000 y 5 10 6 7 9 plt plot
  • 如何在谷歌应用程序引擎中从 twilio 帮助程序库创建调用

    我正在尝试使用 Google 应用程序引擎创建出站呼叫Twilio Java 帮助程序库 Example private void createcall HttpServletRequest req HttpServletResponse
  • Java注释处理器来分析表达式?

    我一直在尝试 Java 注释处理器 并取得了很好的结果 现在我想做以下事情 据我所知这是不可能的 我有几个实现构建器模式的类 比如说 new FooBuilder doSomething A doSomethingElse B execut