From aa8aea5eec1fe63ab8db09c216f93c7854ee6907 Mon Sep 17 00:00:00 2001 From: extio-de Date: Sun, 1 Feb 2026 15:08:46 +0100 Subject: [PATCH] feat(renderer): replace HashMap with ConcurrentHashMap for thread-safe control caching --- .../renderer/g2d/control/G2DDrawControl.java | 23 +++++++++---------- 1 file changed, 11 insertions(+), 12 deletions(-) diff --git a/src/main/java/de/extio/game_engine/renderer/g2d/control/G2DDrawControl.java b/src/main/java/de/extio/game_engine/renderer/g2d/control/G2DDrawControl.java index 9ca013d..ab7313d 100644 --- a/src/main/java/de/extio/game_engine/renderer/g2d/control/G2DDrawControl.java +++ b/src/main/java/de/extio/game_engine/renderer/g2d/control/G2DDrawControl.java @@ -2,9 +2,9 @@ package de.extio.game_engine.renderer.g2d.control; import java.awt.Graphics2D; import java.util.ArrayList; -import java.util.HashMap; import java.util.List; import java.util.Map; +import java.util.concurrent.ConcurrentHashMap; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -15,6 +15,7 @@ import de.extio.game_engine.renderer.g2d.control.impl.G2DBaseControlImpl; import de.extio.game_engine.renderer.g2d.control.impl.G2DButtonControlImpl; import de.extio.game_engine.renderer.g2d.control.impl.G2DLabelControlImpl; import de.extio.game_engine.renderer.g2d.control.impl.G2DMultiLineTextAreaControlImpl; +import de.extio.game_engine.renderer.g2d.control.impl.G2DPopupMenuControlImpl; import de.extio.game_engine.renderer.g2d.control.impl.G2DSetFocusControl; import de.extio.game_engine.renderer.g2d.control.impl.G2DSliderControlImpl; import de.extio.game_engine.renderer.g2d.control.impl.G2DSwitchControlImpl; @@ -24,7 +25,6 @@ import de.extio.game_engine.renderer.g2d.control.impl.G2DToggleButtonControlImpl import de.extio.game_engine.renderer.g2d.control.impl.G2DTooltipControl; import de.extio.game_engine.renderer.g2d.control.impl.G2DWindowCloseButtonControlImpl; import de.extio.game_engine.renderer.g2d.control.impl.G2DWindowPanelControlImpl; -import de.extio.game_engine.renderer.g2d.control.impl.G2DPopupMenuControlImpl; import de.extio.game_engine.renderer.model.RenderingBo; import de.extio.game_engine.renderer.model.RenderingBoLayer; import de.extio.game_engine.renderer.model.bo.ControlRenderingBo; @@ -37,14 +37,14 @@ public class G2DDrawControl extends G2DAbstractRenderingBo implements ControlRen private final static Logger LOGGER = LoggerFactory.getLogger(G2DDrawControl.class); - public static Map CACHED_CONTROLS = new HashMap<>(); + public static Map CACHED_CONTROLS = new ConcurrentHashMap<>(); - public static Map> CONTROL_GROUPS = new HashMap<>(); + public static Map> CONTROL_GROUPS = new ConcurrentHashMap<>(); private Class clazz; private String caption; - + private long lastCaptionUpdateTime; private String controlGroup; @@ -74,9 +74,9 @@ public class G2DDrawControl extends G2DAbstractRenderingBo implements ControlRen private PopupMenuData popupMenuData; private SetFocusData setFocusData; - + private Object customData; - + private long lastControlDataUpdateTime; private boolean visible; @@ -90,7 +90,7 @@ public class G2DDrawControl extends G2DAbstractRenderingBo implements ControlRen private Area2 controlArea = null; private final Area2 tempArea = new Area2(MutableCoordI2.create(), MutableCoordI2.create()); - + private List> customControlConfigurations; public G2DDrawControl() { @@ -215,11 +215,10 @@ public class G2DDrawControl extends G2DAbstractRenderingBo implements ControlRen return; } } - + if (this.customControlConfigurations == null) { @SuppressWarnings("unchecked") - final - var beans = (java.util.Collection>) (java.util.Collection) this.rendererData.getApplicationContext().getBeansOfType(CustomControlConfiguration.class).values(); + final var beans = (java.util.Collection>) (java.util.Collection) this.rendererData.getApplicationContext().getBeansOfType(CustomControlConfiguration.class).values(); this.customControlConfigurations = List.copyOf(beans); } @@ -228,7 +227,7 @@ public class G2DDrawControl extends G2DAbstractRenderingBo implements ControlRen if (this.clazz == null) { LOGGER.warn("G2DDrawControl: control type not specified for control id {}", this.id); return; - } + } else if (this.clazz == ButtonControl.class) { control = new G2DButtonControlImpl(); }