如何在Xtend活动注解生成的代码中实现方法静态导入?
在Xtend活动注解中实现静态导入方法的解决方案
我明白你的需求——你想让活动注解生成的代码里用上静态导入的方法,而不是每次都写完整的类名调用。当前你的代码能自动导入Collections类,但没法生成静态导入特定方法的语句,这确实需要手动调整API调用。
要实现这个需求,你需要做两个关键调整:
- 主动添加静态导入声明
- 在方法体中直接使用方法名而非带类名的调用
修改后的编译参与者代码
override doTransform(MutableClassDeclaration clazz, extension TransformationContext context) { // 添加静态导入emptyList方法 clazz.addStaticImport("java.util.Collections.emptyList") // 在方法体中直接使用emptyList() clazz.addMethod("foo", [ body = ''' emptyList(); ''' ]) }
代码说明
addStaticImport方法:这个API会帮你生成import static java.util.Collections.emptyList;的静态导入语句,参数是你要导入的方法的全限定名。如果想要静态导入整个类的所有方法,可以写成clazz.addStaticImport("java.util.Collections.*"),不过更推荐只导入需要的方法,避免潜在的命名冲突。- 方法体中的调用:去掉类名前缀,直接写
emptyList(),这样生成的代码就会使用静态导入的方法了。
这样修改后,你最终生成的代码就会和你期望的完全一致:
import static java.util.Collections.emptyList; @MyActiveAnnotation public class MyTest { public void foo() { emptyList(); } }
内容的提问来源于stack exchange,提问作者Johannes Dorn
相关产品推荐
相关产品推荐

