Gradle Groovy@CompileStatic和@TypeChecked顺序、错误或误解

Gradle Groovy@CompileStatic和@TypeChecked顺序、错误或误解,gradle,groovy,compiler-errors,annotations,Gradle,Groovy,Compiler Errors,Annotations,在编译gradle任务类时,我开始遇到一个奇怪的失败。这是我创建的任务: package sample import groovy.transform.CompileStatic import groovy.transform.TypeChecked import org.gradle.api.artifacts.Dependency import org.gradle.api.provider.Property import org.gradle.api.tasks.AbstractCopy

在编译gradle任务类时,我开始遇到一个奇怪的失败。这是我创建的任务:

package sample

import groovy.transform.CompileStatic
import groovy.transform.TypeChecked
import org.gradle.api.artifacts.Dependency
import org.gradle.api.provider.Property
import org.gradle.api.tasks.AbstractCopyTask
import org.gradle.api.tasks.Input
import org.gradle.api.tasks.Internal
import org.gradle.api.tasks.bundling.Zip
import sample.internal.DataSourceXmlConfig

@TypeChecked
@CompileStatic
class DataSource extends Zip {
    @Internal
    final Property<File> warFile = project.objects.property(File.class)

    DataSource() {
        warFile.convention(project.provider {
            def files = project.configurations.getByName('warApp').fileCollection { Dependency d ->
                d.name == (archiveFileName.getOrElse("") - (~/\.[^.]+$/))
            }
            files.empty ? null : files.first()
        })
    }

    /**
     * This function is used to specify the location of data-sources.xml
     * and injects it into the archive
     * @param dsConf The configuration object used to specify the location of the
     * file as well as any extra variables which should be injected into the file
     */
    @Input
    void dataSourceXml(@DelegatesTo(DataSourceXmlConfig) Closure dsConf) {
        filesToUpdate {
            DataSourceXmlConfig ds = new DataSourceXmlConfig()

            dsConf.delegate = ds
            dsConf.resolveStrategy = Closure.DELEGATE_FIRST
            dsConf.call()

            exclude('**/WEB-INF/classes/data-sources.xml')
            from(ds.source) {
                if (ds.expansions) {
                    expand(ds.expansions)
                }
                into('WEB-INF/classes/')
                rename { 'data-sources.xml' }
            }
        }
    }

    private def filesToUpdate(@DelegatesTo(AbstractCopyTask) Closure action) {
        action.delegate = this
        action.resolveStrategy = Closure.DELEGATE_FIRST
        if (warFile.isPresent()) {
            from(project.zipTree(warFile)) {
                action.call()
            }
        }
    }
}


在这一点上,我想我的问题是,这是一个bug还是这两个注释的使用都有我不理解的地方?我更倾向于将其视为一个bug,因为顺序使错误消息消失。

我的猜测是,这两个注释根本不应该一起使用
@CompileStatic
已经暗示了
@TypeChecked
的行为了吗?经过更多的实验,我得出结论,不能同时使用这两种注释。更具体地说,
@CompileStatic
应该明智地使用,并且只有在您完全确定没有使用Groovy的任何动态功能时才可以使用。我的猜测是,这两种注释根本不应该一起使用
@CompileStatic
已经暗示了
@TypeChecked
的行为了吗?经过更多的实验,我得出结论,不能同时使用这两种注释。更具体地说,应该明智地使用
@CompileStatic
,并且只有在您完全确定没有使用Groovy的任何动态特性时才使用。
@CompileStatic
@TypeChecked
class DataSource extends Zip { ... }