fix(types): не удерживать DocumentContext в кэше контрактов событий#4137
Conversation
EventContractsIndex кэшировал значение как Lazy, supplier которого (`() -> buildFor(documentContext)`) захватывал весь DocumentContext. Lazy из io.github.1c-syntax:utils не обнуляет supplier после вычисления, поэтому каждая запись держала сильную ссылку на DocumentContext вместе с его SymbolTree (который clearSecondaryData не освобождает). В итоге индекс, кэширующий крошечную карту «имя метода → контракт», пиннил деревья символов всех проанализированных модулей. computeIfAbsent сам откладывает вычисление до первого обращения и выполняет buildFor однократно, поэтому Lazy здесь избыточен. Храним готовую карту напрямую — захвата DocumentContext больше нет. buildFor не реентрантен к contractsByUri, так что выполнение под bin-локом CHM безопасно. https://claude.ai/code/session_01UXaicRdUwd7Dm6Qfk8PA7K
|
Warning Review limit reached
More reviews will be available in 1 minute and 51 seconds. Learn how PR review limits work. Your organization has used up its prepaid credits, and credit purchases are no longer available. Enable the review add-on in the billing tab to keep reviews running — you're only billed for reviews past your plan's rate limits ($0.25/file). ⌛ How to resolve this issue?After more reviews become available, a review can be triggered using the We recommend that you space out your commits to avoid hitting the rate limit. 🚦 How do rate limits work?CodeRabbit enforces hourly rate limits for each developer per organization. Our paid plans include higher PR review limits than trial, open-source, and free plans. In all cases, reviews become available again over time. During sustained high-volume PR review activity, CodeRabbit may temporarily slow when the next review becomes available. Please see our Fair Usage Limits Policy for further information. ℹ️ Review info⚙️ Run configurationConfiguration used: Path: .coderabbit.yaml Review profile: CHILL Plan: Pro Run ID: 📒 Files selected for processing (1)
✨ Finishing Touches🧪 Generate unit tests (beta)
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
cb892c1 to
325636f
Compare
|



EventContractsIndex кэшировал значение как Lazy, supplier которого
(
() -> buildFor(documentContext)) захватывал весь DocumentContext.Lazy из io.github.1c-syntax:utils не обнуляет supplier после вычисления,
поэтому каждая запись держала сильную ссылку на DocumentContext вместе
с его SymbolTree (который clearSecondaryData не освобождает). В итоге
индекс, кэширующий крошечную карту «имя метода → контракт», пиннил
деревья символов всех проанализированных модулей.
computeIfAbsent сам откладывает вычисление до первого обращения и
выполняет buildFor однократно, поэтому Lazy здесь избыточен. Храним
готовую карту напрямую — захвата DocumentContext больше нет. buildFor
не реентрантен к contractsByUri, так что выполнение под bin-локом CHM
безопасно.
https://claude.ai/code/session_01UXaicRdUwd7Dm6Qfk8PA7K