Skip to content

Conversation

theshadowco
Copy link
Member

@theshadowco theshadowco commented Sep 19, 2025

Описание

  1. Реализовано чтение описаний типов
  • для атрибутов (реквизиты, измерения и т.д.)
  • для определяемых типов
  • для параметров сеанса
  • для констант
  • для подписок на событие
  • общих реквизитов
  • реквизитов форм

Для всех MD, имеющих описание типа значения, добавлен интерфейс

  1. Добавлены типы данных для метаданных и реквизитов форм
  2. внесены небольшие правки опечаток, неточностей
  3. Колонки журнала документов теперь имеют список ссылок на реквизиты входящих в состав документов

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

Closes #277

Чеклист

Общие

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

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

…ствующие колонки + добавлен список ссылок на реквизиты документов

 - доработан конвертор типов
 - корректировка тестов
Copy link

coderabbitai bot commented Sep 19, 2025

Walkthrough

Добавлены модели и конвертеры для описаний типов значений (ValueType, ValueTypeDescription, Qualifiers); введён интерфейс ValueTypeOwner и применён во множестве MDO‑классов; реализованы реестры встроенных типов; добавлена поддержка чтения valueTypetype в Unmarshaller; добавлены дизайнерские конвертеры; исправлены опечатки computePossibleRighscomputePossibleRights; обновлены зависимости Gradle.

Changes

Cohort / File(s) Summary
Сборка и зависимости
build.gradle.kts
Добавлен snapshots-репозиторий; прямая зависимость io.github.1c-syntax:bsl-common-library:0.9.0.9-SNAPSHOT; исключён транзитивный bsl-common-library из supportconf.
Новый интерфейс
src/main/java/.../mdo/ValueTypeOwner.java
Добавлен интерфейс ValueTypeOwner с методом ValueTypeDescription getValueType().
Реестры встроенных типов
src/main/java/.../mdo/support/MetadataValueType.java, src/main/java/.../mdo/storage/form/FormAttributeValueType.java
Новые классы с множеством статических типов, регистрами, методами fromString()/builtinTypes() и variant‑логикой.
Конвертеры value-type
src/main/java/.../reader/common/converter/ValueTypeConverter.java, .../ValueTypeDescriptionConverter.java, .../ValueTypeQualifierConverter.java
Добавлены конвертеры: кеширующий резолвер типов, парсер описаний типов и парсер квалификаторов.
Reader / Unmarshaller
src/main/java/.../reader/edt/converter/Unmarshaller.java
Добавлено чтение узла valueType как ValueTypeDescription и маппинг в поле type.
Designer конвертеры форм
src/main/java/.../reader/designer/converter/FormAttributeConverter.java, .../FormElementConverter.java
Добавлен FormAttributeConverter; FormElementConverter перестал обрабатывать FormAttribute и убран skip для ConditionalAppearance.
MDO: внедрение ValueTypeOwner
src/main/java/.../mdo/*.java, src/main/java/.../mdo/children/*.java, src/main/java/.../mdo/storage/form/*.java
Множество MDO‑классов начали реализовывать ValueTypeOwner; добавлено поле ValueTypeDescription type = ValueTypeDescription.EMPTY (с подавлением Lombok‑геттера) и метод getValueType(); в некоторых местах обновлены билдеры/поля (напр., DocumentJournalColumn.references, FormAttribute id/name).
Исправления computePossibleRights
src/main/java/.../mdclasses/Configuration.java, src/main/java/.../mdo/*, src/main/java/.../mdo/children/ExternalDataSourceTable.java
Переименование приватного метода computePossibleRighs()computePossibleRights() и обновление вызовов; содержимое списков прав не изменилось.
Новые тесты и документация
src/test/java/.../examples/ValueTypeTest.java, docs/ru/*.md
Добавлены тесты для ValueType; документация дополнена разделом «Анализ описания типов данных» и обновлены описания структуры/возможностей.
Косметика/форматирование
src/main/java/.../mdo/Register.java, .../reader/edt/converter/ManagedFormDataConverter.java
Небольшие исправления форматирования и заголовков без изменения поведения.

Sequence Diagram(s)

sequenceDiagram
  autonumber
  actor XML as XML Reader
  participant Unm as Unmarshaller
  participant VTD as ValueTypeDescriptionConverter
  participant VTC as ValueTypeConverter
  participant VQC as ValueTypeQualifierConverter
  participant MDO as MDO (ValueTypeOwner)

  XML->>Unm: node "valueType"/TypeSet
  Unm->>VTD: unmarshal → ValueTypeDescription
  VTD->>VTC: resolve each type string
  VTC-->>VTD: ValueType (builtin/metadata/unknown)
  VTD->>VQC: parse qualifiers (if present)
  VQC-->>VTD: Qualifier
  VTD-->>Unm: ValueTypeDescription(types, composite, qualifiers)
  Unm->>MDO: assign to field "type"
  MDO-->>Caller: getValueType()
Loading
sequenceDiagram
  autonumber
  actor Designer as Designer XML
  participant FAC as FormAttributeConverter
  participant Ctx as FormElementReaderContext
  participant Unm as Unmarshaller
  participant FA as FormAttribute

  Designer->>FAC: form attribute node
  FAC->>Ctx: collect id/name
  FAC->>Unm: unmarshal content (including valueType)
  Unm-->>Ctx: filled context
  Ctx-->>FAC: build() -> FormAttribute
  FAC-->>Designer: return FormAttribute
Loading

Estimated code review effort

🎯 4 (Complex) | ⏱️ ~60 minutes

Possibly related PRs

Poem

Прыг, кролик, по веткам кода я спешу,
Принёс ValueType, где сложные пути.
Конвертеры шепчут: "запомним и найдём",
Правки в правах — опечатку уберём. 🐇
Пусть билдер соберёт типы, мир тише в доме.

Pre-merge checks and finishing touches

❌ Failed checks (2 warnings)
Check name Status Explanation Resolution
Out of Scope Changes Check ⚠️ Warning В PR присутствуют изменения, не относящиеся напрямую к задаче #277: изменён build.gradle.kts — добавлен репозиторий Sonatype snapshots и обновлена зависимость io.github.1c-syntax:bsl-common-library до 0.9.0.9-SNAPSHOT, а также исключён транзитивный артефакт; эти изменения не упомянуты в описании и повышают риск нестабильности сборки. Также в docs/ru/examples.md добавлен новый раздел дважды (дублирование). Мелкие рефакторы и исправления опечаток выглядят допустимыми, но изменение зависимостей/репозитория выходит за рамки основной цели PR. Вынести изменение версии зависимости и добавление snapshots-репозитория в отдельный PR или убрать их из текущего MR и вернуть стабильную версию в build.gradle.kts; если обновление зависимости необходимо, добавьте обоснование в описание PR и прогон интеграционных сборок. Удалите дублированный раздел в docs/ru/examples.md и прогоните весь CI перед финальным слиянием.
Docstring Coverage ⚠️ Warning Docstring coverage is 11.54% 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 корректно отражает основную цель изменений — добавление чтения описаний типов реквизитов и метаданных; он краткий и релевантный содержимому дифа. Есть небольшая грамматическая неточность ("описание" → "описаний"), однако смысл ясен и заголовок позволяет понять ключевую цель PR при просмотре истории.
Linked Issues Check ✅ Passed По содержимому PR реализованы основные требования задачи #277: добавлен интерфейс для объектов с описанием типа, реализована десериализация и кэширование типов (ValueTypeConverter, ValueTypeDescriptionConverter, изменения в Unmarshaller), введены типы MetadataValueType и FormAttributeValueType, обновлены MDO-классы и добавлены тесты, проверяющие составные типы. На основании предоставленного описания и сводки изменений можно считать задачу выполненной с точки зрения кода.
Description Check ✅ Passed Описание PR последовательно перечисляет реализованные изменения: чтение описаний типов для перечисленных MD-объектов, добавление интерфейса ValueTypeOwner, новые типы данных, правки колонок журнала и связь с задачей #277; также указан чеклист и выполнение precommit. Описание соответствует содержимому raw_summary и даёт достаточное представление о целях и охвате изменений.
✨ Finishing touches
  • 📝 Generate Docstrings
🧪 Generate unit tests
  • Create PR with unit tests
  • Post copyable unit tests in a comment
  • Commit unit tests in branch feature/valueTypes

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.

Copy link
Contributor

github-actions bot commented Sep 19, 2025

Test Results

  540 files  + 9    540 suites  +9   6m 25s ⏱️ +21s
  225 tests + 4    225 ✅ + 4  0 💤 ±0  0 ❌ ±0 
2 043 runs  +36  2 043 ✅ +36  0 💤 ±0  0 ❌ ±0 

Results for commit e2fd74e. ± Comparison against base commit dbc9a27.

♻️ 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: 1

🧹 Nitpick comments (13)
build.gradle.kts (1)

47-47: Рассмотрите использование более стабильного репозитория для производственного кода.

Добавление репозитория для снапшот-версий может привести к нестабильности в production-среде. Снапшоты по определению являются нестабильными версиями.

Рекомендую:

  1. Использовать релизные версии в основной ветке
  2. Ограничить использование снапшотов только для feature-веток или dev-окружения
  3. Добавить комментарий о временном характере использования снапшота
src/main/java/com/github/_1c_syntax/bsl/reader/common/converter/ValueTypeQualifierConverter.java (3)

73-91: Рассмотрите возможность вынесения парсинга в отдельные методы.

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

Предлагаю разделить парсинг на отдельные методы:

 while (reader.hasMoreChildren()) {
   reader.moveDown();
-  if (LENGTH_NODE_NAME.equalsIgnoreCase(reader.getNodeName())) {
-    length = Integer.parseInt(reader.getValue());
-  } else if (ALLOWED_LENGTH_NODE_NAME.equalsIgnoreCase(reader.getNodeName())) {
-    allowedLength = AllowedLength.valueOf(reader.getValue().toUpperCase(Locale.ROOT));
-  } else if (DATE_FRACTIONS_NODE_NAME.equalsIgnoreCase(reader.getNodeName())) {
-    dateFractions = DateFractions.valueOf(reader.getValue().toUpperCase(Locale.ROOT));
-  } else if (SCALE_NODE_NAME.equalsIgnoreCase(reader.getNodeName())
-    || FRACTION_DIGITS_NODE_NAME.equalsIgnoreCase(reader.getNodeName())) {
-    scale = Integer.parseInt(reader.getValue());
-  } else if (PRECISION_NODE_NAME.equalsIgnoreCase(reader.getNodeName())
-  || DIGITS_NODE_NAME.equalsIgnoreCase(reader.getNodeName())) {
-    precision = Integer.parseInt(reader.getValue());
-  } else if (NON_NEGATIVE_NODE_NAME.equalsIgnoreCase(reader.getNodeName())) {
-    nonNegative = Boolean.parseBoolean(reader.getValue());
-  } else if (ALLOWED_SIGN_NODE_NAME.equalsIgnoreCase(reader.getNodeName())) {
-    nonNegative = NONNEGATIVE_VALUE.equalsIgnoreCase(reader.getValue());
-  }
+  parseNode(reader, /* передать контекст с переменными */);
   reader.moveUp();
 }

74-74: Добавьте обработку ошибок при парсинге чисел.

Методы Integer.parseInt() могут выбросить NumberFormatException при некорректном вводе.

-length = Integer.parseInt(reader.getValue());
+try {
+  length = Integer.parseInt(reader.getValue());
+} catch (NumberFormatException e) {
+  LOGGER.warn("Invalid length value: {}", reader.getValue());
+  length = 0;
+}

То же самое применимо для scale (строка 81) и precision (строка 84).

Also applies to: 81-81, 84-84


76-76: Добавьте обработку ошибок при парсинге enum-значений.

Метод valueOf() может выбросить IllegalArgumentException при некорректном значении.

-allowedLength = AllowedLength.valueOf(reader.getValue().toUpperCase(Locale.ROOT));
+try {
+  allowedLength = AllowedLength.valueOf(reader.getValue().toUpperCase(Locale.ROOT));
+} catch (IllegalArgumentException e) {
+  LOGGER.warn("Unknown AllowedLength value: {}", reader.getValue());
+  allowedLength = AllowedLength.VARIABLE;
+}

Аналогично для DateFractions (строка 78).

Also applies to: 78-78

src/main/java/com/github/_1c_syntax/bsl/reader/designer/converter/FormAttributeConverter.java (2)

42-45: TODO: добавлена временная заглушка для ConditionalAppearance

Комментарий указывает на необходимость доработки обработки условного оформления. Рекомендуется создать задачу для отслеживания этой доработки.

Хотите, чтобы я создал issue для отслеживания необходимости реализации чтения ConditionalAppearance?


48-53: Потенциальная потеря данных при ошибке парсинга

При ошибке парсинга идентификатора возвращается null, что может привести к потере данных реквизита формы. Стоит рассмотреть использование значения по умолчанию или более явной обработки ошибки.

Рассмотрите возможность продолжения обработки с дефолтным значением id вместо возврата null:

    try {
      readerContext.setValue("id", Integer.parseInt(reader.getAttribute("id")));
    } catch (NumberFormatException e) {
      LOGGER.debug("Unknown type {} in file {}", reader.getNodeName(), ExtendXStream.getCurrentPath(reader).toString());
-     return null;
+     LOGGER.warn("Failed to parse id for FormAttribute {}, using default value -1", reader.getAttribute("name"));
+     readerContext.setValue("id", -1);
    }
src/main/java/com/github/_1c_syntax/bsl/reader/common/converter/ValueTypeDescriptionConverter.java (2)

56-62: Проверка композитности может быть неполной

Логика определения композитного типа проверяется только при !composite. Если composite уже установлен в true, последующие проверки пропускаются. Это может привести к некорректному определению для смешанных типов.

Рассмотрите упрощение логики для большей ясности:

-        if (!composite) {
-          if (result instanceof MetadataValueType metadataValueType) {
-            composite = metadataValueType.isComposite();
-          } else if (result == V8ValueType.ANY_REF) {
-            composite = true;
-          }
+        if (result instanceof MetadataValueType metadataValueType && metadataValueType.isComposite()) {
+          composite = true;
+        } else if (result == V8ValueType.ANY_REF) {
+          composite = true;
         }

68-68: Использование уровня логирования INFO для неизвестных полей

Уровень INFO может засорить логи в продуктивной среде. Рекомендуется использовать DEBUG для подобных информационных сообщений.

-        LOGGER.info("Unknown type description field {}", nodeName);
+        LOGGER.debug("Unknown type description field {}", nodeName);
src/main/java/com/github/_1c_syntax/bsl/mdo/storage/form/FormAttributeValueType.java (1)

31-31: Сделать класс final

Семантически набор закрыт, наследование не требуется. Это упростит рассуждения о типе и предотвратит расширение.

Применить:

-public class FormAttributeValueType implements ValueType {
+public final class FormAttributeValueType implements ValueType {
src/main/java/com/github/_1c_syntax/bsl/reader/common/converter/ValueTypeConverter.java (3)

90-92: Уточнить сигнатуру и проверку совместимости в canConvert

Используйте дженерики и isAssignableFrom для устойчивости к подтипам.

Применить:

-  public boolean canConvert(Class type) {
-    return type == ValueType.class;
-  }
+  public boolean canConvert(Class<?> type) {
+    return ValueType.class.isAssignableFrom(type);
+  }

100-114: Единообразно нормализовать ключи в кеше

Для читаемости приводите ВСЕ литеральные ключи к lowerCase одинаково.

Применить:

-    types.put("xs:decimal", PrimitiveValueType.NUMBER);
-    types.put("xs:dateTime".toLowerCase(Locale.ROOT), PrimitiveValueType.DATE);
+    types.put("xs:decimal".toLowerCase(Locale.ROOT), PrimitiveValueType.NUMBER);
+    types.put("xs:dateTime".toLowerCase(Locale.ROOT), PrimitiveValueType.DATE);
@@
-    types.put("xs:base64Binary".toLowerCase(Locale.ROOT), V8ValueType.VALUE_STORAGE);
-    types.put("cfg:AnyIBRef".toLowerCase(Locale.ROOT), V8ValueType.ANY_REF);
+    types.put("xs:base64Binary".toLowerCase(Locale.ROOT), V8ValueType.VALUE_STORAGE);
+    types.put("cfg:AnyIBRef".toLowerCase(Locale.ROOT), V8ValueType.ANY_REF);
@@
-    types.put("v8:ValueListType".toLowerCase(Locale.ROOT), FormAttributeValueType.VALUE_LIST);
-    types.put("d5p1:FlowchartContextType".toLowerCase(Locale.ROOT), FormAttributeValueType.GRAPHICAL_SCHEMA);
+    types.put("v8:ValueListType".toLowerCase(Locale.ROOT), FormAttributeValueType.VALUE_LIST);
+    types.put("d5p1:FlowchartContextType".toLowerCase(Locale.ROOT), FormAttributeValueType.GRAPHICAL_SCHEMA);

62-73: Повторное кэширование алиасов: всё ок, но добавьте тесты на префиксы

Логика с отсечением namespace корректна. Рекомендую тесты для пар: xs:string, xs:dateTime, v8:ValueListType.

Нужны кейсы, подтверждающие кэширование оригинальной строки и эквивалентность без префикса.

src/main/java/com/github/_1c_syntax/bsl/mdo/support/MetadataValueType.java (1)

228-236: Микро‑нит: явное приведение типов в computeAllProvidedTypesVariants

Приведение (MetadataValueType) valueType безопасно, но можно подсказать компилятору через дженерик‑сигнатуру builtinTypes(): List<MetadataValueType> и возвращать List<? extends ValueType> с ковариантностью на вызывающей стороне. Не блокер.

📜 Review details

Configuration used: CodeRabbit UI

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between dbc9a27 and 974de17.

⛔ Files ignored due to path filters (72)
  • src/test/resources/fixtures/external/ТестоваяВнешняяОбработка.json is excluded by !**/*.json
  • src/test/resources/fixtures/external/ТестоваяВнешняяОбработка_edt.json is excluded by !**/*.json
  • src/test/resources/fixtures/external/ТестовыйВнешнийОтчет.json is excluded by !**/*.json
  • src/test/resources/fixtures/external/ТестовыйВнешнийОтчет_edt.json is excluded by !**/*.json
  • src/test/resources/fixtures/mdclasses/AccountingRegisters.РегистрБухгалтерии1.json is excluded by !**/*.json
  • src/test/resources/fixtures/mdclasses/AccumulationRegisters.РегистрНакопления1.json is excluded by !**/*.json
  • src/test/resources/fixtures/mdclasses/CalculationRegisters.РегистрРасчета1.json is excluded by !**/*.json
  • src/test/resources/fixtures/mdclasses/CalculationRegisters.РегистрРасчета1_edt.json is excluded by !**/*.json
  • src/test/resources/fixtures/mdclasses/Catalogs.Справочник1.json is excluded by !**/*.json
  • src/test/resources/fixtures/mdclasses/Catalogs.Справочник1_edt.json is excluded by !**/*.json
  • src/test/resources/fixtures/mdclasses/ChartsOfAccounts.ПланСчетов1.json is excluded by !**/*.json
  • src/test/resources/fixtures/mdclasses/ChartsOfAccounts.ПланСчетов1_edt.json is excluded by !**/*.json
  • src/test/resources/fixtures/mdclasses/ChartsOfCharacteristicTypes.ПланВидовХарактеристик1.json is excluded by !**/*.json
  • src/test/resources/fixtures/mdclasses/ChartsOfCharacteristicTypes.ПланВидовХарактеристик1_edt.json is excluded by !**/*.json
  • src/test/resources/fixtures/mdclasses/CommonAttributes.ОбщийРеквизит1.json is excluded by !**/*.json
  • 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/Constants.Константа1.json is excluded by !**/*.json
  • src/test/resources/fixtures/mdclasses/Constants.Константа1_edt.json is excluded by !**/*.json
  • src/test/resources/fixtures/mdclasses/DataProcessors.Обработка1.json is excluded by !**/*.json
  • src/test/resources/fixtures/mdclasses/DataProcessors.Обработка1_edt.json is excluded by !**/*.json
  • src/test/resources/fixtures/mdclasses/DefinedTypes.ОпределяемыйТип1.json is excluded by !**/*.json
  • src/test/resources/fixtures/mdclasses/DocumentJournals.ЖурналДокументов1.json is excluded by !**/*.json
  • src/test/resources/fixtures/mdclasses/DocumentJournals.ЖурналДокументов1_edt.json is excluded by !**/*.json
  • src/test/resources/fixtures/mdclasses/Documents.Документ1.json is excluded by !**/*.json
  • src/test/resources/fixtures/mdclasses/Documents.Документ1_edt.json is excluded by !**/*.json
  • src/test/resources/fixtures/mdclasses/EventSubscriptions.ПодпискаНаСобытие1.json is excluded by !**/*.json
  • src/test/resources/fixtures/mdclasses/ExternalDataSources.ТекущаяСУБД.json is excluded by !**/*.json
  • src/test/resources/fixtures/mdclasses/ExternalDataSources.ТекущаяСУБД_edt.json is excluded by !**/*.json
  • src/test/resources/fixtures/mdclasses/InformationRegisters.РегистрСведений1.json is excluded by !**/*.json
  • src/test/resources/fixtures/mdclasses/InformationRegisters.РегистрСведений1_edt.json is excluded by !**/*.json
  • src/test/resources/fixtures/mdclasses/Reports.Отчет1.json is excluded by !**/*.json
  • src/test/resources/fixtures/mdclasses/Reports.Отчет1_edt.json is excluded by !**/*.json
  • src/test/resources/fixtures/mdclasses/Sequences.Последовательность1.json is excluded by !**/*.json
  • src/test/resources/fixtures/mdclasses/Sequences.Последовательность1_edt.json is excluded by !**/*.json
  • src/test/resources/fixtures/mdclasses/SessionParameters.ПараметрСеанса1.json is excluded by !**/*.json
  • src/test/resources/fixtures/mdclasses/Tasks.Задача1.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/ssl_3_1/BusinessProcesses.Задание.json is excluded by !**/*.json
  • src/test/resources/fixtures/ssl_3_1/BusinessProcesses.Задание_edt.json is excluded by !**/*.json
  • src/test/resources/fixtures/ssl_3_1/Catalogs.Заметки.json is excluded by !**/*.json
  • src/test/resources/fixtures/ssl_3_1/Catalogs.Заметки_edt.json is excluded by !**/*.json
  • src/test/resources/fixtures/ssl_3_1/ChartsOfCharacteristicTypes.ДополнительныеРеквизитыИСведения.json is excluded by !**/*.json
  • src/test/resources/fixtures/ssl_3_1/ChartsOfCharacteristicTypes.ДополнительныеРеквизитыИСведения_edt.json is excluded by !**/*.json
  • src/test/resources/fixtures/ssl_3_1/CommonAttributes.ОбластьДанныхВспомогательныеДанные.json is excluded by !**/*.json
  • src/test/resources/fixtures/ssl_3_1/CommonForms.Вопрос.json is excluded by !**/*.json
  • src/test/resources/fixtures/ssl_3_1/CommonForms.Вопрос_edt.json is excluded by !**/*.json
  • src/test/resources/fixtures/ssl_3_1/Constants.ЗаголовокСистемы.json is excluded by !**/*.json
  • src/test/resources/fixtures/ssl_3_1/DataProcessors.ЗагрузкаКурсовВалют.json is excluded by !**/*.json
  • src/test/resources/fixtures/ssl_3_1/DataProcessors.ЗагрузкаКурсовВалют_edt.json is excluded by !**/*.json
  • src/test/resources/fixtures/ssl_3_1/DefinedTypes.ВладелецФайлов.json is excluded by !**/*.json
  • src/test/resources/fixtures/ssl_3_1/DocumentJournals.Взаимодействия.json is excluded by !**/*.json
  • src/test/resources/fixtures/ssl_3_1/DocumentJournals.Взаимодействия_edt.json is excluded by !**/*.json
  • src/test/resources/fixtures/ssl_3_1/Documents.Анкета.json is excluded by !**/*.json
  • src/test/resources/fixtures/ssl_3_1/Documents.Анкета_edt.json is excluded by !**/*.json
  • src/test/resources/fixtures/ssl_3_1/EventSubscriptions.ВариантыОтчетовПередУдалениемИдентификатораОбъектаМетаданных.json is excluded by !**/*.json
  • src/test/resources/fixtures/ssl_3_1/ExchangePlans.ОбновлениеИнформационнойБазы.json is excluded by !**/*.json
  • src/test/resources/fixtures/ssl_3_1/ExchangePlans.ОбновлениеИнформационнойБазы_edt.json is excluded by !**/*.json
  • src/test/resources/fixtures/ssl_3_1/FilterCriteria.ФайлыВТоме.json is excluded by !**/*.json
  • src/test/resources/fixtures/ssl_3_1/FilterCriteria.ФайлыВТоме_edt.json is excluded by !**/*.json
  • src/test/resources/fixtures/ssl_3_1/InformationRegisters.ЭлектронныеПодписи.json is excluded by !**/*.json
  • src/test/resources/fixtures/ssl_3_1/InformationRegisters.ЭлектронныеПодписи_edt.json is excluded by !**/*.json
  • src/test/resources/fixtures/ssl_3_1/SessionParameters.ТекущийПользователь.json is excluded by !**/*.json
  • src/test/resources/fixtures/ssl_3_1/SettingsStorages.ХранилищеВариантовОтчетов.json is excluded by !**/*.json
  • src/test/resources/fixtures/ssl_3_1/SettingsStorages.ХранилищеВариантовОтчетов_edt.json is excluded by !**/*.json
  • src/test/resources/fixtures/ssl_3_1/Tasks.ЗадачаИсполнителя.json is excluded by !**/*.json
  • src/test/resources/fixtures/ssl_3_1/Tasks.ЗадачаИсполнителя_edt.json is excluded by !**/*.json
📒 Files selected for processing (38)
  • build.gradle.kts (2 hunks)
  • src/main/java/com/github/_1c_syntax/bsl/mdclasses/Configuration.java (2 hunks)
  • src/main/java/com/github/_1c_syntax/bsl/mdo/AccumulationRegister.java (3 hunks)
  • src/main/java/com/github/_1c_syntax/bsl/mdo/Attribute.java (1 hunks)
  • src/main/java/com/github/_1c_syntax/bsl/mdo/BusinessProcess.java (3 hunks)
  • src/main/java/com/github/_1c_syntax/bsl/mdo/CalculationRegister.java (3 hunks)
  • src/main/java/com/github/_1c_syntax/bsl/mdo/Catalog.java (3 hunks)
  • src/main/java/com/github/_1c_syntax/bsl/mdo/CommonAttribute.java (6 hunks)
  • src/main/java/com/github/_1c_syntax/bsl/mdo/Constant.java (4 hunks)
  • src/main/java/com/github/_1c_syntax/bsl/mdo/DefinedType.java (2 hunks)
  • src/main/java/com/github/_1c_syntax/bsl/mdo/Document.java (3 hunks)
  • src/main/java/com/github/_1c_syntax/bsl/mdo/EventSubscription.java (3 hunks)
  • src/main/java/com/github/_1c_syntax/bsl/mdo/ExchangePlan.java (2 hunks)
  • src/main/java/com/github/_1c_syntax/bsl/mdo/ExternalDataSource.java (2 hunks)
  • src/main/java/com/github/_1c_syntax/bsl/mdo/InformationRegister.java (3 hunks)
  • src/main/java/com/github/_1c_syntax/bsl/mdo/Register.java (0 hunks)
  • src/main/java/com/github/_1c_syntax/bsl/mdo/SessionParameter.java (3 hunks)
  • src/main/java/com/github/_1c_syntax/bsl/mdo/Task.java (3 hunks)
  • src/main/java/com/github/_1c_syntax/bsl/mdo/ValueTypeOwner.java (1 hunks)
  • src/main/java/com/github/_1c_syntax/bsl/mdo/children/AccountingFlag.java (3 hunks)
  • src/main/java/com/github/_1c_syntax/bsl/mdo/children/Dimension.java (4 hunks)
  • src/main/java/com/github/_1c_syntax/bsl/mdo/children/DocumentJournalColumn.java (3 hunks)
  • src/main/java/com/github/_1c_syntax/bsl/mdo/children/ExtDimensionAccountingFlag.java (4 hunks)
  • src/main/java/com/github/_1c_syntax/bsl/mdo/children/ExternalDataSourceTable.java (3 hunks)
  • src/main/java/com/github/_1c_syntax/bsl/mdo/children/ExternalDataSourceTableField.java (3 hunks)
  • src/main/java/com/github/_1c_syntax/bsl/mdo/children/ObjectAttribute.java (5 hunks)
  • src/main/java/com/github/_1c_syntax/bsl/mdo/children/Resource.java (5 hunks)
  • src/main/java/com/github/_1c_syntax/bsl/mdo/children/TaskAddressingAttribute.java (5 hunks)
  • src/main/java/com/github/_1c_syntax/bsl/mdo/storage/form/FormAttribute.java (2 hunks)
  • src/main/java/com/github/_1c_syntax/bsl/mdo/storage/form/FormAttributeValueType.java (1 hunks)
  • src/main/java/com/github/_1c_syntax/bsl/mdo/support/MetadataValueType.java (1 hunks)
  • src/main/java/com/github/_1c_syntax/bsl/reader/common/converter/ValueTypeConverter.java (1 hunks)
  • src/main/java/com/github/_1c_syntax/bsl/reader/common/converter/ValueTypeDescriptionConverter.java (1 hunks)
  • src/main/java/com/github/_1c_syntax/bsl/reader/common/converter/ValueTypeQualifierConverter.java (1 hunks)
  • src/main/java/com/github/_1c_syntax/bsl/reader/designer/converter/FormAttributeConverter.java (1 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/converter/ManagedFormDataConverter.java (1 hunks)
  • src/main/java/com/github/_1c_syntax/bsl/reader/edt/converter/Unmarshaller.java (3 hunks)
💤 Files with no reviewable changes (1)
  • src/main/java/com/github/_1c_syntax/bsl/mdo/Register.java
🧰 Additional context used
🧬 Code graph analysis (7)
src/main/java/com/github/_1c_syntax/bsl/reader/common/converter/ValueTypeQualifierConverter.java (1)
src/main/java/com/github/_1c_syntax/bsl/reader/common/converter/ValueTypeDescriptionConverter.java (1)
  • Slf4j (41-79)
src/main/java/com/github/_1c_syntax/bsl/reader/designer/converter/FormAttributeConverter.java (4)
src/main/java/com/github/_1c_syntax/bsl/reader/designer/DesignerReader.java (1)
  • Slf4j (79-267)
src/main/java/com/github/_1c_syntax/bsl/reader/designer/converter/MetaDataObjectConverter.java (1)
  • Slf4j (35-61)
src/main/java/com/github/_1c_syntax/bsl/reader/designer/converter/FormElementConverter.java (1)
  • DesignerConverter (36-58)
src/main/java/com/github/_1c_syntax/bsl/reader/designer/converter/ManagedFormDataConverter.java (1)
  • DesignerConverter (33-47)
src/main/java/com/github/_1c_syntax/bsl/reader/common/converter/ValueTypeDescriptionConverter.java (2)
src/main/java/com/github/_1c_syntax/bsl/mdo/support/MetadataValueType.java (1)
  • MetadataValueType (39-272)
src/main/java/com/github/_1c_syntax/bsl/reader/common/converter/ValueTypeQualifierConverter.java (1)
  • Slf4j (42-111)
src/main/java/com/github/_1c_syntax/bsl/reader/common/converter/ValueTypeConverter.java (2)
src/main/java/com/github/_1c_syntax/bsl/mdo/storage/form/FormAttributeValueType.java (1)
  • FormAttributeValueType (31-102)
src/main/java/com/github/_1c_syntax/bsl/mdo/support/MetadataValueType.java (1)
  • MetadataValueType (39-272)
src/main/java/com/github/_1c_syntax/bsl/mdo/DefinedType.java (3)
src/main/java/com/github/_1c_syntax/bsl/mdo/CommonAttribute.java (2)
  • Value (45-201)
  • Value (185-200)
src/main/java/com/github/_1c_syntax/bsl/mdo/Constant.java (1)
  • Value (41-125)
src/main/java/com/github/_1c_syntax/bsl/mdo/storage/form/FormAttribute.java (1)
  • Value (37-72)
src/main/java/com/github/_1c_syntax/bsl/mdo/children/DocumentJournalColumn.java (3)
src/main/java/com/github/_1c_syntax/bsl/mdo/CommonAttribute.java (2)
  • Value (45-201)
  • Value (185-200)
src/main/java/com/github/_1c_syntax/bsl/mdo/children/AccountingFlag.java (1)
  • Value (44-90)
src/main/java/com/github/_1c_syntax/bsl/mdo/children/ObjectAttribute.java (1)
  • Value (44-134)
src/main/java/com/github/_1c_syntax/bsl/mdo/storage/form/FormAttribute.java (2)
src/main/java/com/github/_1c_syntax/bsl/mdo/DefinedType.java (1)
  • Value (37-78)
src/main/java/com/github/_1c_syntax/bsl/mdo/CommonAttribute.java (2)
  • Value (45-201)
  • Value (185-200)
⏰ 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). (10)
  • GitHub Check: build (23, macOS-latest)
  • GitHub Check: build (23, ubuntu-latest)
  • GitHub Check: build (23, windows-latest)
  • GitHub Check: build (21, windows-latest)
  • GitHub Check: build (17, macOS-latest)
  • GitHub Check: build (21, macOS-latest)
  • GitHub Check: build (17, ubuntu-latest)
  • GitHub Check: build (21, ubuntu-latest)
  • GitHub Check: build (17, windows-latest)
  • GitHub Check: QA
🔇 Additional comments (81)
src/main/java/com/github/_1c_syntax/bsl/reader/edt/converter/ManagedFormDataConverter.java (1)

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

Изменения касаются только форматирования заголовка — обновлен год в копирайте с "2019 - 2024" на "2019 - 2025". Функциональность не изменена.

src/main/java/com/github/_1c_syntax/bsl/mdo/CalculationRegister.java (3)

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

Стандартное обновление года в копирайте — хорошая практика для поддержания актуальности лицензионной информации.


53-53: Исправлена опечатка в названии метода для инициализации POSSIBLE_RIGHTS.

Теперь используется корректное название метода computePossibleRights() вместо computePossibleRighs().


144-151: Исправлена опечатка в названии приватного статического метода.

Переименование computePossibleRighs() в computePossibleRights() устраняет орфографическую ошибку. Логика и возвращаемые права доступа остаются неизменными.

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

51-51: Исправлена опечатка в названии метода для инициализации POSSIBLE_RIGHTS.

Теперь используется корректное название метода computePossibleRights() вместо computePossibleRighs().


203-227: Исправлена опечатка в названии приватного статического метода.

Переименование computePossibleRighs() в computePossibleRights() устраняет орфографическую ошибку. Логика и перечень прав доступа остаются неизменными.

src/main/java/com/github/_1c_syntax/bsl/mdo/Catalog.java (3)

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

Стандартное обновление года в копирайте для поддержания актуальности лицензионной информации.


50-50: Исправлена опечатка в названии метода для инициализации POSSIBLE_RIGHTS.

Теперь используется корректное название метода computePossibleRights() вместо computePossibleRighs().


159-187: Исправлена опечатка в названии приватного статического метода.

Переименование computePossibleRighs() в computePossibleRights() устраняет орфографическую ошибку. Возвращаемый набор прав доступа для каталогов остается полным и корректным.

src/main/java/com/github/_1c_syntax/bsl/mdo/AccumulationRegister.java (3)

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

Изменения касаются только форматирования заголовка — обновлен год в копирайте для поддержания актуальности.


52-52: Исправлена опечатка в названии метода для инициализации POSSIBLE_RIGHTS.

Теперь используется корректное название метода computePossibleRights() вместо computePossibleRighs().


140-148: Исправлена опечатка в названии приватного статического метода.

Переименование computePossibleRighs() в computePossibleRights() устраняет орфографическую ошибку. Набор прав доступа для регистров накопления (READ, UPDATE, VIEW, EDIT, TOTALS_CONTROL) остается корректным.

src/main/java/com/github/_1c_syntax/bsl/mdo/Task.java (3)

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

Стандартное обновление года в копирайте с "2019 - 2024" на "2019 - 2025".


51-51: Исправлена опечатка в названии метода для инициализации POSSIBLE_RIGHTS.

Теперь используется корректное название метода computePossibleRights() вместо computePossibleRighs().


165-192: Исправлена опечатка в названии приватного статического метода.

Переименование computePossibleRighs() в computePossibleRights() устраняет орфографическую ошибку. Полный набор прав доступа для задач остается неизменным.

src/main/java/com/github/_1c_syntax/bsl/mdo/BusinessProcess.java (3)

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

Стандартное обновление года в копирайте для поддержания актуальности лицензионной информации.


50-50: Исправлена опечатка в названии метода для инициализации POSSIBLE_RIGHTS.

Теперь используется корректное название метода computePossibleRights() вместо computePossibleRighs().


164-191: Исправлена опечатка в названии приватного статического метода.

Переименование computePossibleRighs() в computePossibleRights() устраняет орфографическую ошибку. Набор прав доступа для бизнес-процессов включает все необходимые права, включая специфичные для бизнес-процессов (START, INTERACTIVE_START).

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

56-56: Упрощена логика проверки типа в canConvert.

Удалена поддержка FormAttribute из конвертера элементов формы. Теперь конвертер обрабатывает только FormItem. Это правильное разделение ответственности, поскольку FormAttribute теперь обрабатывается специализированным конвертером.

src/main/java/com/github/_1c_syntax/bsl/mdo/children/ExternalDataSourceTable.java (1)

59-59: Исправление опечатки в названии метода.

Хорошо, что исправлена опечатка в названии метода с computePossibleRighs на computePossibleRights.

Also applies to: 163-163

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

28-29: Грамматическая корректировка в документации.

Исправление грамматической ошибки в Javadoc улучшает качество документации.


31-31: Добавление интерфейса ValueTypeOwner к Attribute.

Расширение интерфейса Attribute интерфейсом ValueTypeOwner логично, так как атрибуты должны иметь описание типа значения.

src/main/java/com/github/_1c_syntax/bsl/mdo/Document.java (1)

50-50: Исправление опечатки в названии метода.

Корректировка названия метода с computePossibleRighs на computePossibleRights устраняет опечатку и улучшает читаемость кода.

Also applies to: 164-164

build.gradle.kts (1)

61-65: Проверьте совместимость bsl-common-library (SNAPSHOT) и исключение транзитивной зависимости

supportconf:0.14.3 в POM содержит зависимость io.github.1c-syntax:bsl-common-library:0.8.1 (compile), а в build.gradle.kts явно подключается io.github.1c-syntax:bsl-common-library:0.9.0.9-SNAPSHOT с исключением транзитивной зависимости — это может привести к API/бинарной несовместимости.

  • Действия: либо согласовать версии (использовать стабильную 0.8.1), либо обновить supportconf на версию, совместимую с 0.9.x (если доступна), либо сохранить исключение, добавив в build.gradle.kts комментарий с обоснованием и покрыв изменения CI/регрессионными тестами.
  • Избегать SNAPSHOT в релизных сборках, если нет строгой необходимости.

Файл: build.gradle.kts, строки 61–65.

src/main/java/com/github/_1c_syntax/bsl/mdo/ExternalDataSource.java (1)

48-48: Исправлена орфографическая ошибка в названии метода.

Переименование computePossibleRighs()computePossibleRights() исправляет очевидную опечатку в названии и делает код более читаемым.

Also applies to: 110-110

src/main/java/com/github/_1c_syntax/bsl/mdo/ValueTypeOwner.java (1)

1-34: LGTM! Хорошо спроектированный интерфейс.

Интерфейс ValueTypeOwner предоставляет четкий контракт для классов, которые владеют описанием типа значения. Javadoc комментарии на русском языке соответствуют стилю проекта.

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

116-116: Исправлена орфографическая ошибка в названии метода.

Переименование computePossibleRighs()computePossibleRights() исправляет опечатку. Это изменение является частью системной корректировки по всей кодовой базе.

Also applies to: 409-409

src/main/java/com/github/_1c_syntax/bsl/mdo/children/Dimension.java (1)

75-78: Корректная реализация интерфейса ValueTypeOwner.

Добавлен тип значения с подавлением Lombok-геттера и корректной реализацией метода getValueType(). Инициализация значением по умолчанию ValueTypeDescription.EMPTY следует паттерну, используемому в проекте.

Also applies to: 106-109

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

57-58: Добавлена поддержка десериализации valueType.

Реализовано корректное преобразование XML-элемента valueType в поле type типа ValueTypeDescription. Логика соответствует существующему паттерну обработки полей в методе readNode.

Also applies to: 97-100

src/main/java/com/github/_1c_syntax/bsl/mdo/children/Resource.java (2)

51-51: Обновлен комментарий для большей точности.

Изменение с "Для MDChild" на "Для Attribute" лучше отражает назначение секции, поскольку класс реализует интерфейс Attribute.


75-77: Корректная реализация ValueTypeOwner.

Добавление поля type и метода getValueType() соответствует паттерну, используемому в других классах проекта. Подавление Lombok-геттера через @Getter(AccessLevel.NONE) позволяет использовать кастомную реализацию.

Also applies to: 90-93

src/main/java/com/github/_1c_syntax/bsl/mdo/InformationRegister.java (1)

52-52: Исправлена орфографическая ошибка в названии метода.

Переименование computePossibleRighs()computePossibleRights() является частью системной корректировки по всей кодовой базе для исправления опечатки.

Also applies to: 141-141

src/main/java/com/github/_1c_syntax/bsl/mdo/children/ObjectAttribute.java (2)

53-53: Обновлен комментарий для большей точности.

Изменение с "Для MDChild" на "Для Attribute" точнее отражает назначение секции в контексте реализации интерфейса Attribute.


77-79: Корректная реализация поддержки типа значения.

Добавление поля type с подавлением Lombok-геттера и реализация метода getValueType() соответствуют контракту интерфейса ValueTypeOwner. Инициализация ValueTypeDescription.EMPTY следует установленному в проекте паттерну.

Also applies to: 130-133

src/main/java/com/github/_1c_syntax/bsl/mdo/children/TaskAddressingAttribute.java (4)

33-33: Импорты согласованы с добавленной функциональностью.

Добавлены необходимые импорты для ValueTypeDescription и lombok.Getter в соответствии с реализацией интерфейса ValueTypeOwner.

Also applies to: 38-38


51-51: Улучшено описание блока комментария.

Обновлено описание с "Для MDChild" на "Для Attribute", что точнее отражает назначение этого класса.


75-77: Правильная реализация паттерна ValueTypeOwner.

Поле type правильно объявлено с аннотацией @Getter(AccessLevel.NONE) для сокрытия автоматически генерируемого геттера, что соответствует паттерну, используемому в других классах проекта.


140-143: Корректная реализация интерфейса ValueTypeOwner.

Метод getValueType() правильно переопределен и возвращает поле type, следуя единообразному паттерну, принятому в рамках данного PR.

src/main/java/com/github/_1c_syntax/bsl/mdo/EventSubscription.java (4)

29-29: Импорты согласованы с реализацией ValueTypeOwner.

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

Also applies to: 34-34


42-42: Правильно добавлен интерфейс ValueTypeOwner.

Класс теперь реализует ValueTypeOwner в дополнение к MDObject, что обеспечивает единообразие с другими классами в проекте.


67-69: Корректная реализация поля source для ValueTypeOwner.

Поле source с типом ValueTypeDescription правильно объявлено со значением по умолчанию и скрытым геттером, следуя установленному паттерну.


87-90: Правильная реализация метода getValueType().

Метод корректно переопределен и возвращает поле source, что соответствует контракту интерфейса ValueTypeOwner.

src/main/java/com/github/_1c_syntax/bsl/mdo/children/ExtDimensionAccountingFlag.java (3)

33-33: Импорты соответствуют добавленной функциональности.

Корректно добавлены импорты для ValueTypeDescription и lombok.Getter.

Also applies to: 38-38


75-77: Единообразная реализация паттерна ValueTypeOwner.

Поле type реализовано согласно установленному в проекте паттерну с использованием @Getter(AccessLevel.NONE).


86-89: Корректная реализация метода getValueType().

Метод правильно переопределен для соответствия интерфейсу ValueTypeOwner.

src/main/java/com/github/_1c_syntax/bsl/mdo/SessionParameter.java (4)

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

Добавлены необходимые импорты для реализации ValueTypeOwner.

Also applies to: 34-34


44-44: Правильное добавление интерфейса ValueTypeOwner.

Класс теперь реализует ValueTypeOwner наряду с существующими интерфейсами, обеспечивая единообразие архитектуры.


67-73: Корректная реализация блока ValueTypeOwner.

Добавлен отдельный блок документации для ValueTypeOwner с правильно объявленным полем type.


75-78: Правильная реализация метода getValueType().

Метод корректно переопределен для соответствия контракту интерфейса.

src/main/java/com/github/_1c_syntax/bsl/mdo/DefinedType.java (4)

28-28: Импорты соответствуют новой функциональности.

Добавлены необходимые импорты для поддержки ValueTypeOwner.

Also applies to: 33-33


41-41: Корректное добавление интерфейса ValueTypeOwner.

Класс правильно расширен для реализации ValueTypeOwner.


62-68: Единообразная реализация блока ValueTypeOwner.

Блок ValueTypeOwner реализован согласно паттерну, используемому в других классах проекта.


74-77: Правильная реализация метода getValueType().

Метод корректно переопределен для возврата поля type.

src/main/java/com/github/_1c_syntax/bsl/mdo/children/AccountingFlag.java (3)

33-33: Импорты согласованы с изменениями.

Корректно добавлены импорты для новой функциональности ValueTypeOwner.

Also applies to: 38-38


75-77: Правильная реализация поля типа.

Поле type объявлено согласно установленному паттерну с использованием @Getter(AccessLevel.NONE).


86-89: Корректная реализация метода getValueType().

Метод правильно переопределен для соответствия интерфейсу ValueTypeOwner.

src/main/java/com/github/_1c_syntax/bsl/mdo/Constant.java (6)

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

Добавлены необходимые импорты для реализации ValueTypeOwner.

Also applies to: 34-34


45-45: Правильное добавление интерфейса ValueTypeOwner.

Класс теперь реализует ValueTypeOwner в дополнение к существующим интерфейсам.


47-47: Исправлена опечатка в названии метода.

Название метода изменено с computePossibleRighs() на computePossibleRights(), что исправляет опечатку и улучшает читаемость кода.


75-81: Единообразная реализация блока ValueTypeOwner.

Блок ValueTypeOwner реализован согласно установленному в проекте паттерну.


98-101: Корректная реализация метода getValueType().

Метод правильно переопределен для возврата поля type.


110-110: Исправлена опечатка в названии приватного метода.

Название метода корректно изменено на computePossibleRights().

src/main/java/com/github/_1c_syntax/bsl/mdo/children/DocumentJournalColumn.java (4)

31-31: Импорты обновлены для новой функциональности.

Добавлены импорты для ValueTypeDescription и lombok.Singular в соответствии с новыми возможностями класса.

Also applies to: 35-35, 39-39


76-80: Добавлена полезная функциональность для работы со ссылками.

Поле references с аннотацией @Singular("addReferences") позволяет удобно собирать ссылки на реквизиты документов через билдер.


82-86: Правильная реализация метода isPasswordMode().

Переопределение метода isPasswordMode() с возвратом false логично для колонок журнала документов, которые не могут иметь режим пароля.


88-92: Логичная реализация getValueType() для колонок.

Возврат ValueTypeDescription.EMPTY обоснован комментарием - колонки не имеют собственного типа, а наследуют его из ссылок на реквизиты.

src/main/java/com/github/_1c_syntax/bsl/mdo/children/ExternalDataSourceTableField.java (2)

1-22: Обновлен год в копирайте

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


33-33: Корректная реализация интерфейса ValueTypeOwner

Реализация следует общему паттерну, используемому в других классах проекта (CommonAttribute, DefinedType и др.): поле type с подавленным геттером и публичный метод getValueType() для доступа к описанию типа.

Also applies to: 78-80, 88-91

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

1-22: Обновлен год в копирайте

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

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

1-22: Обновлен год в копирайте

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


39-39: Корректная реализация интерфейса ValueTypeOwner

Реализация интерфейса ValueTypeOwner выполнена правильно и согласованно с другими классами в проекте. Использование @NonNull для метода getValueType() гарантирует возврат ненулевого значения.

Also applies to: 59-71

src/main/java/com/github/_1c_syntax/bsl/mdo/CommonAttribute.java (3)

1-22: Обновлен год в копирайте

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


49-49: Корректная реализация интерфейса ValueTypeOwner

Класс теперь реализует интерфейс ValueTypeOwner, добавлено поле type с подавленным геттером и метод getValueType() для доступа к описанию типа - все согласно общему паттерну проекта.

Also applies to: 72-79, 149-152


171-176: Улучшенная реализация метода useMode()

Рефакторинг с использованием Optional делает код более читаемым и идиоматичным для Java. Логика сохранена корректно.

src/main/java/com/github/_1c_syntax/bsl/reader/common/converter/ValueTypeDescriptionConverter.java (2)

1-22: Обновлен год в копирайте

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


38-44: Класс хорошо документирован

Javadoc комментарий четко описывает назначение конвертера. Константа TYPE_NODE_NAMES содержит все необходимые варианты имен узлов для типов.

src/main/java/com/github/_1c_syntax/bsl/mdo/storage/form/FormAttributeValueType.java (3)

68-76: LGTM: корректный реестр встроенных типов

Список полно инициализирован, порядок и значения консистентны. List.of возвращает неизменяемую коллекцию — это подходит.


78-86: LGTM: инкапсуляция и доступоры

Закрытые поля + @Getter и приватный конструктор — верно для одноэкземплярных констант.


94-101: LGTM: API builtinTypes()

Возвращение неизменяемого списка без копирования — ок, побочных эффектов нет.

src/main/java/com/github/_1c_syntax/bsl/mdo/support/MetadataValueType.java (2)

96-142: LGTM: перечень встроенных MDO‑типов инициализирован корректно

Набор покрывает менеджеры/объекты/ссылки/наборы записей; именование и Ru‑имена согласованы.


177-195: LGTM: разбор составных вариантов и кэширование

Алгоритм с ALL_VARIANTS и PROVIDED_TYPES выглядит корректно и потокобезопасно.

Проверьте тестами случаи: InformationRegister.List, InformationRegister.RecordManager, Characteristic.*, ExternalDataSource.Table*.

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: 0

🧹 Nitpick comments (6)
docs/ru/examples.md (2)

12-12: Синхронизировать название пункта в оглавлении с заголовком секции.

В оглавлении: «Анализ описания типов данных», в секции: «Анализ типов данных». Лучше унифицировать формулировку (оставить «Анализ типов данных»).

Предлагаемый патч:

- - [Анализ описания типов данных](#анализ-типов-данных)
+ - [Анализ типов данных](#анализ-типов-данных)

273-404: Опечатки и мелкие неточности в новой секции; корректировки комментариев к примерам.

Исправления: орфография, согласование, уточнение названий типов в комментариях (в примере указан Number, а в тексте — «СТРОКА»).

Предлагаемый патч (фрагменты):

-## Анализ типов данных
+## Анализ типов данных
@@
-При чтении описания метаданных для объектов и их атрибутов вычисляются описания типов. Все сущности, имеющие описания типов данных, реализуют интерфейс `ValueTypeOwner`. 
+При чтении описания метаданных для объектов и их атрибутов вычисляются описания типов. Все сущности, имеющие описания типов данных, реализуют интерфейс `ValueTypeOwner`.
@@
-        // описание типа `getValueType`
+        // описание типа доступно через getValueType()
         assertThat(objectAttribute.getValueType()).isNotNull();
-        // убеимся в наличии примитивного типа СТРОКА в составе описания
+        // убедимся в наличии примитивного типа ЧИСЛО в составе описания
         assertThat(objectAttribute.getValueType().contains(PrimitiveValueType.NUMBER)).isTrue();
-        // убедимся, что тип не составно
+        // убедимся, что тип не составной
         assertThat(objectAttribute.getValueType().isComposite()).isFalse();
@@
-        // убаимся, что квалификатор числа содожержит верную информацию
+        // убедимся, что квалификатор числа содержит верную информацию
         var numberQualifiers = (NumberQualifiers) qualifier;
@@
-    // создадим типа по имени
+    // создадим тип по имени
     var typeContains = MetadataValueType.fromString("EnumRef.ДополнительныеЗначенияДоступа");
@@
-    // полученый тип относится к перечислению
+    // полученный тип относится к перечислению
     assertThat(typeContains.getKind()).isEqualTo(MDOType.ENUM);
@@
-    // убедимся, что второй тип нпе входит в состав
+    // убедимся, что второй тип не входит в состав
     assertThat(definedType.getValueType().contains(typeNotContains)).isFalse();

Дополнительно: в начале файла (ранее в примерах) используется attribute.getType().getDescription(), а в новой секции — getValueType(). Проверьте и, при необходимости, унифицируйте API в примерах, чтобы избежать путаницы.

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

42-49: Предложение: улучшить читаемость констант путей.

Использование ArgumentsAccessor может снизить читаемость тестового кода. Константы путей можно сделать более читаемыми.

Примените этот diff для улучшения читаемости:

-  private static final String EXAMPLES_PATH = "src/test/resources/ext";
-  private static final String EDT_PATH = "edt";
-  private static final String DESIGNER_PATH = "designer";
-  private static final String DESIGNER_CF_PATH = "src/cf";
-  private static final String EDT_CF_PATH = "configuration";
+  private static final Path EXAMPLES_BASE_PATH = Path.of("src/test/resources/ext");
+  private static final String EDT_SUBPATH = "edt";
+  private static final String DESIGNER_SUBPATH = "designer";
+  private static final String DESIGNER_CONFIG_PATH = "src/cf";
+  private static final String EDT_CONFIG_PATH = "configuration";

50-66: Рекомендация: рассмотреть упрощение параметризации тестов.

ArgumentsAccessor может снизить читаемость, и доступны альтернативы для агрегирования аргументов. Для простых случаев с булевым флагом и строкой можно использовать прямые параметры.

Примените этот diff для упрощения:

-  void testCatalog(ArgumentsAccessor argumentsAccessor) {
-    var isEDT = argumentsAccessor.getBoolean(0);
-    var examplePackName = argumentsAccessor.getString(1);
+  void testCatalog(boolean isEDT, String examplePackName) {

61-66: Предложение: извлечь логику построения путей в отдельный метод.

Дублирование логики построения путей между тестами можно устранить.

Добавьте вспомогательный метод:

private Path buildConfigurationPath(boolean isEDT, String examplePackName) {
  if (isEDT) {
    return Path.of(EXAMPLES_PATH, EDT_PATH, examplePackName, EDT_CF_PATH);
  } else {
    return Path.of(EXAMPLES_PATH, DESIGNER_PATH, examplePackName, DESIGNER_CF_PATH);
  }
}

Затем используйте его в обоих тестах:

-    Path configurationPath;
-    if (isEDT) {
-      configurationPath = Path.of(EXAMPLES_PATH, EDT_PATH, examplePackName, EDT_CF_PATH);
-    } else {
-      configurationPath = Path.of(EXAMPLES_PATH, DESIGNER_PATH, examplePackName, DESIGNER_CF_PATH);
-    }
+    var configurationPath = buildConfigurationPath(isEDT, examplePackName);

97-113: То же замечание по параметризации и дублированию.

Применимы те же рекомендации по упрощению ArgumentsAccessor и извлечению логики построения путей.

Примените аналогичные изменения:

-  void testDefinedType(ArgumentsAccessor argumentsAccessor) {
-    var isEDT = argumentsAccessor.getBoolean(0);
-    var examplePackName = argumentsAccessor.getString(1);
+  void testDefinedType(boolean isEDT, String examplePackName) {
+    var configurationPath = buildConfigurationPath(isEDT, examplePackName);
📜 Review details

Configuration used: CodeRabbit UI

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 814fc7b and e2e8cd9.

📒 Files selected for processing (3)
  • docs/ru/examples.md (2 hunks)
  • docs/ru/features.md (1 hunks)
  • src/test/java/com/github/_1c_syntax/bsl/examples/ValueTypeTest.java (1 hunks)
✅ Files skipped from review due to trivial changes (1)
  • docs/ru/features.md
🧰 Additional context used
🧬 Code graph analysis (1)
src/test/java/com/github/_1c_syntax/bsl/examples/ValueTypeTest.java (1)
src/main/java/com/github/_1c_syntax/bsl/mdo/support/MetadataValueType.java (1)
  • MetadataValueType (39-271)
⏰ 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, ubuntu-latest)
  • GitHub Check: build (23, windows-latest)
  • GitHub Check: build (17, windows-latest)
  • GitHub Check: build (21, windows-latest)
  • GitHub Check: build (21, ubuntu-latest)
  • GitHub Check: build (23, macOS-latest)
  • GitHub Check: build (23, ubuntu-latest)
  • GitHub Check: build (21, macOS-latest)
  • GitHub Check: build (23, macOS-latest)
  • GitHub Check: build (17, ubuntu-latest)
  • GitHub Check: build (23, windows-latest)
  • GitHub Check: build (23, ubuntu-latest)
  • GitHub Check: build (21, ubuntu-latest)
  • GitHub Check: build (17, windows-latest)
  • GitHub Check: build (17, macOS-latest)
  • GitHub Check: build (21, macOS-latest)
  • GitHub Check: build (21, windows-latest)
🔇 Additional comments (3)
src/test/java/com/github/_1c_syntax/bsl/examples/ValueTypeTest.java (3)

1-143: LGTM! Тест хорошо структурирован и покрывает функциональность типов значений.

Тестовый класс правильно проверяет:

  • Загрузку конфигурации из путей EDT и Designer
  • Получение атрибутов из каталогов
  • Проверку типов значений и их квалификаторов
  • Работу с определяемыми типами и их составными типами
  • Методы MetadataValueType.fromString() и проверку содержимого типов

Реализация соответствует целям PR по добавлению поддержки чтения описаний типов значений для метаданных.


75-94: Отличная проверка атрибута каталога и его типа значения.

Тест правильно проверяет:

  • Наличие атрибута "Реквизит2"
  • Тип значения и его свойства (содержит NUMBER, не составной)
  • Квалификаторы числа (точность 10, разряды 0, может быть отрицательным)

Это хорошо покрывает функциональность чтения описаний типов значений для реквизитов.


122-141: Превосходная проверка определяемых типов.

Тест отлично проверяет:

  • Определяемый тип "ЗначениеДоступа" как составной тип
  • Что он не содержит примитивные числовые типы
  • Правильную работу MetadataValueType.fromString()
  • Проверку содержимости типов через contains()
  • Метаданные типов (вид, имена на русском и английском)

Это демонстрирует полную функциональность новых возможностей чтения типов значений.

Copy link

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: 0

🧹 Nitpick comments (3)
src/main/java/com/github/_1c_syntax/bsl/reader/common/converter/ValueTypeDescriptionConverter.java (1)

67-69: Уточнить уровень логирования для неизвестных полей

LOGGER.warn("Unknown type description field {}"…) может зашумлять логи при новых версиях формата. Рассмотрите понижение до debug или добавление контекста (путь, родительский узел).

src/main/java/com/github/_1c_syntax/bsl/reader/common/converter/ValueTypeConverter.java (2)

55-87: Нормализовать входную строку (trim) перед кэшированием и разбором

Без trim() разные по форме, но одинаковые значения будут расходиться в кеше и плодить ложные "unknown" предупреждения.

Примените патч:

   @Override
   public Object fromString(String string) {
-    // сначала из кеша
-    var type = getType(string);
+    // нормализуем вход: убираем пробелы по краям
+    var input = string.trim();
+    // сначала из кеша
+    var type = getType(input);
     if (type != null) {
       return type;
     }
@@
-    var trimString = string;
-    var posColon = string.indexOf(":");
+    var trimString = input;
+    var posColon = input.indexOf(":");
     if (posColon > 0) {
-      trimString = string.substring(posColon + 1);
+      trimString = input.substring(posColon + 1);
       type = getType(trimString);
       if (type != null) {
-        putType(string, type);
+        putType(input, type);
         return type;
       }
     }
@@
     type = MetadataValueType.fromString(trimString);
     if (type != null) {
-      putType(string, type);
+      putType(input, type);
       return type;
     }
 
     // Тип нам неизвестен, выведем ворнинг и создадим неизвестный тип
-    LOGGER.warn(WARN_TEMPLATE, string, string);
-    type = new UnknownValueType(string);
-    putType(string, type);
+    LOGGER.warn(WARN_TEMPLATE, input, input);
+    type = new UnknownValueType(input);
+    putType(input, type);
     return type;
   }

52-53: Потенциальный неограниченный рост кеша для неизвестных типов

ALL_TYPES пополняется для каждого неизвестного значения. Если вход управляем внешними данными, возможен рост памяти. Минимально — ввести верхнюю границу для кэширования неизвестных значений или метрику/счетчик для мониторинга.

📜 Review details

Configuration used: CodeRabbit UI

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between e2e8cd9 and e2fd74e.

📒 Files selected for processing (5)
  • src/main/java/com/github/_1c_syntax/bsl/mdo/storage/form/FormAttributeValueType.java (1 hunks)
  • src/main/java/com/github/_1c_syntax/bsl/mdo/support/MetadataValueType.java (1 hunks)
  • src/main/java/com/github/_1c_syntax/bsl/reader/common/converter/ValueTypeConverter.java (1 hunks)
  • src/main/java/com/github/_1c_syntax/bsl/reader/common/converter/ValueTypeDescriptionConverter.java (1 hunks)
  • src/test/java/com/github/_1c_syntax/bsl/examples/ValueTypeTest.java (1 hunks)
🚧 Files skipped from review as they are similar to previous changes (2)
  • src/test/java/com/github/_1c_syntax/bsl/examples/ValueTypeTest.java
  • src/main/java/com/github/_1c_syntax/bsl/mdo/storage/form/FormAttributeValueType.java
🧰 Additional context used
🧠 Learnings (2)
📚 Learning: 2025-09-19T07:56:27.155Z
Learnt from: theshadowco
PR: 1c-syntax/mdclasses#519
File: src/main/java/com/github/_1c_syntax/bsl/reader/common/converter/ValueTypeConverter.java:82-86
Timestamp: 2025-09-19T07:56:27.155Z
Learning: В проекте mdclasses параметр lombok.log.fieldName установлен в "LOGGER" в файле lombok.config, поэтому Lombok Slf4j генерирует поле с именем LOGGER, а не стандартное "log".

Applied to files:

  • src/main/java/com/github/_1c_syntax/bsl/reader/common/converter/ValueTypeConverter.java
📚 Learning: 2025-09-19T07:56:27.155Z
Learnt from: theshadowco
PR: 1c-syntax/mdclasses#519
File: src/main/java/com/github/_1c_syntax/bsl/reader/common/converter/ValueTypeConverter.java:82-86
Timestamp: 2025-09-19T07:56:27.155Z
Learning: В проекте mdclasses имя поля логгера для Lombok Slf4j определяется в файле lombok.config через параметр lombok.log.fieldName, а не использует стандартное имя "log".

Applied to files:

  • src/main/java/com/github/_1c_syntax/bsl/reader/common/converter/ValueTypeConverter.java
🧬 Code graph analysis (2)
src/main/java/com/github/_1c_syntax/bsl/reader/common/converter/ValueTypeDescriptionConverter.java (3)
src/main/java/com/github/_1c_syntax/bsl/mdo/support/MetadataValueType.java (1)
  • MetadataValueType (39-271)
src/main/java/com/github/_1c_syntax/bsl/reader/common/converter/ValueTypeConverter.java (1)
  • Slf4j (41-125)
src/main/java/com/github/_1c_syntax/bsl/reader/common/converter/ValueTypeQualifierConverter.java (1)
  • Slf4j (42-111)
src/main/java/com/github/_1c_syntax/bsl/reader/common/converter/ValueTypeConverter.java (4)
src/main/java/com/github/_1c_syntax/bsl/mdo/storage/form/FormAttributeValueType.java (1)
  • FormAttributeValueType (31-121)
src/main/java/com/github/_1c_syntax/bsl/mdo/support/MetadataValueType.java (1)
  • MetadataValueType (39-271)
src/main/java/com/github/_1c_syntax/bsl/reader/common/converter/ValueTypeDescriptionConverter.java (1)
  • Slf4j (41-79)
src/main/java/com/github/_1c_syntax/bsl/reader/common/converter/ValueTypeQualifierConverter.java (1)
  • Slf4j (42-111)
⏰ 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 (21, windows-latest)
  • GitHub Check: build (21, macOS-latest)
  • GitHub Check: build (23, macOS-latest)
  • GitHub Check: build (17, ubuntu-latest)
  • GitHub Check: build (23, ubuntu-latest)
  • GitHub Check: build (23, windows-latest)
  • GitHub Check: build (17, windows-latest)
  • GitHub Check: build (21, windows-latest)
  • GitHub Check: build (17, macOS-latest)
  • GitHub Check: build (17, ubuntu-latest)
  • GitHub Check: build (23, macOS-latest)
  • GitHub Check: build (17, windows-latest)
  • GitHub Check: build (21, macOS-latest)
  • GitHub Check: build (23, ubuntu-latest)
  • GitHub Check: build (23, windows-latest)
  • GitHub Check: build (21, ubuntu-latest)
🔇 Additional comments (2)
src/main/java/com/github/_1c_syntax/bsl/mdo/support/MetadataValueType.java (1)

39-270: Реестр типов и разрешение вариантов выглядят корректно

  • Кеши потокобезопасны (ConcurrentHashMap), ключи нормализуются через Locale.ROOT.
  • Логика fromString с разбором варианта до точки и маркировкой composite у встроенных типов — ожидаемая.

Проверьте тестами кейсы с вариантами вида ExternalDataSource.TableRef и InformationRegister.List.*, чтобы зафиксировать поведение nameRu при конкатенации суффикса.

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

35-37: Сделать разбор узлов регистронезависимым и покрыть вариант "Types"

Нормализовать nodeName через nodeName.toLowerCase(Locale.ROOT); использовать Set TYPE_NODE_NAMES = Set.of("types", "type", "typeset") вместо List для O(1); выполнять суффиксную проверку на нормализованной строке (nn.endsWith("qualifiers")); добавить импорты java.util.Set и java.util.Locale. Файл: src/main/java/com/github/_1c_syntax/bsl/reader/common/converter/ValueTypeDescriptionConverter.java (стр. 35–37; аналогично 44, 55, 65–66). Поиск по репозиторию не вернул совпадений — подтвердить вручную применимость правки и учесть, что Set.of не допускает дубликатов.

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] Поддержка типов реквизитов метаданных, в т.ч. и составных
1 participant