-
Notifications
You must be signed in to change notification settings - Fork 121
Fix NoSuchElementException in MissingCommonModuleMethodDiagnostic #3636
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: develop
Are you sure you want to change the base?
Conversation
|
Important Review skippedBot user detected. To trigger a single review, invoke the You can disable this status message by setting the Comment |
Changed getMethodNameByLocation to return Optional<String> instead of throwing when terminal node at position is not found. Updated caller to handle empty Optional gracefully. Co-authored-by: nixel2007 <[email protected]>
|
@copilot в какой момент может произойти рассинхронизация? Проведи детальный анализ многопоточного взаимодействия с учётом блокировок |
Анализ многопоточного взаимодействия: Рассинхронизация между 1. Race condition при обновлении документа (наиболее вероятный сценарий) 2. Архитектурная особенность:
3. Блокировки в DocumentContext:
Вывод:
|
|
@copilot ситуация рассинхронизации на ast частая. Попадает ли reference index filler с эвента под computeLock, стоящий вокруг rebuild? Ну и DiagnosticsComputer закрыт diagnostic compute lock'ом |
Проанализировал детальнее: ReferenceIndexFiller и computeLock:
Проблема в другом:
Сценарий:
|
|
@copilot тот момент, когда начнёт выполняться второй ребилд, будет висеть computeLock, diagnostics не смогут запросить старый ast |
Согласен — Однако ошибка реально происходит (Sentry). Возможные сценарии:
Независимо от причины, |
Описание
NoSuchElementExceptionвозникала вgetMethodNameByLocation()при вызовеorElseThrow()когдаfindTerminalNodeContainsPosition()возвращал пустой Optional (при рассинхронизации индекса ссылок и AST).Изменения:
getMethodNameByLocation()теперь возвращаетOptional<String>вместо выброса исключенияgetReferenceToMethodCall()используетflatMapдля корректной обработки пустого результатаСвязанные задачи
Closes https://1c-syntax.sentry.io/issues/7081340854/
Чеклист
Общие
gradlew precommit)Для диагностик
Дополнительно
Все 963 теста проходят успешно. CodeQL проверка не выявила проблем безопасности.
Original prompt
✨ Let Copilot coding agent set things up for you — coding agent works faster and does higher quality work when set up for your repo.