我注意到Groovy的@CompileStatic
注释允许注释整个包。
所以我在com.somepackage
包中创建了一个package-info.groovy文件,其中包含:
package com.somepackage
到目前为止一切顺利。现在我添加注释:
@CompileStatic
package com.somepackage
import groovy.transform.CompileStatic
突然Eclipse将第2行标记为错误:“Groovy:[静态类型检查] - 未实现的节点类型@第2行,第9列”
这是什么意思?我可以通过这种方式将静态编译应用于整个包吗?或者我必须继续将包中的每个单独的类注释为@CompileStatic
?
答案 0 :(得分:1)
Groovy CompileStatic
不支持在程序包级别运行。见this discussion。我已经打开GROOVY-7453来纠正这个问题。
您可以将config script与Maven或Gradle一起使用,但这会将CompileStatic应用于整个项目,而不仅仅是单个程序包。不幸的是,我认为除了通过注释包中的所有类之外,没有办法对整个包进行操作:(
答案 1 :(得分:0)
使用Groovy编译器配置脚本,您可以将CompileStatic AST Transformation添加到包及其子包的每个类中。
首先创建配置脚本并将其命名为groovycConfig.groovy
:
import org.codehaus.groovy.ast.ClassNode
import static org.codehaus.groovy.control.customizers.builder.CompilerCustomizationBuilder.withConfig
withConfig(configuration) {
source(classValidator: { ClassNode cn -> cn.packageName.startsWith("com.myapp.mypackage") }) {
ast(groovy.transform.CompileStatic)
}
}
然后告诉gradle在编译groovy时使用它
compileGroovy {
groovyOptions.configurationScript = file("groovycConfig.groovy")
}
参考文献: