From d5b54b3f5ced33b43485fdef67b96aab069eea29 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=9C=D0=B0=D0=BA=D1=81=D0=B8=D0=BC=D0=B5=D0=BD=D0=BA?= =?UTF-8?q?=D0=BE=20=D0=9D=D0=B8=D0=BA=D0=B8=D1=82=D0=B0=20=D0=92=D0=BB?= =?UTF-8?q?=D0=B0=D0=B4=D0=B8=D0=BC=D0=B8=D1=80=D0=BE=D0=B2=D0=B8=D1=87?= Date: Wed, 23 Sep 2026 14:41:05 +0300 Subject: [PATCH] =?UTF-8?q?refactor:=20=D1=83=D0=BB=D1=83=D1=87=D1=88?= =?UTF-8?q?=D0=B5=D0=BD=D0=B8=D0=B5=20=D0=BA=D0=B0=D1=87=D0=B5=D1=81=D1=82?= =?UTF-8?q?=D0=B2=D0=B0=20=D0=BA=D0=BE=D0=B4=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/ru/pdguard/config/SystemsConfig.java | 2 +- .../java/ru/pdguard/core/AdaptiveConcurrencyLimiter.java | 2 +- src/main/java/ru/pdguard/core/Pipeline.java | 6 +++++- src/main/java/ru/pdguard/detect/ResourceLoader.java | 7 +++++-- src/main/java/ru/pdguard/detect/Rule.java | 5 +++++ 5 files changed, 17 insertions(+), 5 deletions(-) diff --git a/src/main/java/ru/pdguard/config/SystemsConfig.java b/src/main/java/ru/pdguard/config/SystemsConfig.java index b6b04ea..b9552cb 100644 --- a/src/main/java/ru/pdguard/config/SystemsConfig.java +++ b/src/main/java/ru/pdguard/config/SystemsConfig.java @@ -27,7 +27,7 @@ import java.util.TreeMap; * Файла нет — работают настройки по умолчанию, и сервис поднимается без него. */ @Component -public class SystemsConfig { +public final class SystemsConfig { private static final Logger LOG = LoggerFactory.getLogger(SystemsConfig.class); diff --git a/src/main/java/ru/pdguard/core/AdaptiveConcurrencyLimiter.java b/src/main/java/ru/pdguard/core/AdaptiveConcurrencyLimiter.java index 1a387ef..28d688c 100644 --- a/src/main/java/ru/pdguard/core/AdaptiveConcurrencyLimiter.java +++ b/src/main/java/ru/pdguard/core/AdaptiveConcurrencyLimiter.java @@ -49,7 +49,7 @@ import java.util.concurrent.TimeUnit; * библиотеке — это ровно тот класс проблем, из-за которого модели второй * ступени понадобилась отдельная настройка сборки. */ -public class AdaptiveConcurrencyLimiter { +public final class AdaptiveConcurrencyLimiter { private static final long DEFAULT_ADJUST_WINDOW_NANOS = TimeUnit.MILLISECONDS.toNanos(20); diff --git a/src/main/java/ru/pdguard/core/Pipeline.java b/src/main/java/ru/pdguard/core/Pipeline.java index 29609f3..30fb1ac 100644 --- a/src/main/java/ru/pdguard/core/Pipeline.java +++ b/src/main/java/ru/pdguard/core/Pipeline.java @@ -16,6 +16,7 @@ import ru.pdguard.detect.PdTypes; import ru.pdguard.detect.RuleRegistry; import ru.pdguard.detect.Span; import ru.pdguard.mask.MaskContext; +import ru.pdguard.mask.MaskMode; import ru.pdguard.mask.Masker; import java.util.ArrayList; @@ -271,6 +272,9 @@ public class Pipeline { /** Замаскированный текст вместе с таблицей обратной замены. */ public record Masked(String text, Map restorations) { + public Masked { + restorations = Map.copyOf(restorations); + } } /** @@ -283,7 +287,7 @@ public class Pipeline { */ public Masked maskWithRestorations(String text, SystemPolicy policy) { SystemPolicy reversible = new SystemPolicy(policy.name(), policy.enabled(), policy.demask(), - ru.pdguard.mask.MaskMode.TOKEN, policy.types(), policy.requireCompanion(), policy.key()); + MaskMode.TOKEN, policy.types(), policy.requireCompanion(), policy.key()); List spans = findPersonalData(text, reversible); if (spans.isEmpty()) { return new Masked(text, Map.of()); diff --git a/src/main/java/ru/pdguard/detect/ResourceLoader.java b/src/main/java/ru/pdguard/detect/ResourceLoader.java index d1dce2d..32af586 100644 --- a/src/main/java/ru/pdguard/detect/ResourceLoader.java +++ b/src/main/java/ru/pdguard/detect/ResourceLoader.java @@ -12,6 +12,8 @@ import java.util.Comparator; import java.util.List; import java.util.function.Function; import java.util.stream.Collectors; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; /** * Общие приёмы чтения словарей и внешних файлов. @@ -24,6 +26,8 @@ import java.util.stream.Collectors; */ final class ResourceLoader { + private static final Logger LOG = LoggerFactory.getLogger(ResourceLoader.class); + private ResourceLoader() { } @@ -90,8 +94,7 @@ final class ResourceLoader { } } catch (IOException e) { // Битый файл не должен ронять работу: остаётся прежнее значение. - java.util.logging.Logger.getLogger(ResourceLoader.class.getName()) - .fine("Не удалось перечитать файл " + path + ": " + e.getMessage()); + LOG.warn("Не удалось перечитать файл {}", path, e); } return state.current; } diff --git a/src/main/java/ru/pdguard/detect/Rule.java b/src/main/java/ru/pdguard/detect/Rule.java index 3991829..6347e91 100644 --- a/src/main/java/ru/pdguard/detect/Rule.java +++ b/src/main/java/ru/pdguard/detect/Rule.java @@ -31,6 +31,11 @@ import java.util.regex.Pattern; public record Rule(String type, Pattern pattern, int priority, List groups, Predicate validator, Pattern veto, Pattern context, List anchors) { + public Rule { + groups = List.copyOf(groups); + anchors = List.copyOf(anchors); + } + /** * Флаги компиляции для всех правил. *