@CompileStatic整个包?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了@CompileStatic整个包?相关的知识,希望对你有一定的参考价值。

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

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

package com.somepackage

到现在为止还挺好。现在我添加注释:

@CompileStatic
package com.somepackage

import groovy.transform.CompileStatic

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

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

答案

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

您可以将config scriptMavenGradle一起使用,但这会将CompileStatic应用于整个项目,而不仅仅是单个包。不幸的是,我认为除了通过注释包中的所有类之外,没有办法对整个包进行处理:(

另一答案

使用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")
}

参考文献:

以上是关于@CompileStatic整个包?的主要内容,如果未能解决你的问题,请参考以下文章

底部的android寻呼机标签条带走整个片段

动态 Rstudio 代码片段

FragmentTransaction.replace() 淡入过渡显示“幽灵”片段

片段 - 您是不是必须在包含整个 Activity 的片段周围使用 Activity Wrapper?

片段替换整个屏幕

sublimetext3中保存代码片段