diff --git a/client/src/main/java/envoy/client/util/IconUtil.java b/client/src/main/java/envoy/client/util/IconUtil.java index 39dce33..3445b42 100644 --- a/client/src/main/java/envoy/client/util/IconUtil.java +++ b/client/src/main/java/envoy/client/util/IconUtil.java @@ -22,10 +22,11 @@ import envoy.util.EnvoyLog; public final class IconUtil { private static final HashMap cache = new HashMap<>(); + private static final HashMap scaledCache = new HashMap<>(); private static final HashMap awtCache = new HashMap<>(); private IconUtil() {} - + /** * Loads an image from the resource folder. * @@ -33,14 +34,7 @@ public final class IconUtil { * @return the loaded image * @since Envoy Client v0.1-beta */ - public static Image load(String path) { - if (cache.containsKey(path)) return cache.get(path); - else { - final var image = new Image(IconUtil.class.getResource(path).toExternalForm()); - cache.put(path, image); - return image; - } - } + public static Image load(String path) { return cache.computeIfAbsent(path, p -> new Image(IconUtil.class.getResource(p).toExternalForm())); } /** * Loads an image from the resource folder and scales it to the given size. @@ -49,26 +43,15 @@ public final class IconUtil { * @param size the size to scale the icon to * @return the scaled image * @since Envoy Client v0.1-beta - * @apiNote There is an extraordinarily low chance that there is a size and name - * conflict. To achieve that however, you basically have to name your - * image intentionally like that. For normal human readable names or - * even automatically generated ones it will never occur. */ public static Image load(String path, int size) { - - // Minimizing the risk of size and name conflict - final var sizeSpecificString = path + size + "+a* "; - if (cache.containsKey(sizeSpecificString)) return cache.get(sizeSpecificString); - else { - final var image = new Image(IconUtil.class.getResource(path).toExternalForm(), size, size, true, true); - cache.put(sizeSpecificString, image); - return image; - } + return scaledCache.computeIfAbsent(path + size, p -> new Image(IconUtil.class.getResource(path).toExternalForm(), size, size, true, true)); } /** * Loads a {@code .png} image from the sub-folder {@code /icons/} of the - * resource folder.
+ * resource folder. + *

* The suffix {@code .png} is automatically appended. * * @param name the image name without the .png suffix @@ -160,19 +143,14 @@ public final class IconUtil { * @since Envoy Client v0.2-beta */ public static BufferedImage loadAWTCompatible(String path) { - if (awtCache.containsKey(path)) return awtCache.get(path); - else { - BufferedImage image = null; + return awtCache.computeIfAbsent(path, p -> { try { - image = ImageIO.read(IconUtil.class.getResource(path)); - } catch (final IOException e) { + return ImageIO.read(IconUtil.class.getResource(path)); + } catch (IOException e) { EnvoyLog.getLogger(IconUtil.class).log(Level.WARNING, String.format("Could not load image at path %s: ", path), e); + return null; } - - // If an IOException occurs we don't assume it'll be fixed on the next call - awtCache.put(path, image); - return image; - } + }); } /**