Что видно
В логе успешной сборки — 175 одинаковых предупреждений подряд:
WARN c.g._.b.l.aop.EventPublisherAspect : Failed to publish event
DocumentContextContentChangedEvent[source=DocumentContext@5f77806f]
to context AnnotationConfigApplicationContext@25e16307:
java.lang.NullPointerException: Cannot invoke
"LanguageServerConfiguration.getLanguage()" because the return value of
"ServerContext.getLanguageServerConfiguration()" is null
Стек падения (виден в логе отдельно): ServerContext.computeConfigurationMetadata → Lazy.getOrCompute → ServerContext.getConfiguration.
Пример: сборка PR #4330, задание build (25, ubuntu-latest).
Почему так происходит
EventPublisherAspect.publishEvent сперва пробует найти контекст-владелец события, а не найдя — рассылает во все зарегистрированные Spring-контексты (EventPublisherAspect.java:263). В тестовом прогоне в кэше TestContext висит несколько контекстов от разных @SpringBootTest-конфигураций, и все они зарегистрированы в аспекте-синглтоне. У брошенного контекста ServerContext собран не полностью — getLanguageServerConfiguration() возвращает null, — и слушатель падает. Аспект ловит RuntimeException и печатает предупреждение.
Само по себе это известно: комментарий в аспекте (появился в 08c4db15fe) прямо описывает эту тестовую особенность.
Что стоит разобрать
- Шум. Одно и то же предупреждение печатается сотнями. Настоящая проблема с доставкой событий в таком логе не видна.
- Диагностируемость. В
catch печатается только e.toString() без стека — если сюда прилетит настоящая ошибка слушателя, разбирать её будет нечем.
- Причина, а не следствие.
ServerContext без конфигурации получает события. Возможно, правильнее не слать событие в контекст, чей ServerContext не готов, чем ловить падение постфактум. Тогда и заглушка станет настоящей страховкой.
Что это не
Это не реакция на некорректный код 1С: событие про изменение содержимого документа, ввод тут ни при чём. И это не падение сборки — все проверки зелёные, поведение заглушено намеренно.
Что видно
В логе успешной сборки — 175 одинаковых предупреждений подряд:
Стек падения (виден в логе отдельно):
ServerContext.computeConfigurationMetadata→Lazy.getOrCompute→ServerContext.getConfiguration.Пример: сборка PR #4330, задание
build (25, ubuntu-latest).Почему так происходит
EventPublisherAspect.publishEventсперва пробует найти контекст-владелец события, а не найдя — рассылает во все зарегистрированные Spring-контексты (EventPublisherAspect.java:263). В тестовом прогоне в кэшеTestContextвисит несколько контекстов от разных@SpringBootTest-конфигураций, и все они зарегистрированы в аспекте-синглтоне. У брошенного контекстаServerContextсобран не полностью —getLanguageServerConfiguration()возвращаетnull, — и слушатель падает. Аспект ловитRuntimeExceptionи печатает предупреждение.Само по себе это известно: комментарий в аспекте (появился в
08c4db15fe) прямо описывает эту тестовую особенность.Что стоит разобрать
catchпечатается толькоe.toString()без стека — если сюда прилетит настоящая ошибка слушателя, разбирать её будет нечем.ServerContextбез конфигурации получает события. Возможно, правильнее не слать событие в контекст, чейServerContextне готов, чем ловить падение постфактум. Тогда и заглушка станет настоящей страховкой.Что это не
Это не реакция на некорректный код 1С: событие про изменение содержимого документа, ввод тут ни при чём. И это не падение сборки — все проверки зелёные, поведение заглушено намеренно.