Алексей Владыкин


Groovy Caught BUG

30 августа 2011 Groovy

Обнаружил сегодня интересный баг в Groovy 1.8.0. Следующий элементарный скрипт с множественным присваиванием приводит к фатальной ошибке в интерпретаторе Groovy:

// A.groovy
def (a, b) = [1, 2]

Т.е. пишем в консоли groovy A.groovy и получаем ошибку:

Caught: BUG! exception in phase 'conversion' in source unit 'A.groovy'
org.codehaus.groovy.ast.expr.ArgumentListExpression cannot be cast to org.codehaus.groovy.ast.expr.VariableExpression

В Groovy 1.7.x этот код работал как часы.

Что интересного в этом баге? Интересно в нем то, что он проявляется только в Groovy, установленном при помощи Windows Installer. Если же скачать ZIP-архив Groovy и распаковать его, то groovy.bat оттуда работает прекрасно и никаких ошибок не выдает.

То ли в инсталлятор запихали неправильную сборку Groovy, то ли имеет место более тонкий спецэффект. Пусть теперь разработчики разбираются. Баг GROOVY-4821.

Дополнение от 2011-05-11. Причиной проблемы был Groovy++, который по умолчанию ставится инсталлятором. Про поддержку множественного присваивания в Groovy++ есть баг, но починка его в ближайшие планы разработчиков явно не входит. Решение — переустановить Groovy без Groovy++ или просто снести groovypp*.jar из $GROOVY_HOME/lib.

К оглавлению блога