OpenRewrite 学习笔记(四):使用 JavaTemplate 创建复杂 LST

OpenRewrite 学习笔记(四):使用 JavaTemplate 创建复杂 LST

💡 原文中文,约4900字,阅读约需12分钟。
📝

内容提要

LST 是 OpenRewrite 的核心,支持精确的代码修改。JavaTemplate 简化了 LST 的创建,能够动态生成代码片段,支持无类型和有类型占位符,便于插入变量和进行类型检查。通过 JavaTemplate 的 apply 方法,可以轻松应用模板进行代码修改和注解添加。

🎯

关键要点

  • LST 是 OpenRewrite 的核心,支持精确的代码修改。
  • JavaTemplate 简化了 LST 的创建,能够动态生成代码片段。
  • JavaTemplate 支持无类型和有类型占位符,便于插入变量和进行类型检查。
  • 使用 JavaTemplate 的 apply 方法,可以轻松应用模板进行代码修改和注解添加。
  • 创建变量声明的 LST 需要使用 J.VariableDeclarations 和 J.VariableDeclarations.NamedVariable。
  • JavaTemplate 通过合法的代码片段创建模板,支持动态参数化。
  • 无类型占位符用于插入上下文中类型不相关的 LST,常用于注释、类名等。
  • 有类型占位符使用带有类型信息的占位符语法,进行类型检查。
  • JavaTemplate 支持上下文相关和上下文无关的模板。
  • JavaParser 默认只能感知 Java 运行时提供的类型,需额外引入外部库类型。
  • 使用 JavaTemplate 时,可以通过 apply 方法将模板加入到当前的 LST 中。
  • LST 提供多个坐标,指示模板的应用方式,支持多种操作。

延伸问答

什么是 LST,它在 OpenRewrite 中的作用是什么?

LST(Lossless Semantic Tree)是 OpenRewrite 的核心,支持精确的代码修改。

JavaTemplate 如何简化 LST 的创建过程?

JavaTemplate 通过动态生成代码片段,简化了 LST 的创建,避免手动构造复杂的参数。

JavaTemplate 中的无类型占位符和有类型占位符有什么区别?

无类型占位符用于插入类型不相关的 LST,而有类型占位符则用于插入带有类型信息的 LST,并进行类型检查。

如何使用 JavaTemplate 的 apply 方法?

使用 JavaTemplate 的 apply 方法可以将模板加入到当前的 LST 中,指定坐标以确定模板的应用方式。

在 JavaTemplate 中如何引入外部库的类型?

可以通过 JavaParser.Builder.classpath() 方法配置 JavaParser,从项目的运行时类路径中查找外部库的类型。

JavaTemplate 支持哪些类型的模板?

JavaTemplate 支持上下文相关和上下文无关的模板,允许动态参数化和类型检查。

➡️

继续阅读