Skip to content

Чтение конфигураций из файла, проверка на пустоту конфигурации#526

Merged
theshadowco merged 2 commits into
developfrom
feature/mdcFromFileConfiguration
Oct 7, 2025
Merged

Чтение конфигураций из файла, проверка на пустоту конфигурации#526
theshadowco merged 2 commits into
developfrom
feature/mdcFromFileConfiguration

Conversation

@theshadowco

Copy link
Copy Markdown
Member

Описание

  1. для конфигураций и расширений добавлен метод проверки на пустоту
  2. реализовано чтение mdclass по переданному пути к файлу корня конфигурации

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

Closes

Чеклист

Общие

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

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

2. реализовано чтение mdclass по переданному пути к файлу корня конфигурации
@coderabbitai

coderabbitai Bot commented Oct 7, 2025

Copy link
Copy Markdown

Walkthrough

Добавлен метод isEmpty() в интерфейс CF; читатели MDO/Designer/EDT обновлены для распознавания входного пути по имени файла и нормализации rootPath; из Reader-классов удалены явные @nonnull аннотации, а в пакетах designer/edt добавлены package-level nonnull-аннотации; тесты переписаны на явные @test с конкретными путями.

Changes

Cohort / File(s) Summary
CF: метод состояния конфигурации
src/main/java/com/github/_1c_syntax/bsl/mdclasses/CF.java
Добавлен default boolean isEmpty() с реализацией return this == Configuration.EMPTY; и Javadoc.
MDO источник и логика детекции
src/main/java/com/github/_1c_syntax/bsl/reader/MDOReader.java
Переработана логика определения источника: если rootPath — файл, проверяется имя файла (Designer/EDT); если директория — сначала проверяется путь Designer, затем EDT; явное различие обработки файлов и директорий.
DesignerReader: константа и нормализация пути, аннотации
src/main/java/com/github/_1c_syntax/bsl/reader/designer/DesignerReader.java, src/main/java/com/github/_1c_syntax/bsl/reader/designer/package-info.java
Добавлена константа CONFIGURATION_MDO_FILE_NAME = "Configuration.xml"; в конструкторе при входе-файле с этим именем rootPath заменяется на path.getParent(); удалены @nonnull на публичных методах; добавлены пакетные аннотации @ParametersAreNonnullByDefault и @ReturnValuesAreNonnullByDefault в package-info.java.
EDTReader: константа и нормализация пути, аннотации
src/main/java/com/github/_1c_syntax/bsl/reader/edt/EDTReader.java, src/main/java/com/github/_1c_syntax/bsl/reader/edt/package-info.java
Добавлена константа CONFIGURATION_MDO_FILE_NAME = "Configuration.mdo"; в конструкторе при входе-файле с этим именем rootPath вычисляется переходом вверх по дереву (трехкратный getParent в изменённой логике); удалены @nonnull на публичных методах; добавлены пакетные аннотации nonnull в package-info.java.
Тесты конфигураций
src/test/java/com/github/_1c_syntax/bsl/mdclasses/ConfigurationTest.java
Параметризованные тесты заменены на явные @Test-методы, использующие конкретные пути к Configuration.xml и Configuration.mdo; добавлены проверки типов и непустоты загруженных конфигураций.

Sequence Diagram(s)

sequenceDiagram
  autonumber
  actor Caller
  participant MDOReader
  participant FS as FileSystem

  Caller->>MDOReader: read(rootPath)
  alt rootPath указывает на файл
    MDOReader->>FS: getFileName(rootPath)
    alt имя == DesignerReader.CONFIGURATION_MDO_FILE_NAME
      MDOReader->>MDOReader: source = DESIGNER
    else имя == EDTReader.CONFIGURATION_MDO_FILE_NAME
      MDOReader->>MDOReader: source = EDT
    else
      MDOReader->>MDOReader: source = UNKNOWN
    end
  else rootPath — директория
    MDOReader->>FS: exists(Designer конфиг путь)
    alt существует
      MDOReader->>MDOReader: source = DESIGNER
    else
      MDOReader->>FS: exists(EDT конфиг путь)
      alt существует
        MDOReader->>MDOReader: source = EDT
      else
        MDOReader->>MDOReader: source = UNKNOWN
      end
    end
  end
  MDOReader-->>Caller: результат
Loading
sequenceDiagram
  autonumber
  actor Client
  participant DesignerReader
  participant EDTReader
  participant FS as FileSystem

  rect rgb(235, 245, 255)
  note over DesignerReader: Конструктор — файл "Configuration.xml" → root = parent
  Client->>DesignerReader: new(path)
  DesignerReader->>FS: isRegularFile(path)?
  alt файл и имя == "Configuration.xml"
    DesignerReader->>DesignerReader: rootPath = path.getParent()
  else
    DesignerReader->>DesignerReader: rootPath = path
  end
  end

  rect rgb(235, 245, 255)
  note over EDTReader: Конструктор — файл "Configuration.mdo" → root = path.getParent().getParent().getParent()
  Client->>EDTReader: new(path)
  EDTReader->>FS: isRegularFile(path)?
  alt файл и имя == "Configuration.mdo"
    EDTReader->>EDTReader: rootPath = path.getParent().getParent().getParent()
  else
    EDTReader->>EDTReader: rootPath = path
  end
  end
Loading

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~25 minutes

Poem

Прыг-скок по тропке, файл пал на след,
Носик учует: XML или MDO вперед.
Корень поправил, пустоту проверю — легко,
Тесты хлоп и прыжок — зелёная морковка в руке. 🥕

Pre-merge checks and finishing touches

❌ Failed checks (1 warning)
Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 0.00% which is insufficient. The required threshold is 80.00%. You can run @coderabbitai generate docstrings to improve docstring coverage.
✅ Passed checks (2 passed)
Check name Status Explanation
Title Check ✅ Passed Заголовок чётко и ёмко отражает два основных изменения в PR: реализацию чтения конфигураций из файла и проверку на пустоту конфигурации, что соответствует содержимому изменений.
Description Check ✅ Passed Описание PR ясно описывает добавление метода проверки на пустоту и реализацию чтения mdclass по переданному пути к файлу корня конфигурации, что полностью совпадает с внесёнными изменениями.
✨ 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/mdcFromFileConfiguration

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.

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Actionable comments posted: 2

🧹 Nitpick comments (2)
src/test/java/com/github/_1c_syntax/bsl/mdclasses/ConfigurationTest.java (2)

216-223: Уточните назначение булева параметра в createConfiguration.

Метод MDClasses.createConfiguration(configurationPath, true) вызывается с булевым параметром true, но его назначение неочевидно из контекста теста. Рекомендуется добавить комментарий, поясняющий значение этого параметра для улучшения читаемости теста.

Также обратите внимание, что использование жёстко заданного пути вместо параметризованного теста снижает гибкость, но упрощает понимание конкретного сценария.

Пример комментария:

+  // true означает, что конфигурация должна быть прочитана из файла
   var mdc = MDClasses.createConfiguration(configurationPath, true);

252-266: Рассмотрите расширение покрытия тестом testFullExtEdt.

Метод testFullExtEdt выполняет значительно меньше проверок по сравнению с testFullExt. Тест testFullExt включает вызов checkChildrenExt(cf) (строка 233), который проверяет состав всех дочерних элементов, тогда как testFullExtEdt проверяет только порядок элементов.

Рассмотрите возможность добавления аналогичных проверок для обеспечения одинакового уровня покрытия обоих форматов (Designer и EDT).

Применить следующий diff для добавления проверки дочерних элементов:

   var cf = (ConfigurationExtension) mdc;
   assertThat(cf.isEmpty()).isFalse();
 
+  // проверка состава дочерних
+  checkChildrenExt(cf);
+
   // проверка порядок
   checkChildrenOrder(cf);
📜 Review details

Configuration used: CodeRabbit UI

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between b061ef8 and 4c42e80.

⛔ Files ignored due to path filters (9)
  • src/test/resources/fixtures/mdclasses/Configuration.json is excluded by !**/*.json
  • src/test/resources/fixtures/mdclasses/Configuration_edt.json is excluded by !**/*.json
  • src/test/resources/fixtures/mdclasses_3_18/Configuration.json is excluded by !**/*.json
  • src/test/resources/fixtures/mdclasses_3_18/Configuration_edt.json is excluded by !**/*.json
  • src/test/resources/fixtures/mdclasses_3_24/Configuration_edt.json is excluded by !**/*.json
  • src/test/resources/fixtures/mdclasses_5_1/Configuration.json is excluded by !**/*.json
  • src/test/resources/fixtures/mdclasses_ext/Configuration.json is excluded by !**/*.json
  • src/test/resources/fixtures/mdclasses_ext/Configuration_edt.json is excluded by !**/*.json
  • src/test/resources/fixtures/mdclasses_unknown/Configuration_edt.json is excluded by !**/*.json
📒 Files selected for processing (5)
  • src/main/java/com/github/_1c_syntax/bsl/mdclasses/CF.java (1 hunks)
  • src/main/java/com/github/_1c_syntax/bsl/reader/MDOReader.java (2 hunks)
  • src/main/java/com/github/_1c_syntax/bsl/reader/designer/DesignerReader.java (2 hunks)
  • src/main/java/com/github/_1c_syntax/bsl/reader/edt/EDTReader.java (2 hunks)
  • src/test/java/com/github/_1c_syntax/bsl/mdclasses/ConfigurationTest.java (3 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
⏰ 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: build (21, macOS-latest)
  • GitHub Check: build (17, windows-latest)
  • GitHub Check: build (23, ubuntu-latest)
  • GitHub Check: build (23, windows-latest)
  • GitHub Check: build (21, ubuntu-latest)
  • GitHub Check: build (21, windows-latest)
  • GitHub Check: build (17, macOS-latest)
  • GitHub Check: build (17, ubuntu-latest)
  • GitHub Check: QA
  • GitHub Check: build (23, windows-latest)
  • GitHub Check: build (23, macOS-latest)
  • GitHub Check: build (17, ubuntu-latest)
  • GitHub Check: build (21, macOS-latest)
  • GitHub Check: build (23, ubuntu-latest)
  • GitHub Check: build (21, windows-latest)
  • GitHub Check: build (21, ubuntu-latest)
  • GitHub Check: build (17, macOS-latest)
  • GitHub Check: build (17, windows-latest)
🔇 Additional comments (4)
src/test/java/com/github/_1c_syntax/bsl/mdclasses/ConfigurationTest.java (3)

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

Новые импорты необходимы для использования аннотации @Test и явных объектов Path в обновлённых тестовых методах.

Also applies to: 41-41


225-225: Проверка isEmpty() реализована корректно.

Тест проверяет новый метод isEmpty(), добавленный согласно задачам PR. Утверждение isFalse() корректно для загруженного расширения конфигурации.


185-214: Несоответствие с описанием изменений.

Сводка AI указывает, что метод testFullMdclasses был обновлён с параметризованного на явную структуру теста, однако в предоставленном коде этот метод остаётся параметризованным и не содержит изменений (отсутствуют маркеры ~). Это расхождение может указывать на неточность в автоматической сводке.

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

200-207: isEmpty(): проверка идентичности корректна Configuration.EMPTY объявлен static final и инициализируется единожды, поэтому оператор == уместен. Default-метод не ломает обратную совместимость. Убедитесь, что для расширений предусмотрен аналогичный sentinel (Extension.EMPTY) или переопределён isEmpty.

Comment thread src/main/java/com/github/_1c_syntax/bsl/reader/edt/EDTReader.java Outdated
@github-actions

github-actions Bot commented Oct 7, 2025

Copy link
Copy Markdown
Contributor

Test Results

  522 files  ±0    522 suites  ±0   7m 34s ⏱️ + 1m 4s
  225 tests ±0    225 ✅ ±0  0 💤 ±0  0 ❌ ±0 
2 043 runs  ±0  2 043 ✅ ±0  0 💤 ±0  0 ❌ ±0 

Results for commit fd6b13f. ± Comparison against base commit b061ef8.

This pull request removes 2 and adds 2 tests. Note that renamed tests count towards both.
com.github._1c_syntax.bsl.mdclasses.ConfigurationTest ‑ [1] false, mdclasses_ext
com.github._1c_syntax.bsl.mdclasses.ConfigurationTest ‑ [1] true, mdclasses_ext, _edt
com.github._1c_syntax.bsl.mdclasses.ConfigurationTest ‑ testFullExt()
com.github._1c_syntax.bsl.mdclasses.ConfigurationTest ‑ testFullExtEdt()

♻️ This comment has been updated with latest results.

@sonarqubecloud

sonarqubecloud Bot commented Oct 7, 2025

Copy link
Copy Markdown

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Actionable comments posted: 0

🧹 Nitpick comments (2)
src/main/java/com/github/_1c_syntax/bsl/reader/edt/EDTReader.java (1)

98-115: Унифицируйте нормализацию rootPath. Сейчас при передаче каталога rootPath остаётся в исходном (возможно относительном) виде, тогда как для файла он уже абсолютный. Для предсказуемости лучше нормализовать путь в обоих случаях.

-    var normalizedPath = path.toAbsolutePath();
+    var normalizedPath = path.toAbsolutePath().normalize();
@@
-    } else {
-      rootPath = path;
+    } else {
+      rootPath = normalizedPath;
src/main/java/com/github/_1c_syntax/bsl/reader/designer/DesignerReader.java (1)

100-111: Приведите rootPath к нормализованному виду и для каталогов. При передаче директории rootPath остаётся как есть, из-за чего поведение отличается от ветки с файлом. Стоит сразу переходить к абсолютному нормализованному пути.

-    var normalizedPath = path.toAbsolutePath();
+    var normalizedPath = path.toAbsolutePath().normalize();
@@
-    } else {
-      rootPath = path;
+    } else {
+      rootPath = normalizedPath;
📜 Review details

Configuration used: CodeRabbit UI

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 4c42e80 and fd6b13f.

📒 Files selected for processing (4)
  • src/main/java/com/github/_1c_syntax/bsl/reader/designer/DesignerReader.java (2 hunks)
  • src/main/java/com/github/_1c_syntax/bsl/reader/designer/package-info.java (1 hunks)
  • src/main/java/com/github/_1c_syntax/bsl/reader/edt/EDTReader.java (2 hunks)
  • src/main/java/com/github/_1c_syntax/bsl/reader/edt/package-info.java (1 hunks)
🧰 Additional context used
🧠 Learnings (1)
📚 Learning: 2025-10-06T14:38:27.354Z
Learnt from: theshadowco
PR: 1c-syntax/mdclasses#524
File: src/main/java/com/github/_1c_syntax/bsl/mdo/support/UsePurposes.java:61-69
Timestamp: 2025-10-06T14:38:27.354Z
Learning: В проекте mdclasses используются JSR-305 аннотации (ParametersAreNonnullByDefault) на уровне пакетов для обеспечения null-safety через статический анализ, что является приемлемым подходом вместо явных runtime проверок.

Applied to files:

  • src/main/java/com/github/_1c_syntax/bsl/reader/edt/package-info.java
  • src/main/java/com/github/_1c_syntax/bsl/reader/designer/package-info.java
⏰ 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: build (23, ubuntu-latest)
  • GitHub Check: build (23, macOS-latest)
  • GitHub Check: build (23, windows-latest)
  • GitHub Check: build (21, windows-latest)
  • GitHub Check: build (21, ubuntu-latest)
  • GitHub Check: build (17, ubuntu-latest)
  • GitHub Check: build (17, windows-latest)
  • GitHub Check: build (17, macOS-latest)
  • GitHub Check: QA
  • GitHub Check: build (23, windows-latest)
  • GitHub Check: build (23, macOS-latest)
  • GitHub Check: build (21, windows-latest)
  • GitHub Check: build (21, ubuntu-latest)
  • GitHub Check: build (21, macOS-latest)
  • GitHub Check: build (17, macOS-latest)
  • GitHub Check: build (23, ubuntu-latest)
  • GitHub Check: build (17, ubuntu-latest)
  • GitHub Check: build (17, windows-latest)
🔇 Additional comments (2)
src/main/java/com/github/_1c_syntax/bsl/reader/designer/package-info.java (1)

25-26: Аннотации по умолчанию выглядят корректно. Пакет теперь наследует ожидаемое поведение по nullability без дублирования аннотаций на каждом методе.

src/main/java/com/github/_1c_syntax/bsl/reader/edt/package-info.java (1)

25-26: Хорошее покрытие аннотациями по умолчанию. Пакет EDT теперь следует тем же правилам nullability, что и designer.

@theshadowco
theshadowco merged commit dfd8b09 into develop Oct 7, 2025
25 checks passed
@theshadowco
theshadowco deleted the feature/mdcFromFileConfiguration branch October 7, 2025 05:00
@coderabbitai coderabbitai Bot mentioned this pull request Oct 13, 2025
4 tasks
@coderabbitai coderabbitai Bot mentioned this pull request Jul 8, 2026
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.

1 participant