From d766b5cd139a14cddf09b340d7de4ec291e5ad2f Mon Sep 17 00:00:00 2001 From: Ivan Karlo Date: Thu, 8 Jan 2026 01:19:15 +0300 Subject: [PATCH 1/3] =?UTF-8?q?fix:=20=D0=A3=D0=BB=D1=83=D1=87=D1=88=D0=B5?= =?UTF-8?q?=D0=BD=D0=B0=20=D0=BE=D0=B1=D1=80=D0=B0=D0=B1=D0=BE=D1=82=D0=BA?= =?UTF-8?q?=D0=B0=20=D0=BE=D1=88=D0=B8=D0=B1=D0=BE=D0=BA=20=D0=B2=20RoleCo?= =?UTF-8?q?nverter=20=D0=B8=20ExtendXStream?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Добавлен блок catch для неожиданных исключений в ExtendXStream, регистрирующий сообщение об ошибке. - Обновлен RoleConverter для обработки результата ExtendXStream.read, гарантирующий присвоение значения RoleData.EMPTY, если результат чтения не является допустимым экземпляром RoleData. --- .../bsl/reader/common/xstream/ExtendXStream.java | 4 +++- .../bsl/reader/designer/converter/RoleConverter.java | 8 +++++++- .../bsl/reader/edt/converter/RoleConverter.java | 8 +++++++- 3 files changed, 17 insertions(+), 3 deletions(-) diff --git a/src/main/java/com/github/_1c_syntax/bsl/reader/common/xstream/ExtendXStream.java b/src/main/java/com/github/_1c_syntax/bsl/reader/common/xstream/ExtendXStream.java index 56a4a79d9..80800d4e5 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/reader/common/xstream/ExtendXStream.java +++ b/src/main/java/com/github/_1c_syntax/bsl/reader/common/xstream/ExtendXStream.java @@ -127,7 +127,9 @@ public Object fromXML(File file) { } catch (CannotResolveClassException e) { LOGGER.debug("Can't read file '{}' - unknown class (skipped) \n", file, e); } catch (StreamException e) { - LOGGER.error("Can't read file '{}' - it's broken (skipped): {}", file, e.getCause().getMessage()); + LOGGER.error("Can't read file '{}' - it's broken (skipped)", file, e); + } catch (Exception e) { + LOGGER.error("Can't read file '{}' - unexpected error (skipped): {}", file, e.getMessage(), e); } } return result; diff --git a/src/main/java/com/github/_1c_syntax/bsl/reader/designer/converter/RoleConverter.java b/src/main/java/com/github/_1c_syntax/bsl/reader/designer/converter/RoleConverter.java index f5b85b07d..3eea2193f 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/reader/designer/converter/RoleConverter.java +++ b/src/main/java/com/github/_1c_syntax/bsl/reader/designer/converter/RoleConverter.java @@ -41,7 +41,13 @@ public Object unmarshal(HierarchicalStreamReader reader, UnmarshallingContext co var readerContext = super.read(reader, context); RoleData data; try { - data = (RoleData) ExtendXStream.read(reader, dataPath(readerContext.getCurrentPath(), readerContext.getName())); + var readResult = ExtendXStream.read(reader, dataPath(readerContext.getCurrentPath(), readerContext.getName())); + if (readResult instanceof RoleData roleData) { + data = roleData; + } else { + // файл не прочитан или прочитан некорректно + data = RoleData.EMPTY; + } } catch (Exception e) { // ничего не делаем, считаем файл битым data = RoleData.EMPTY; diff --git a/src/main/java/com/github/_1c_syntax/bsl/reader/edt/converter/RoleConverter.java b/src/main/java/com/github/_1c_syntax/bsl/reader/edt/converter/RoleConverter.java index 895300aac..a9a1ab979 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/reader/edt/converter/RoleConverter.java +++ b/src/main/java/com/github/_1c_syntax/bsl/reader/edt/converter/RoleConverter.java @@ -40,7 +40,13 @@ public Object unmarshal(HierarchicalStreamReader reader, UnmarshallingContext co var readerContext = super.read(reader, context); RoleData data; try { - data = (RoleData) ExtendXStream.read(reader, dataPath(readerContext.getCurrentPath())); + var readResult = ExtendXStream.read(reader, dataPath(readerContext.getCurrentPath())); + if (readResult instanceof RoleData roleData) { + data = roleData; + } else { + // файл не прочитан или прочитан некорректно + data = RoleData.EMPTY; + } } catch (Exception e) { // ничего не делаем, считаем файл битым data = RoleData.EMPTY; From 4210601fc8a9c0deb9d8474f7d0b112b1ed77e1f Mon Sep 17 00:00:00 2001 From: Ivan Karlo Date: Thu, 8 Jan 2026 12:57:12 +0300 Subject: [PATCH 2/3] =?UTF-8?q?refactor:=20=D0=9E=D0=B1=D0=BD=D0=BE=D0=B2?= =?UTF-8?q?=D0=BB=D0=B5=D0=BD=D0=B8=D0=B5=20=D0=BB=D0=BE=D0=B3=D0=B8=D1=80?= =?UTF-8?q?=D0=BE=D0=B2=D0=B0=D0=BD=D0=B8=D1=8F=20=D0=BE=D1=88=D0=B8=D0=B1?= =?UTF-8?q?=D0=BE=D0=BA=20=D0=B2=20ExtendXStream=20=D1=81=20=D0=B8=D1=81?= =?UTF-8?q?=D0=BF=D0=BE=D0=BB=D1=8C=D0=B7=D0=BE=D0=B2=D0=B0=D0=BD=D0=B8?= =?UTF-8?q?=D0=B5=D0=BC=20=D1=83=D1=80=D0=BE=D0=B2=D0=BD=D1=8F=20WARN?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Изменено логирование ошибок с ERROR на WARN для некорректного чтения файлов и непредвиденных ошибок. --- .../_1c_syntax/bsl/reader/common/xstream/ExtendXStream.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/main/java/com/github/_1c_syntax/bsl/reader/common/xstream/ExtendXStream.java b/src/main/java/com/github/_1c_syntax/bsl/reader/common/xstream/ExtendXStream.java index 80800d4e5..333da656e 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/reader/common/xstream/ExtendXStream.java +++ b/src/main/java/com/github/_1c_syntax/bsl/reader/common/xstream/ExtendXStream.java @@ -123,13 +123,13 @@ public Object fromXML(File file) { try { result = super.fromXML(file); } catch (ConversionException e) { - LOGGER.error("Can't read file '{}' - it's broken (skipped) \n", file, e); + LOGGER.warn("Can't read file '{}' - it's broken (skipped) \n", file, e); } catch (CannotResolveClassException e) { LOGGER.debug("Can't read file '{}' - unknown class (skipped) \n", file, e); } catch (StreamException e) { - LOGGER.error("Can't read file '{}' - it's broken (skipped)", file, e); + LOGGER.warn("Can't read file '{}' - it's broken (skipped)", file, e); } catch (Exception e) { - LOGGER.error("Can't read file '{}' - unexpected error (skipped): {}", file, e.getMessage(), e); + LOGGER.warn("Can't read file '{}' - unexpected error (skipped): {}", file, e.getMessage(), e); } } return result; From 96a415f6d0edbeb312a57e856875e4b8d98c9189 Mon Sep 17 00:00:00 2001 From: Ivan Karlo Date: Thu, 8 Jan 2026 12:57:41 +0300 Subject: [PATCH 3/3] =?UTF-8?q?feat:=20=D0=94=D0=BE=D0=B1=D0=B0=D0=B2?= =?UTF-8?q?=D0=BB=D0=B5=D0=BD=D1=8B=20=D0=BA=D0=BE=D0=BC=D0=BC=D0=B5=D0=BD?= =?UTF-8?q?=D1=82=D0=B0=D1=80=D0=B8=D0=B8=20=D0=B8=20=D0=B4=D0=BE=D0=BA?= =?UTF-8?q?=D1=83=D0=BC=D0=B5=D0=BD=D1=82=D0=B0=D1=86=D0=B8=D1=8F=20=D0=B2?= =?UTF-8?q?=20RoleConverter=20=D0=B4=D0=BB=D1=8F=20=D1=83=D0=BB=D1=83?= =?UTF-8?q?=D1=87=D1=88=D0=B5=D0=BD=D0=B8=D1=8F=20=D0=BF=D0=BE=D0=BD=D0=B8?= =?UTF-8?q?=D0=BC=D0=B0=D0=BD=D0=B8=D1=8F=20=D0=BA=D0=BE=D0=B4=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Добавлены Javadoc комментарии для методов и класса, описывающие их функциональность и параметры. - Обновлены пути к файлам прав доступа. --- .../designer/converter/RoleConverter.java | 23 +++++++++++++++++++ .../reader/edt/converter/RoleConverter.java | 22 ++++++++++++++++++ 2 files changed, 45 insertions(+) diff --git a/src/main/java/com/github/_1c_syntax/bsl/reader/designer/converter/RoleConverter.java b/src/main/java/com/github/_1c_syntax/bsl/reader/designer/converter/RoleConverter.java index 3eea2193f..5c1e25c1d 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/reader/designer/converter/RoleConverter.java +++ b/src/main/java/com/github/_1c_syntax/bsl/reader/designer/converter/RoleConverter.java @@ -31,11 +31,21 @@ import java.nio.file.Path; import java.nio.file.Paths; +/** + * Конвертер для чтения ролей из формата конфигуратора + */ @DesignerConverter public class RoleConverter extends AbstractReadConverter { private static final String DATA_FIELD = "data"; + /** + * Выполняет чтение роли из XML, включая данные прав доступа из файла Rights.xml + * + * @param reader Ридер XML потока + * @param context Контекст десериализации + * @return Прочитанный объект роли с данными прав доступа + */ @Override public Object unmarshal(HierarchicalStreamReader reader, UnmarshallingContext context) { var readerContext = super.read(reader, context); @@ -57,11 +67,24 @@ public Object unmarshal(HierarchicalStreamReader reader, UnmarshallingContext co return readerContext.build(); } + /** + * Проверяет, может ли конвертер обработать указанный тип + * + * @param type Тип класса для проверки + * @return true, если тип является Role или его подклассом + */ @Override public boolean canConvert(Class type) { return Role.class.isAssignableFrom(type); } + /** + * Формирует путь к файлу Rights.xml для роли + * + * @param path Путь к файлу описания роли + * @param name Имя роли + * @return Путь к файлу Rights.xml + */ private static Path dataPath(Path path, String name) { return Paths.get(path.getParent().toString(), name, "Ext", "Rights.xml"); } diff --git a/src/main/java/com/github/_1c_syntax/bsl/reader/edt/converter/RoleConverter.java b/src/main/java/com/github/_1c_syntax/bsl/reader/edt/converter/RoleConverter.java index a9a1ab979..3dea631ad 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/reader/edt/converter/RoleConverter.java +++ b/src/main/java/com/github/_1c_syntax/bsl/reader/edt/converter/RoleConverter.java @@ -30,11 +30,21 @@ import java.nio.file.Path; +/** + * Конвертер для чтения ролей из формата ЕДТ + */ @EDTConverter public class RoleConverter extends AbstractReadConverter { private static final String DATA_FIELD = "data"; + /** + * Выполняет чтение роли из XML, включая данные прав доступа из файла Rights.rights + * + * @param reader Ридер XML потока + * @param context Контекст десериализации + * @return Прочитанный объект роли с данными прав доступа + */ @Override public Object unmarshal(HierarchicalStreamReader reader, UnmarshallingContext context) { var readerContext = super.read(reader, context); @@ -56,11 +66,23 @@ public Object unmarshal(HierarchicalStreamReader reader, UnmarshallingContext co return readerContext.build(); } + /** + * Проверяет, может ли конвертер обработать указанный тип + * + * @param type Тип класса для проверки + * @return true, если тип является Role или его подклассом + */ @Override public boolean canConvert(Class type) { return Role.class.isAssignableFrom(type); } + /** + * Формирует путь к файлу Rights.rights для роли + * + * @param path Путь к файлу описания роли + * @return Путь к файлу Rights.rights + */ private static Path dataPath(Path path) { return Path.of(path.getParent().toString(), "Rights.rights"); }