@CompileStatic整个包?

时间:2015-06-03 17:51:46

标签: groovy

我注意到Groovy的@CompileStatic注释允许注释整个包。

所以我在com.somepackage包中创建了一个package-info.groovy文件,其中包含:

package com.somepackage

到目前为止一切顺利。现在我添加注释:

@CompileStatic
package com.somepackage

import groovy.transform.CompileStatic

突然Eclipse将第2行标记为错误:“Groovy:[静态类型检查] - 未实现的节点类型@第2行,第9列”

这是什么意思?我可以通过这种方式将静态编译应用于整个包吗?或者我必须继续将包中的每个单独的类注释为@CompileStatic

2 个答案:

答案 0 :(得分:1)

Groovy CompileStatic不支持在程序包级别运行。见this discussion。我已经打开GROOVY-7453来纠正这个问题。

您可以将config scriptMavenGradle一起使用,但这会将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")
}

参考文献: