如何通过配置脚本将“@POJO”应用到 类?
How to apply `@POJO` to classes via config script?
我有一些 classes 我想保留为 POJO。手动注释其中的每一个都会很麻烦,因为既要更新所有当前的又要添加将来的 classes.
我有一个 SourceAwareCustomizer
能够识别所有这些 class。但是我不知道如何通过配置脚本应用 @POJO
。
我试过 ast(POJO)
,但我会得到一个错误:
Provided class doesn't look like an AST @interface
我深入研究了一下代码,发现 @POJO
不是 AST 转换(它没有用 @GroovyASTTransformationClass
注释。
有没有办法通过配置脚本将 @POJO
或随机注释应用于 class?
POJO 不是 AST 转换。
比较POJO source to ToString(例如)。在 POJO 中,缺少 GroovyASTTransformationClass
注释..
没有@CompileStatic我无法让@POJO工作..
所以,这是我对 groovy 4.0.1 的尝试:
congig.groovy
import org.codehaus.groovy.ast.ClassNode
import org.codehaus.groovy.ast.AnnotationNode
import groovy.transform.stc.POJO
import groovy.transform.CompileStatic
withConfig(configuration) {
inline(phase:'SEMANTIC_ANALYSIS'){Object...args->
if(args.size()>2){
ClassNode cn = args[2]
if( cn.getSuperClass().name=="java.lang.Object" ) {
if( !cn.annotations.find{it.classNode.name==POJO.class.name} ) {
cn.addAnnotation( new AnnotationNode(new ClassNode(POJO.class)) )
//can't see how POJO could work without compile static in groovy 4.0.1
if( !cn.annotations.find{it.classNode.name==CompileStatic.class.name} )
cn.addAnnotation( new AnnotationNode(new ClassNode(CompileStatic.class)) )
}
}
println "class = $cn"
println "annotations = ${cn.getAnnotations()}"
}
}
}
A.groovy
class A{
String id
}
编译命令行:
groovyc --configscript config.groovy A.groovy
生成class
public class A
{
private String id;
@Generated
public A() {}
@Generated
public String getId() {
return this.id;
}
@Generated
public void setId(final String id) {
this.id = id;
}
}
我有一些 classes 我想保留为 POJO。手动注释其中的每一个都会很麻烦,因为既要更新所有当前的又要添加将来的 classes.
我有一个 SourceAwareCustomizer
能够识别所有这些 class。但是我不知道如何通过配置脚本应用 @POJO
。
我试过 ast(POJO)
,但我会得到一个错误:
Provided class doesn't look like an AST @interface
我深入研究了一下代码,发现 @POJO
不是 AST 转换(它没有用 @GroovyASTTransformationClass
注释。
有没有办法通过配置脚本将 @POJO
或随机注释应用于 class?
POJO 不是 AST 转换。
比较POJO source to ToString(例如)。在 POJO 中,缺少 GroovyASTTransformationClass
注释..
没有@CompileStatic我无法让@POJO工作..
所以,这是我对 groovy 4.0.1 的尝试:
congig.groovy
import org.codehaus.groovy.ast.ClassNode
import org.codehaus.groovy.ast.AnnotationNode
import groovy.transform.stc.POJO
import groovy.transform.CompileStatic
withConfig(configuration) {
inline(phase:'SEMANTIC_ANALYSIS'){Object...args->
if(args.size()>2){
ClassNode cn = args[2]
if( cn.getSuperClass().name=="java.lang.Object" ) {
if( !cn.annotations.find{it.classNode.name==POJO.class.name} ) {
cn.addAnnotation( new AnnotationNode(new ClassNode(POJO.class)) )
//can't see how POJO could work without compile static in groovy 4.0.1
if( !cn.annotations.find{it.classNode.name==CompileStatic.class.name} )
cn.addAnnotation( new AnnotationNode(new ClassNode(CompileStatic.class)) )
}
}
println "class = $cn"
println "annotations = ${cn.getAnnotations()}"
}
}
}
A.groovy
class A{
String id
}
编译命令行:
groovyc --configscript config.groovy A.groovy
生成class
public class A
{
private String id;
@Generated
public A() {}
@Generated
public String getId() {
return this.id;
}
@Generated
public void setId(final String id) {
this.id = id;
}
}