mdclasses icon indicating copy to clipboard operation
mdclasses copied to clipboard

Потенциальная проблема с toBuilder() и Lazy полями

Open coderabbitai[bot] opened this issue 2 months ago • 0 comments

Описание

При использовании с полями типа существует потенциальная проблема: при вызове создаётся новый объект, но существующие экземпляры копируются в новый объект со ссылками на оригинальный объект (через лямбды типа this::computeAllModules).

Текущее состояние

На данный момент проблемы нет, так как:

  • toBuilder() используется только для свежесозданных объектов
  • Эти объекты недоступны до завершения операции создания solution
  • Внутреннее использование контролируется

Потенциальный риск

Если пользователи библиотеки будут создавать копии объектов вручную с помощью toBuilder(), изменять базовые поля и затем обращаться к lazy-вычисляемым полям, они могут получить некорректные данные, основанные на значениях полей оригинального объекта.

Затронутые классы

Более 30 MDO классов, включая:

  • Configuration
  • ConfigurationExtension
  • ChartOfCharacteristicTypes
  • Catalog
  • Document
  • и другие

Возможные решения (для будущего)

  1. Реинициализировать Lazy поля в кастомном билдере после build()
  2. Переопределить toBuilder() для сброса инициализации lazy полей
  3. Сделать методы ленивых вычислений статическими

Контекст

  • PR: #534
  • Обсуждение: https://github.com/1c-syntax/mdclasses/pull/534#discussion_r2445025889
  • Инициатор: @theshadowco

coderabbitai[bot] avatar Oct 20 '25 13:10 coderabbitai[bot]