Невозможно применить Newify к Groovyshell

Я хочу запустить динамический скрипт с помощью Groovyshell. Но я не хочу писать новое ключевое слово в динамическом сценарии. Итак, я подумал о добавлении CompilerConfiguration с ключевым словом Newify. Но все работает не так, как ожидалось.

CompilerConfiguration configuration = new CompilerConfiguration()
 configuration.addCompilationCustomizers(
            new ASTTransformationCustomizer(
                    [pattern: "[A-Za-z0-9].*"],
                    Newify
            ))
GroovyShell shell = new GroovyShell(profile, configuration)

Тем не менее я получаю ошибку

Не удается найти соответствующий метод sample#BoundingRegion(int, int, int, int)

где BoundingRegion — это класс


person Sanket Bajoria    schedule 29.10.2018    source источник


Ответы (1)


Возможно, вам нужно предоставить больше информации. Это работает для меня:

import org.codehaus.groovy.control.*
import org.codehaus.groovy.control.customizers.*

def script = '''
class Main {
    static main(args) {
        assert BigInteger.new(42).toString() == '42' // Ruby style
        assert BigDecimal('3.14').toString() == '3.14' // Python style matching regex
    }
}
'''

def configuration = new CompilerConfiguration()
configuration.addCompilationCustomizers(
        new ASTTransformationCustomizer(
                [pattern: "[A-Za-z0-9].*"],
                Newify
        ))

new GroovyShell(configuration).evaluate(script)
person Paul King    schedule 31.12.2018