From ef6da8ce0f1090644b7bb8fd32d19502a3708a05 Mon Sep 17 00:00:00 2001 From: Slawomir Jaranowski Date: Sat, 11 Apr 2026 18:21:13 +0200 Subject: [PATCH] Refactor PLURAL_EXCEPTIONS to use ThreadLocal for thread safety What changed: - Changed PLURAL_EXCEPTIONS from a static Map to a ThreadLocal. Why: - Ensures thread safety when accessing PLURAL_EXCEPTIONS in a multi-threaded environment. --- .../modello/plugin/AbstractModelloGenerator.java | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/modello-core/src/main/java/org/codehaus/modello/plugin/AbstractModelloGenerator.java b/modello-core/src/main/java/org/codehaus/modello/plugin/AbstractModelloGenerator.java index b9a952e0a..2781ba490 100644 --- a/modello-core/src/main/java/org/codehaus/modello/plugin/AbstractModelloGenerator.java +++ b/modello-core/src/main/java/org/codehaus/modello/plugin/AbstractModelloGenerator.java @@ -59,7 +59,7 @@ public abstract class AbstractModelloGenerator implements ModelloGenerator { private final Logger logger = LoggerFactory.getLogger(getClass()); - private static final Map PLURAL_EXCEPTIONS = new HashMap<>(); + private static final ThreadLocal> PLURAL_EXCEPTIONS = ThreadLocal.withInitial(HashMap::new); private Model model; @@ -97,8 +97,9 @@ protected void initialize(Model model, Map parameters) throws Mo licenseText = (List) parameters.get(ModelloParameterConstants.LICENSE_TEXT); + PLURAL_EXCEPTIONS.get().clear(); Optional.ofNullable(parameters.get(ModelloParameterConstants.PLURAL_EXCEPTIONS)) - .ifPresent(o -> PLURAL_EXCEPTIONS.putAll((Map) o)); + .ifPresent(o -> PLURAL_EXCEPTIONS.get().putAll((Map) o)); } protected Model getModel() { @@ -207,8 +208,8 @@ public static String singular(String name) { return name; } - if (PLURAL_EXCEPTIONS.containsKey(name)) { - return PLURAL_EXCEPTIONS.get(name); + if (PLURAL_EXCEPTIONS.get().containsKey(name)) { + return PLURAL_EXCEPTIONS.get().get(name); } if (name.endsWith("ies")) {