Skip to content

Conversation

@theshadowco
Copy link
Member

Описание

Реализована возможность пропускать некоторые блоки данных при чтении:

  • skipSupport - пропускать чтение поставки
  • skipRoleData - пропускать чтение состава ролей
  • skipXdtoPackage - пропускать чтение содержимого пакетов XDTO
  • skipFormElementItems - пропускать чтение элементов форм
  • skipDataCompositionSchema - пропускать чтение макетов СКД

Связанные задачи

Closes #527

Чеклист

Общие

  • Ветка PR обновлена из develop
  • Отладочные, закомментированные и прочие, не имеющие смысла участки кода удалены
  • Изменения покрыты тестами
  • Обязательные действия перед коммитом выполнены (запускал команду gradlew precommit)

Дополнительно

@coderabbitai
Copy link

coderabbitai bot commented Oct 13, 2025

Walkthrough

Добавлен класс настроек чтения MDCReadSettings и распространён по публичным API и реализациям читателей; конвертеры получили ранние выходы по флагам skip; DataCompositionSchema переведён на ленивое вычисление plainDataSets; тесты, бенчмарки и скрипт benchmark-compare.sh обновлены.

Changes

Cohort / File(s) Summary
Скрипты/инфраструктура
benchmark-compare.sh
При старте безусловно удаляется RESULTS_DIR и затем создаётся заново.
Новые настройки чтения (API)
src/main/java/com/github/_1c_syntax/bsl/mdclasses/MDCReadSettings.java
Добавлен неизменяемый класс настроек чтения с билдером и преднастройками DEFAULT/SKIP_SUPPORT; флаги: skipSupport, skipRoleData, skipXdtoPackage, skipFormElementItems, skipDataCompositionSchema.
Фасад MDClasses (API расширен/обёртки)
src/main/java/com/github/_1c_syntax/bsl/mdclasses/MDClasses.java
Добавлены перегрузки create* принимающие MDCReadSettings; дефолтные методы делегируют на MDCReadSettings.DEFAULT. Устаревшие boolean-версии помечены @Deprecated и делегируют новым.
Интерфейсы/читатели (core)
src/main/java/com/github/_1c_syntax/bsl/reader/MDReader.java, src/main/java/com/github/_1c_syntax/bsl/reader/MDOReader.java, src/main/java/com/github/_1c_syntax/bsl/reader/FakeReader.java
В MDReader добавлен getReadSettings(); MDOReader получил перегрузки с MDCReadSettings и перенёс логику создания ридеров на MDCReadSettings; устаревшие boolean-версии делегируют новым. FakeReader реализует getReadSettings() (возвращает DEFAULT).
Designer/EDT читатели (конструкторы)
src/main/java/com/github/_1c_syntax/bsl/reader/designer/DesignerReader.java, src/main/java/com/github/_1c_syntax/bsl/reader/edt/EDTReader.java
Конструкторы переведены с (Path, boolean) на (Path, MDCReadSettings); добавлено поле/геттер readSettings; чтение поддержки выполняется только если !readSettings.isSkipSupport().
Контексты ридеров
src/main/java/com/github/_1c_syntax/bsl/reader/common/context/MDCReaderContext.java, src/main/java/com/github/_1c_syntax/bsl/reader/common/context/MDReaderContext.java
Инициализация supportVariant выполняется только при наличии UUID и если !getReadSettings().isSkipSupport(), иначе устанавливается SupportVariant.NONE.
Конвертеры с ранним выходом
src/main/java/.../converter/RoleDataConverter.java, .../XdtoPackageDataConverter.java, .../DataCompositionSchemaConverter.java, .../designer/converter/FormElementConverter.java, .../edt/converter/FormItemConverter.java
В unmarshal добавлены проверки флагов из getReadSettings(); при включённом пропуске возвращаются пустые значения/null, парсинг контента пропускается.
MDO-хранилище (ленивость)
src/main/java/com/github/_1c_syntax/bsl/mdo/storage/DataCompositionSchema.java
Плоский список наборов данных переведён на Lazy<List<DataSet>>; добавлены getPlainDataSets() и computePlainDataSets(); рекурсивный сборщик переработан с аккумулятором.
Бенчмарки
src/jmh/java/com/github/_1c_syntax/bsl/mdclasses/benchmark/MDClassesBenchmark.java
Вызовы MDClasses.createConfiguration(...) обновлены для использования MDCReadSettings; добавлена предустановка SKIP_ALL в бенчмарке; удалены неиспользуемые импорты.
Тесты/утилиты
src/test/java/.../ValueTypeTest.java, src/test/java/.../ConfigurationTest.java, src/test/java/.../MDTestUtils.java
В тестах и утилитах заменены boolean-вызовы на MDCReadSettings; добавлен тест testFullSSLSkipAll; в MDTestUtils добавлен overload readConfiguration(..., MDCReadSettings) и при сериализации опущено поле plainDataSets.

Sequence Diagram(s)

sequenceDiagram
  autonumber
  actor Client as Клиент
  participant MC as MDClasses
  participant MR as MDOReader
  participant R as DesignerReader/EDTReader
  participant Conv as Конвертеры
  participant MD as MDClass

  Client->>MC: create(sourcePath[, readSettings])
  MC->>MR: create(sourcePath, readSettings)
  MR->>MR: обнаружение конфигураций/источников
  MR->>R: createReader(path, readSettings)
  R->>R: init (если !readSettings.isSkipSupport() -> ParseSupportData.read)
  loop Разбор ресурсов
    R->>Conv: unmarshal(...)
    alt Соответствующий skip-флаг = true
      Conv-->>R: вернуть EMPTY / null
    else
      Conv-->>R: объект после парсинга
    end
  end
  R-->>MR: собранные MDClass/ы
  MR-->>MC: список MDClass
  MC-->>Client: результат
Loading

Estimated code review effort

🎯 4 (Complex) | ⏱️ ~60 minutes

Possibly related PRs

Poem

Прыгаю в код — ушки ввысь, хвост трубой,
Флаги чтения щёлк — пропускаю то, что лишне.
Лист ленивый под лапкой моей,
Ридеры шепчут: "Skip!" — и парсер отдыхает.
В норе результатов — чисто, каждый запуск — привет! 🐇

Pre-merge checks and finishing touches

❌ Failed checks (2 warnings)
Check name Status Explanation Resolution
Out of Scope Changes Check ⚠️ Warning В PR присутствует изменение в скрипте benchmark-compare.sh, не связанное с задачей по параметризации чтения mdclass и не отражающееся в целях issue #527. Следует убрать или вынести правку benchmark-compare.sh в отдельный PR, чтобы сосредоточиться на параметризации чтения mdclass.
Docstring Coverage ⚠️ Warning Docstring coverage is 20.00% which is insufficient. The required threshold is 80.00%. You can run @coderabbitai generate docstrings to improve docstring coverage.
✅ Passed checks (3 passed)
Check name Status Explanation
Title Check ✅ Passed Заголовок коротко отражает основное изменение PR — введение настроек чтения MDC — и конкретно указывает на его суть без лишнего шума.
Linked Issues Check ✅ Passed PR реализует все основные опции из задачи #527: отключение чтения поддержки, XDTO, элементов формы и схем данных, а также создан отдельный класс настроек MDCReadSettings для работы с ними.
Description Check ✅ Passed Описание подробно перечисляет возможности пропуска блоков данных при чтении, соотносится с изменениями в коде и ссылкой на задачу, что делает его релевантным.
✨ Finishing touches
  • 📝 Generate docstrings
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Post copyable unit tests in a comment
  • Commit unit tests in branch feature/settings

📜 Recent review details

Configuration used: CodeRabbit UI

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 1ef9fc8 and ce1f769.

📒 Files selected for processing (1)
  • src/test/java/com/github/_1c_syntax/bsl/test_utils/MDTestUtils.java (6 hunks)
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (17)
  • GitHub Check: build (17, windows-latest)
  • GitHub Check: build (23, ubuntu-latest)
  • GitHub Check: build (17, ubuntu-latest)
  • GitHub Check: build (21, ubuntu-latest)
  • GitHub Check: build (23, windows-latest)
  • GitHub Check: build (21, windows-latest)
  • GitHub Check: build (17, macOS-latest)
  • GitHub Check: QA
  • GitHub Check: build (21, windows-latest)
  • GitHub Check: build (23, macOS-latest)
  • GitHub Check: build (23, windows-latest)
  • GitHub Check: build (17, ubuntu-latest)
  • GitHub Check: build (21, ubuntu-latest)
  • GitHub Check: build (21, macOS-latest)
  • GitHub Check: build (23, ubuntu-latest)
  • GitHub Check: build (17, macOS-latest)
  • GitHub Check: build (17, windows-latest)
🔇 Additional comments (5)
src/test/java/com/github/_1c_syntax/bsl/test_utils/MDTestUtils.java (5)

115-115: Добавление plainDataSets в список исключаемых полей выглядит корректно.

Исключение поля plainDataSets из сериализации согласуется с переходом на ленивое вычисление для DataCompositionSchema, как указано в описании изменений.


141-141: Использование MDCReadSettings.DEFAULT корректно.

Замена двухпараметрового вызова на использование MDCReadSettings.DEFAULT сохраняет существующее поведение и соответствует новому API.


170-171: Миграция на MDCReadSettings выполнена корректно.

Использование билдера для создания настроек с параметром skipSupport правильно интегрирует новый API, сохраняя обратную совместимость.


187-189: Делегирование обеспечивает обратную совместимость.

Делегирование существующего метода к новой перегрузке с MDCReadSettings — хороший подход для сохранения обратной совместимости API.


191-202: Убрать предложение проверки null для параметра readSettings. Все существующие вызовы передают непустые настройки, дополнительная проверка не нужна.

Likely an incorrect or invalid review comment.


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.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

@github-actions
Copy link
Contributor

github-actions bot commented Oct 13, 2025

Test Results

  522 files  ± 0    522 suites  ±0   7m 27s ⏱️ -26s
  225 tests ± 0    225 ✅ ± 0  0 💤 ±0  0 ❌ ±0 
2 061 runs  +18  2 061 ✅ +18  0 💤 ±0  0 ❌ ±0 

Results for commit ce1f769. ± Comparison against base commit 73d3abd.

♻️ This comment has been updated with latest results.

Copy link

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 3

🧹 Nitpick comments (5)
src/main/java/com/github/_1c_syntax/bsl/mdo/storage/DataCompositionSchema.java (2)

71-73: Рассмотрите возврат неизменяемого списка.

Метод getPlainDataSets() возвращает изменяемый список, что позволяет вызывающему коду модифицировать внутреннее состояние. Для класса, аннотированного @Value (неизменяемый), рекомендуется возвращать Collections.unmodifiableList(plainDataSets.getOrCompute()) для предотвращения случайных изменений.

Примените это изменение:

 public List<DataSet> getPlainDataSets() {
-  return plainDataSets.getOrCompute();
+  return Collections.unmodifiableList(plainDataSets.getOrCompute());
 }

Добавьте импорт:

import java.util.Collections;

82-87: Опечатка в имени метода.

В имени метода fillPlaintDataSetByList содержится опечатка: "Plaint" должно быть "Plain".

Примените это изменение для исправления опечатки:

-private void fillPlaintDataSetByList(List<DataSet> result, List<DataSet> items) {
+private void fillPlainDataSetByList(List<DataSet> result, List<DataSet> items) {
   items.forEach((DataSet dataSet) -> {
     result.add(dataSet);
-    fillPlaintDataSetByList(result, dataSet.getItems());
+    fillPlainDataSetByList(result, dataSet.getItems());
   });
 }

Также обновите вызов в computePlainDataSets():

 private List<DataSet> computePlainDataSets() {
   List<DataSet> result = new ArrayList<>();
-  fillPlaintDataSetByList(result, dataSets);
+  fillPlainDataSetByList(result, dataSets);

   return result;
 }
src/main/java/com/github/_1c_syntax/bsl/reader/common/converter/XdtoPackageDataConverter.java (1)

24-24: Неиспользуемый импорт.

Импорт RoleData не используется в этом файле. Рекомендуется удалить.

-import com.github._1c_syntax.bsl.mdo.storage.RoleData;
src/jmh/java/com/github/_1c_syntax/bsl/mdclasses/benchmark/MDClassesBenchmark.java (1)

67-75: Избегайте лишних аллокаций: переиспользуйте заранее собранные настройки

Строить MDCReadSettings билдером в каждом бенче — лишние аллокации и шум в замерах. Вынесите пресет в константу и используйте её.

Добавьте поле (рядом с путями):

private static final MDCReadSettings SKIP_ALL = MDCReadSettings.builder()
  .skipSupport(true)
  .skipRoleData(true)
  .skipFormElementItems(true)
  .skipXdtoPackage(true)
  .skipDataCompositionSchema(true)
  .build();

И используйте его:

- var model = MDClasses.createConfiguration(configPathEDT,
-   MDCReadSettings.builder()
-     .skipSupport(true)
-     .skipRoleData(true)
-     .skipFormElementItems(true)
-     .skipXdtoPackage(true)
-     .skipDataCompositionSchema(true)
-     .build());
+ var model = MDClasses.createConfiguration(configPathEDT, SKIP_ALL);
- var model = MDClasses.createConfiguration(configPathDesigner,
-   MDCReadSettings.builder()
-     .skipSupport(true)
-     .skipRoleData(true)
-     .skipFormElementItems(true)
-     .skipXdtoPackage(true)
-     .skipDataCompositionSchema(true)
-     .build());
+ var model = MDClasses.createConfiguration(configPathDesigner, SKIP_ALL);

(Опционально: переименовать методы, т.к. пропускаются не только Support.)

Also applies to: 86-94

src/main/java/com/github/_1c_syntax/bsl/reader/designer/DesignerReader.java (1)

99-124: Инициализируйте readSettings до createXMLMapper()

Аналогично EDTReader: this.xstream создаётся раньше, чем присваивается this.readSettings. Чтобы исключить ранние обращения к getReadSettings() с null, сперва установите настройки.

Минимальная перестановка:

-  public DesignerReader(Path path, MDCReadSettings readSettings) {
-    this.xstream = createXMLMapper();
+  public DesignerReader(Path path, MDCReadSettings readSettings) {
+    this.readSettings = java.util.Objects.requireNonNull(readSettings, "readSettings");
+    this.xstream = createXMLMapper();
@@
-      this.rootPath = path;
+      this.rootPath = path;
     }
-    this.readSettings = readSettings;
+    // readSettings уже установлен выше
 
     if (!readSettings.isSkipSupport()) {

Опционально — явный override для единообразия с FakeReader:

@Override
@lombok.NonNull
public MDCReadSettings getReadSettings() {
  return readSettings;
}

(Для проверки ранних обращений используйте тот же скрипт, что в комментарии к EDTReader.)

📜 Review details

Configuration used: CodeRabbit UI

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 73d3abd and 01c2545.

📒 Files selected for processing (20)
  • benchmark-compare.sh (1 hunks)
  • src/jmh/java/com/github/_1c_syntax/bsl/mdclasses/benchmark/MDClassesBenchmark.java (2 hunks)
  • src/main/java/com/github/_1c_syntax/bsl/mdclasses/MDCReadSettings.java (1 hunks)
  • src/main/java/com/github/_1c_syntax/bsl/mdclasses/MDClasses.java (6 hunks)
  • src/main/java/com/github/_1c_syntax/bsl/mdo/storage/DataCompositionSchema.java (3 hunks)
  • src/main/java/com/github/_1c_syntax/bsl/reader/FakeReader.java (2 hunks)
  • src/main/java/com/github/_1c_syntax/bsl/reader/MDOReader.java (5 hunks)
  • src/main/java/com/github/_1c_syntax/bsl/reader/MDReader.java (2 hunks)
  • src/main/java/com/github/_1c_syntax/bsl/reader/common/context/MDCReaderContext.java (2 hunks)
  • src/main/java/com/github/_1c_syntax/bsl/reader/common/context/MDReaderContext.java (1 hunks)
  • src/main/java/com/github/_1c_syntax/bsl/reader/common/converter/DataCompositionSchemaConverter.java (2 hunks)
  • src/main/java/com/github/_1c_syntax/bsl/reader/common/converter/RoleDataConverter.java (2 hunks)
  • src/main/java/com/github/_1c_syntax/bsl/reader/common/converter/XdtoPackageDataConverter.java (2 hunks)
  • src/main/java/com/github/_1c_syntax/bsl/reader/designer/DesignerReader.java (3 hunks)
  • src/main/java/com/github/_1c_syntax/bsl/reader/designer/converter/FormElementConverter.java (1 hunks)
  • src/main/java/com/github/_1c_syntax/bsl/reader/edt/EDTReader.java (3 hunks)
  • src/main/java/com/github/_1c_syntax/bsl/reader/edt/converter/FormItemConverter.java (2 hunks)
  • src/test/java/com/github/_1c_syntax/bsl/examples/ValueTypeTest.java (2 hunks)
  • src/test/java/com/github/_1c_syntax/bsl/mdclasses/ConfigurationTest.java (4 hunks)
  • src/test/java/com/github/_1c_syntax/bsl/test_utils/MDTestUtils.java (5 hunks)
🧰 Additional context used
🧠 Learnings (1)
📚 Learning: 2025-09-05T10:03:02.229Z
Learnt from: johnnyshut
PR: 1c-syntax/mdclasses#515
File: src/test/java/com/github/_1c_syntax/bsl/mdo/AccountingRegisterTest.java:35-37
Timestamp: 2025-09-05T10:03:02.229Z
Learning: The MDTestUtils.getMDWithSimpleTest method already correctly handles optional 4th parameter "_edt" through ArgumentsAccessor - it doesn't need modification to process the additional CSV parameter for subdirectory selection.

Applied to files:

  • src/test/java/com/github/_1c_syntax/bsl/mdclasses/ConfigurationTest.java
🧬 Code graph analysis (2)
src/main/java/com/github/_1c_syntax/bsl/reader/common/converter/DataCompositionSchemaConverter.java (1)
src/main/java/com/github/_1c_syntax/bsl/mdo/storage/EmptyTemplateData.java (1)
  • EmptyTemplateData (27-46)
src/main/java/com/github/_1c_syntax/bsl/mdclasses/MDCReadSettings.java (1)
src/main/java/com/github/_1c_syntax/bsl/mdo/storage/DataCompositionSchema.java (2)
  • Value (42-137)
  • Value (89-129)
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (18)
  • GitHub Check: QA
  • GitHub Check: build (17, windows-latest)
  • GitHub Check: build (23, ubuntu-latest)
  • GitHub Check: build (21, macOS-latest)
  • GitHub Check: build (23, macOS-latest)
  • GitHub Check: build (21, windows-latest)
  • GitHub Check: build (17, ubuntu-latest)
  • GitHub Check: build (23, windows-latest)
  • GitHub Check: build (21, ubuntu-latest)
  • GitHub Check: build (23, windows-latest)
  • GitHub Check: build (21, macOS-latest)
  • GitHub Check: build (23, macOS-latest)
  • GitHub Check: build (17, ubuntu-latest)
  • GitHub Check: build (17, macOS-latest)
  • GitHub Check: build (21, ubuntu-latest)
  • GitHub Check: build (23, ubuntu-latest)
  • GitHub Check: build (21, windows-latest)
  • GitHub Check: build (17, windows-latest)
🔇 Additional comments (17)
src/main/java/com/github/_1c_syntax/bsl/reader/edt/converter/FormItemConverter.java (2)

27-27: LGTM: импорт необходим для реализации функциональности пропуска.

Импорт ExtendXStream корректно добавлен для доступа к настройкам чтения через getCurrentMDReader.


40-42: Проверьте вручную обработку null и null-safety

Скрипты не вернули результатов; убедитесь, что:

  • Все вызовы FormItemConverter.unmarshal корректно обрабатывают null.
  • ExtendXStream.getCurrentMDReader(...) и getReadSettings() не возвращают null и не приводят к NPE.
src/main/java/com/github/_1c_syntax/bsl/mdo/storage/DataCompositionSchema.java (3)

25-25: Ленивая инициализация plainDataSets реализована корректно.

Использование класса Lazy для отложенного вычисления плоского списка наборов данных — правильное решение для оптимизации производительности, особенно когда getPlainDataSets() может не вызываться.

Also applies to: 53-53


61-64: Конструктор корректно упрощён.

Удаление заполнения plainDataSets из конструктора правильно реализует паттерн ленивой инициализации и улучшает производительность при создании объектов схемы компоновки данных.


53-53: Проверьте потокобезопасность com.github._1c_syntax.utils.Lazy
Класс DataCompositionSchema использует Lazy для отложенных вычислений. Убедитесь, что его реализация синхронизирована при одновременном доступе, чтобы избежать повторных вычислений и гонок данных.

src/main/java/com/github/_1c_syntax/bsl/reader/common/context/MDReaderContext.java (1)

97-101: Логика корректна.

Условие правильно проверяет оба требования: наличие UUID и отключенный флаг пропуска. При включённом skipSupport вызов ParseSupportData.get() пропускается, что соответствует заявленным требованиям.

src/main/java/com/github/_1c_syntax/bsl/reader/common/converter/RoleDataConverter.java (1)

42-44: Реализация соответствует общему паттерну.

Ранний выход с RoleData.EMPTY корректен и согласован с аналогичными проверками в других конвертерах.

src/main/java/com/github/_1c_syntax/bsl/reader/common/converter/XdtoPackageDataConverter.java (1)

62-64: Реализация корректна.

Ранний выход с XdtoPackageData.EMPTY соответствует паттерну, используемому в других конвертерах.

src/main/java/com/github/_1c_syntax/bsl/reader/common/converter/DataCompositionSchemaConverter.java (1)

49-51: Реализация соответствует интерфейсу.

Использование EmptyTemplateData.getEmpty() корректно, так как DataCompositionSchema реализует интерфейс TemplateData.

src/main/java/com/github/_1c_syntax/bsl/mdclasses/MDCReadSettings.java (1)

30-67: Класс настроек реализован корректно.

Использование @Value обеспечивает неизменяемость и потокобезопасность. Паттерн Builder удобен для создания различных конфигураций.

Обратите внимание: согласно задаче #527, требовалась также опция «отключить чтение модели табличных документов». Проверьте, покрывается ли это требование флагом skipDataCompositionSchema или требуется отдельный флаг.

src/main/java/com/github/_1c_syntax/bsl/reader/MDReader.java (1)

61-66: Публичный API расширен корректно.

Добавление метода getReadSettings() в интерфейс является ожидаемым изменением для поддержки новой функциональности. Аннотация @NonNull гарантирует, что метод всегда возвращает валидный объект настроек.

src/main/java/com/github/_1c_syntax/bsl/reader/common/context/MDCReaderContext.java (1)

81-85: Реализация согласована с MDReaderContext.

Логика проверки идентична реализации в MDReaderContext.java, что обеспечивает единообразное поведение при пропуске данных поддержки.

src/main/java/com/github/_1c_syntax/bsl/reader/designer/converter/FormElementConverter.java (1)

41-43: Проверьте корректность возврата null.

В отличие от других конвертеров, возвращающих пустые объекты (RoleData.EMPTY, XdtoPackageData.EMPTY), здесь возвращается null. Убедитесь, что все вызывающие места правильно обрабатывают null и это не приведёт к NullPointerException.

src/main/java/com/github/_1c_syntax/bsl/reader/FakeReader.java (1)

73-77: LGTM: корректная реализация getReadSettings()

Возврат DEFAULT для заглушки уместен, аннотации и сигнатура соответствуют API.

src/test/java/com/github/_1c_syntax/bsl/examples/ValueTypeTest.java (1)

127-133: Переход на MDCReadSettings.SKIP_SUPPORT выглядит корректно

Создание конфигурации с предустановкой SKIP_SUPPORT для теста — ок.

src/jmh/java/com/github/_1c_syntax/bsl/mdclasses/benchmark/MDClassesBenchmark.java (1)

55-57: LGTM: вызовы по умолчанию через MDClasses.createConfiguration(Path)

Предзагрузка и кейсы “без пропусков” выглядят корректно.

Also applies to: 61-63

src/main/java/com/github/_1c_syntax/bsl/reader/edt/EDTReader.java (1)

97-128: EDTReader: порядок инициализации readSettings корректен
getReadSettings() не вызывается в createXMLMapper() до присвоения поля, изменений не требуется.

Copy link

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1

♻️ Duplicate comments (1)
benchmark-compare.sh (1)

22-22: Заключение: добавьте кавычки вокруг пути.

rm -rf $RESULTS_DIR без кавычек расколется по пробелам и может зацепить чужие пути/глобbing. С set -e также ловим ошибку, если переменная вдруг пуста. Оберните переменную в кавычки.

-rm -rf $RESULTS_DIR
+rm -rf "$RESULTS_DIR"
🧹 Nitpick comments (1)
src/main/java/com/github/_1c_syntax/bsl/mdo/storage/DataCompositionSchema.java (1)

75-80: Рассмотрите возврат неизменяемого списка.

Метод computePlainDataSets() возвращает изменяемый ArrayList. Для предотвращения случайных модификаций результата извне рекомендуется обернуть возвращаемое значение в Collections.unmodifiableList().

 private List<DataSet> computePlainDataSets() {
   List<DataSet> result = new ArrayList<>();
   fillPlainDataSetByList(result, dataSets);
-  return result;
+  return Collections.unmodifiableList(result);
 }
📜 Review details

Configuration used: CodeRabbit UI

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 01c2545 and 5ff6859.

📒 Files selected for processing (7)
  • benchmark-compare.sh (1 hunks)
  • src/jmh/java/com/github/_1c_syntax/bsl/mdclasses/benchmark/MDClassesBenchmark.java (2 hunks)
  • src/main/java/com/github/_1c_syntax/bsl/mdclasses/MDClasses.java (6 hunks)
  • src/main/java/com/github/_1c_syntax/bsl/mdo/storage/DataCompositionSchema.java (3 hunks)
  • src/main/java/com/github/_1c_syntax/bsl/reader/MDOReader.java (6 hunks)
  • src/main/java/com/github/_1c_syntax/bsl/reader/common/converter/XdtoPackageDataConverter.java (2 hunks)
  • src/test/java/com/github/_1c_syntax/bsl/test_utils/MDTestUtils.java (6 hunks)
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (18)
  • GitHub Check: QA
  • GitHub Check: build (21, ubuntu-latest)
  • GitHub Check: build (23, ubuntu-latest)
  • GitHub Check: build (23, macOS-latest)
  • GitHub Check: build (23, windows-latest)
  • GitHub Check: build (21, macOS-latest)
  • GitHub Check: build (17, windows-latest)
  • GitHub Check: build (21, windows-latest)
  • GitHub Check: build (17, ubuntu-latest)
  • GitHub Check: build (23, windows-latest)
  • GitHub Check: build (17, ubuntu-latest)
  • GitHub Check: build (23, macOS-latest)
  • GitHub Check: build (21, ubuntu-latest)
  • GitHub Check: build (21, windows-latest)
  • GitHub Check: build (17, windows-latest)
  • GitHub Check: build (17, macOS-latest)
  • GitHub Check: build (23, ubuntu-latest)
  • GitHub Check: build (21, macOS-latest)
🔇 Additional comments (17)
src/main/java/com/github/_1c_syntax/bsl/reader/common/converter/XdtoPackageDataConverter.java (3)

1-22: Обновление заголовка авторских прав.

Обновление года до 2025 соответствует текущим изменениям.


25-25: Импорт ExtendXStream добавлен корректно.

Импорт необходим для доступа к текущему MDReader и его настройкам чтения.


61-63: Цепочка вызовов безопасна, константа EMPTY корректна
getCurrentMDReader(reader) возвращает ненулевой mdReader (final-поле в ExtendReaderWrapper), getReadSettings() аннотирован @NonNull, а XdtoPackageData.EMPTY — неизменяемый экземпляр через Lombok‐Builder. Потребуется ручная проверка потокобезопасности MDReader при одновременном использовании.

src/main/java/com/github/_1c_syntax/bsl/mdo/storage/DataCompositionSchema.java (2)

82-87: Одобряю рефакторинг на паттерн аккумулятора.

Переход на статический метод с явным параметром-аккумулятором result делает код более понятным и упрощает тестирование.


53-73: Одобрено отложенное вычисление plainDataSets. Использование Lazy<> соответствует целям оптимизации. Поскольку реализация Lazy не найдена в репозитории, убедитесь вручную, что getOrCompute() потокобезопасен при параллельном доступе.

src/main/java/com/github/_1c_syntax/bsl/reader/MDOReader.java (4)

24-24: Правильная миграция API на MDCReadSettings.

Добавлены новые перегрузки с параметром MDCReadSettings, а старые методы с boolean skipSupport корректно помечены как устаревшие и делегируют вызовы новым перегрузкам. Метод без параметров делегирует вызов с MDCReadSettings.SKIP_SUPPORT, сохраняя обратную совместимость.

Also applies to: 52-78


86-117: Согласованная миграция методов чтения объектов метаданных.

Методы read обновлены по той же схеме, что и readConfiguration: добавлены новые перегрузки с MDCReadSettings, устаревшие методы корректно делегируют вызовы.


125-138: Корректная обработка внешних источников.

Методы readExternalSource правильно обновлены для поддержки MDCReadSettings.


140-156: Приватные методы согласованно обновлены.

Приватные методы createReader корректно обновлены для приёма и передачи MDCReadSettings в конструкторы DesignerReader и EDTReader.

src/jmh/java/com/github/_1c_syntax/bsl/mdclasses/benchmark/MDClassesBenchmark.java (2)

51-57: Корректная конфигурация для бенчмарков.

Константа SKIP_ALL правильно объединяет все флаги пропуска для измерения максимального эффекта оптимизации при чтении конфигурации.


62-63: Бенчмарки обновлены для сравнения производительности.

Методы бенчмарков корректно обновлены для сравнения чтения с настройками по умолчанию и с полным пропуском данных (SKIP_ALL).

Also applies to: 68-68, 74-74, 80-80, 86-86

src/test/java/com/github/_1c_syntax/bsl/test_utils/MDTestUtils.java (2)

26-26: Правильное обновление утилит тестирования.

Добавлен импорт MDCReadSettings и пропуск поля plainDataSets при сериализации в JSON, что соответствует изменениям в структуре данных.

Also applies to: 115-115


141-141: Тестовые методы согласованно мигрированы на MDCReadSettings.

Методы getMDWithSimpleTest, getMDCWithSimpleTest и readConfiguration корректно обновлены для использования MDCReadSettings вместо булевых флагов. Обратная совместимость сохранена через делегирование устаревших методов.

Also applies to: 170-171, 187-208

src/main/java/com/github/_1c_syntax/bsl/mdclasses/MDClasses.java (4)

74-99: Правильная миграция методов создания конфигурации.

Методы createConfiguration корректно обновлены:

  • Метод без параметров делегирует вызов с MDCReadSettings.DEFAULT
  • Новая перегрузка с MDCReadSettings добавлена
  • Устаревший метод с boolean корректно делегирует вызов

117-147: Исправлена проблема игнорирования параметра skipSupport.

Устаревший метод createConfigurations(Path, boolean) теперь корректно передаёт параметр skipSupport через MDCReadSettings.builder().skipSupport(skipSupport).build(). Замечание из прошлого ревью устранено.


155-169: Корректное добавление поддержки настроек для внешних источников.

Добавлена новая перегрузка createExternalSources(Path, MDCReadSettings), которая правильно передаёт настройки чтения в MDOReader.readExternalSource.


204-208: Исправлена передача настроек чтения во внешние источники.

Новый метод create(Path, MDCReadSettings) теперь корректно передаёт readSettings в оба вызова: createConfigurations и createExternalSources. Замечание из прошлого ревью устранено.

@sonarqubecloud
Copy link

@theshadowco theshadowco merged commit 7d525b3 into develop Oct 13, 2025
25 checks passed
@theshadowco theshadowco deleted the feature/settings branch October 13, 2025 13:30
@coderabbitai coderabbitai bot mentioned this pull request Dec 29, 2025
4 tasks
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[NEW] Параметризация чтения mdclass

2 participants