-
Notifications
You must be signed in to change notification settings - Fork 25
Open
Description
Описание
При использовании с полями типа существует потенциальная проблема: при вызове создаётся новый объект, но существующие экземпляры копируются в новый объект со ссылками на оригинальный объект (через лямбды типа this::computeAllModules).
Текущее состояние
На данный момент проблемы нет, так как:
toBuilder()используется только для свежесозданных объектов- Эти объекты недоступны до завершения операции создания solution
- Внутреннее использование контролируется
Потенциальный риск
Если пользователи библиотеки будут создавать копии объектов вручную с помощью toBuilder(), изменять базовые поля и затем обращаться к lazy-вычисляемым полям, они могут получить некорректные данные, основанные на значениях полей оригинального объекта.
Затронутые классы
Более 30 MDO классов, включая:
- Configuration
- ConfigurationExtension
- ChartOfCharacteristicTypes
- Catalog
- Document
- и другие
Возможные решения (для будущего)
- Реинициализировать
Lazyполя в кастомном билдере послеbuild() - Переопределить
toBuilder()для сброса инициализации lazy полей - Сделать методы ленивых вычислений статическими
Контекст
- PR: Простое объединение работает #534
- Обсуждение: Простое объединение работает #534 (comment)
- Инициатор: @theshadowco
Metadata
Metadata
Assignees
Labels
No labels