Компиляция именованных параметров не удается с @CompileStatic - как это исправить?

Этот кусок кода отлично работает в динамически типизируемом Groovy

buildDirectory.traverse(type: FILES, nameFilter: ~/dependency-updates-report.xml/) {
    reports << it
}

но при добавлении @CompileStatic к классу он получает ошибку, что-то вроде

'traverse' in 'org.codehaus.groovy.runtime.ResourceGroovyMethods' cannot be applied to ...

Это Map Параметр здесь проблема?

РЕДАКТИРОВАТЬ buildDirectory имеет тип java.io.File и вводится.

1 ответ

В случае статической компиляции, подобной этой, вам нужно сделать явное приведение к:

buildDirectory.traverse([type: FILES, nameFilter: ~/dependency-updates-report.xml/] as Map) {
    reports << it
}

Проблема здесь в том, что File.traverse() метод ожидает карту типа

Map<String, Object>

в то время как создание идиоматической карты Groovy создает карту типа

LinkedHashMap<String, Serializable>

Этот Serializable здесь проблема, потому что это не подкласс java.lang.Object,

Другие вопросы по тегам