-
Notifications
You must be signed in to change notification settings - Fork 25
Чтение описание типов реквизитов и метаданных #519
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Conversation
…ствующие колонки + добавлен список ссылок на реквизиты документов - доработан конвертор типов - корректировка тестов
- рефакторинг, фикс тестов
WalkthroughДобавлены модели и конвертеры для описаний типов значений (ValueType, ValueTypeDescription, Qualifiers); введён интерфейс Changes
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()
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
Estimated code review effort🎯 4 (Complex) | ⏱️ ~60 minutes Possibly related PRs
Poem
Pre-merge checks and finishing touches❌ Failed checks (2 warnings)
✅ Passed checks (3 passed)
✨ Finishing touches
🧪 Generate unit tests
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. Comment |
There was a problem hiding this 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-среде. Снапшоты по определению являются нестабильными версиями.
Рекомендую:
- Использовать релизные версии в основной ветке
- Ограничить использование снапшотов только для feature-веток или dev-окружения
- Добавить комментарий о временном характере использования снапшота
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
⛔ Files ignored due to path filters (72)
src/test/resources/fixtures/external/ТестоваяВнешняяОбработка.jsonis excluded by!**/*.jsonsrc/test/resources/fixtures/external/ТестоваяВнешняяОбработка_edt.jsonis excluded by!**/*.jsonsrc/test/resources/fixtures/external/ТестовыйВнешнийОтчет.jsonis excluded by!**/*.jsonsrc/test/resources/fixtures/external/ТестовыйВнешнийОтчет_edt.jsonis excluded by!**/*.jsonsrc/test/resources/fixtures/mdclasses/AccountingRegisters.РегистрБухгалтерии1.jsonis excluded by!**/*.jsonsrc/test/resources/fixtures/mdclasses/AccumulationRegisters.РегистрНакопления1.jsonis excluded by!**/*.jsonsrc/test/resources/fixtures/mdclasses/CalculationRegisters.РегистрРасчета1.jsonis excluded by!**/*.jsonsrc/test/resources/fixtures/mdclasses/CalculationRegisters.РегистрРасчета1_edt.jsonis excluded by!**/*.jsonsrc/test/resources/fixtures/mdclasses/Catalogs.Справочник1.jsonis excluded by!**/*.jsonsrc/test/resources/fixtures/mdclasses/Catalogs.Справочник1_edt.jsonis excluded by!**/*.jsonsrc/test/resources/fixtures/mdclasses/ChartsOfAccounts.ПланСчетов1.jsonis excluded by!**/*.jsonsrc/test/resources/fixtures/mdclasses/ChartsOfAccounts.ПланСчетов1_edt.jsonis excluded by!**/*.jsonsrc/test/resources/fixtures/mdclasses/ChartsOfCharacteristicTypes.ПланВидовХарактеристик1.jsonis excluded by!**/*.jsonsrc/test/resources/fixtures/mdclasses/ChartsOfCharacteristicTypes.ПланВидовХарактеристик1_edt.jsonis excluded by!**/*.jsonsrc/test/resources/fixtures/mdclasses/CommonAttributes.ОбщийРеквизит1.jsonis excluded by!**/*.jsonsrc/test/resources/fixtures/mdclasses/Configuration.jsonis excluded by!**/*.jsonsrc/test/resources/fixtures/mdclasses/Configuration_edt.jsonis excluded by!**/*.jsonsrc/test/resources/fixtures/mdclasses/Constants.Константа1.jsonis excluded by!**/*.jsonsrc/test/resources/fixtures/mdclasses/Constants.Константа1_edt.jsonis excluded by!**/*.jsonsrc/test/resources/fixtures/mdclasses/DataProcessors.Обработка1.jsonis excluded by!**/*.jsonsrc/test/resources/fixtures/mdclasses/DataProcessors.Обработка1_edt.jsonis excluded by!**/*.jsonsrc/test/resources/fixtures/mdclasses/DefinedTypes.ОпределяемыйТип1.jsonis excluded by!**/*.jsonsrc/test/resources/fixtures/mdclasses/DocumentJournals.ЖурналДокументов1.jsonis excluded by!**/*.jsonsrc/test/resources/fixtures/mdclasses/DocumentJournals.ЖурналДокументов1_edt.jsonis excluded by!**/*.jsonsrc/test/resources/fixtures/mdclasses/Documents.Документ1.jsonis excluded by!**/*.jsonsrc/test/resources/fixtures/mdclasses/Documents.Документ1_edt.jsonis excluded by!**/*.jsonsrc/test/resources/fixtures/mdclasses/EventSubscriptions.ПодпискаНаСобытие1.jsonis excluded by!**/*.jsonsrc/test/resources/fixtures/mdclasses/ExternalDataSources.ТекущаяСУБД.jsonis excluded by!**/*.jsonsrc/test/resources/fixtures/mdclasses/ExternalDataSources.ТекущаяСУБД_edt.jsonis excluded by!**/*.jsonsrc/test/resources/fixtures/mdclasses/InformationRegisters.РегистрСведений1.jsonis excluded by!**/*.jsonsrc/test/resources/fixtures/mdclasses/InformationRegisters.РегистрСведений1_edt.jsonis excluded by!**/*.jsonsrc/test/resources/fixtures/mdclasses/Reports.Отчет1.jsonis excluded by!**/*.jsonsrc/test/resources/fixtures/mdclasses/Reports.Отчет1_edt.jsonis excluded by!**/*.jsonsrc/test/resources/fixtures/mdclasses/Sequences.Последовательность1.jsonis excluded by!**/*.jsonsrc/test/resources/fixtures/mdclasses/Sequences.Последовательность1_edt.jsonis excluded by!**/*.jsonsrc/test/resources/fixtures/mdclasses/SessionParameters.ПараметрСеанса1.jsonis excluded by!**/*.jsonsrc/test/resources/fixtures/mdclasses/Tasks.Задача1.jsonis excluded by!**/*.jsonsrc/test/resources/fixtures/mdclasses_3_18/Configuration.jsonis excluded by!**/*.jsonsrc/test/resources/fixtures/mdclasses_3_18/Configuration_edt.jsonis excluded by!**/*.jsonsrc/test/resources/fixtures/mdclasses_3_24/Configuration_edt.jsonis excluded by!**/*.jsonsrc/test/resources/fixtures/mdclasses_5_1/Configuration.jsonis excluded by!**/*.jsonsrc/test/resources/fixtures/mdclasses_ext/Configuration.jsonis excluded by!**/*.jsonsrc/test/resources/fixtures/mdclasses_ext/Configuration_edt.jsonis excluded by!**/*.jsonsrc/test/resources/fixtures/ssl_3_1/BusinessProcesses.Задание.jsonis excluded by!**/*.jsonsrc/test/resources/fixtures/ssl_3_1/BusinessProcesses.Задание_edt.jsonis excluded by!**/*.jsonsrc/test/resources/fixtures/ssl_3_1/Catalogs.Заметки.jsonis excluded by!**/*.jsonsrc/test/resources/fixtures/ssl_3_1/Catalogs.Заметки_edt.jsonis excluded by!**/*.jsonsrc/test/resources/fixtures/ssl_3_1/ChartsOfCharacteristicTypes.ДополнительныеРеквизитыИСведения.jsonis excluded by!**/*.jsonsrc/test/resources/fixtures/ssl_3_1/ChartsOfCharacteristicTypes.ДополнительныеРеквизитыИСведения_edt.jsonis excluded by!**/*.jsonsrc/test/resources/fixtures/ssl_3_1/CommonAttributes.ОбластьДанныхВспомогательныеДанные.jsonis excluded by!**/*.jsonsrc/test/resources/fixtures/ssl_3_1/CommonForms.Вопрос.jsonis excluded by!**/*.jsonsrc/test/resources/fixtures/ssl_3_1/CommonForms.Вопрос_edt.jsonis excluded by!**/*.jsonsrc/test/resources/fixtures/ssl_3_1/Constants.ЗаголовокСистемы.jsonis excluded by!**/*.jsonsrc/test/resources/fixtures/ssl_3_1/DataProcessors.ЗагрузкаКурсовВалют.jsonis excluded by!**/*.jsonsrc/test/resources/fixtures/ssl_3_1/DataProcessors.ЗагрузкаКурсовВалют_edt.jsonis excluded by!**/*.jsonsrc/test/resources/fixtures/ssl_3_1/DefinedTypes.ВладелецФайлов.jsonis excluded by!**/*.jsonsrc/test/resources/fixtures/ssl_3_1/DocumentJournals.Взаимодействия.jsonis excluded by!**/*.jsonsrc/test/resources/fixtures/ssl_3_1/DocumentJournals.Взаимодействия_edt.jsonis excluded by!**/*.jsonsrc/test/resources/fixtures/ssl_3_1/Documents.Анкета.jsonis excluded by!**/*.jsonsrc/test/resources/fixtures/ssl_3_1/Documents.Анкета_edt.jsonis excluded by!**/*.jsonsrc/test/resources/fixtures/ssl_3_1/EventSubscriptions.ВариантыОтчетовПередУдалениемИдентификатораОбъектаМетаданных.jsonis excluded by!**/*.jsonsrc/test/resources/fixtures/ssl_3_1/ExchangePlans.ОбновлениеИнформационнойБазы.jsonis excluded by!**/*.jsonsrc/test/resources/fixtures/ssl_3_1/ExchangePlans.ОбновлениеИнформационнойБазы_edt.jsonis excluded by!**/*.jsonsrc/test/resources/fixtures/ssl_3_1/FilterCriteria.ФайлыВТоме.jsonis excluded by!**/*.jsonsrc/test/resources/fixtures/ssl_3_1/FilterCriteria.ФайлыВТоме_edt.jsonis excluded by!**/*.jsonsrc/test/resources/fixtures/ssl_3_1/InformationRegisters.ЭлектронныеПодписи.jsonis excluded by!**/*.jsonsrc/test/resources/fixtures/ssl_3_1/InformationRegisters.ЭлектронныеПодписи_edt.jsonis excluded by!**/*.jsonsrc/test/resources/fixtures/ssl_3_1/SessionParameters.ТекущийПользователь.jsonis excluded by!**/*.jsonsrc/test/resources/fixtures/ssl_3_1/SettingsStorages.ХранилищеВариантовОтчетов.jsonis excluded by!**/*.jsonsrc/test/resources/fixtures/ssl_3_1/SettingsStorages.ХранилищеВариантовОтчетов_edt.jsonis excluded by!**/*.jsonsrc/test/resources/fixtures/ssl_3_1/Tasks.ЗадачаИсполнителя.jsonis excluded by!**/*.jsonsrc/test/resources/fixtures/ssl_3_1/Tasks.ЗадачаИсполнителя_edt.jsonis 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*.
src/main/java/com/github/_1c_syntax/bsl/reader/common/converter/ValueTypeConverter.java
Show resolved
Hide resolved
There was a problem hiding this 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
📒 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()- Метаданные типов (вид, имена на русском и английском)
Это демонстрирует полную функциональность новых возможностей чтения типов значений.
|
There was a problem hiding this 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
📒 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 не допускает дубликатов.



Описание
Для всех MD, имеющих описание типа значения, добавлен интерфейс
Связанные задачи
Closes #277
Чеклист
Общие
gradlew precommit)Дополнительно