Прокси-сервер Clojure 1.2.1 / 1.3 / 1.4, созданный во время выполнения Grails 2.0.0, не работает. 1.2.0 в порядке

Я работаю над расширением плагина Clojure Grails в Grails 2.0.0 (и 2.1.0-SNAPSHOT), и я хотел обновите его до Clojure 1.3.0 и добавьте clojure.tools.logging .

Clojure выдает исключение во время компиляции прокси из ByteArrayOutputStream в функции потока журнала clojure.tools.logging :

ClassCastException: clojure.asm.Type не может быть преобразован в закрытие .lang.IFn

( https://gist.github.com/a6ae681c37091a3d2379 )

Я удалил clojure.tools.logging и записал урезанный прокси из Object :

(proxy [java.lang.Object] [] (toString [] «toString прокси») )

, а также выбросило то же исключение ClassCastException и сообщение.

Я попытался напечатать macroexpand-1 прокси и получил то же самое.

Я вернулся к Clojure 1.2.0, и прокси снова работал нормально.

Я пробовал несколько версий 1.4.0, и они показывают то же поведение, что и 1.3.0. 1.2.1 также выдает какое-то исключение, но я пытаюсь достичь 1.3.0, поэтому я не тратил на это много времени.

Трассировка стека указывает на функцию 'gen-method, определенную в одной из форм let generate-proxy в core_proxy.clj .

Я добавил немного println , чтобы посмотреть, смогу ли я уловить, что происходит. Возможно, это следующее утверждение выдаст огромное непонимание читателя с моей стороны, но простое добавление этих println изменило поведение во время компиляции таким образом, которого я совершенно не ожидал. Местоположение и тип исключения полностью изменились, хотя все тесты Clojure в mvn package продолжают проходить.

Например, простое добавление одного println к gen-методу прямо перед тем, как он начинает генерировать байт-код, привело к тому, что Clojure сгенерировал

ClassCastException: clojure.lang.PersistentArrayMap нельзя преобразовать в java.lang.Class

( https: //gist.github.com / 5a7a40929a6c4a104bd5 )

Я встречал различные другие ошибки в зависимости от того, где я поместил println (s), но это наиболее распространенная.

Очевидно, что некоторые аспекты Grails и Clojure здесь некорректно связаны, но я не вижу связи. Сначала я подозревал несовместимость ASM, но поскольку Clojure имеет собственное пространство имен ASM, я не вижу в этом проблемы. Но, возможно, я ошибаюсь, я уже несколько дней смотрю на clojure.lang.Compiler , proxy и generate-proxy , пытаясь получить это на работы, и я практически перестал продвигаться вперед, потому что у меня закончился пар: (

Прошу прощения за отсутствие ссылок. Вы можете скопировать и вставить снизу:

Grails Clojure - github .com / grails-plugins / grails-clojure

Ведение журнала инструментов Clojure - github.com/clojure/tools.logging/blob/master/src/main/clojure/clojure/tools/logging.clj строка 133 - это прокси

103
задан ROMANIA_engineer 19 June 2017 в 22:31
поделиться