From e5f2dcdb048e6c79333625ef1c0b70856e9795e0 Mon Sep 17 00:00:00 2001 From: DziNeIT Date: Thu, 14 Aug 2014 13:50:35 +0100 Subject: [PATCH] Don't get a Field object for every Addon --- .../obsidian/addon/CommonAddonManager.java | 19 +++++++++++++++---- 1 file changed, 15 insertions(+), 4 deletions(-) diff --git a/src/main/java/org/obsidianbox/obsidian/addon/CommonAddonManager.java b/src/main/java/org/obsidianbox/obsidian/addon/CommonAddonManager.java index 7b32ba0..644de6d 100644 --- a/src/main/java/org/obsidianbox/obsidian/addon/CommonAddonManager.java +++ b/src/main/java/org/obsidianbox/obsidian/addon/CommonAddonManager.java @@ -61,10 +61,25 @@ public class CommonAddonManager implements AddonManager { private final SerializableHashMap addonMD5s = new SerializableHashMap(); private final Addon internal; + private Field gameField; + private Field descriptionField; + private Field loggerField; + private Field dataPathField; + public CommonAddonManager(Game game) { this.game = game; this.internal = new InternalAddon(game); addons.add(internal); + + Class clazz = Addon.class; + try { + gameField = clazz.getDeclaredField("game"); + descriptionField = clazz.getDeclaredField("description"); + loggerField = clazz.getDeclaredField("logger"); + dataPathField = clazz.getDeclaredField("dataPath"); + } catch (NoSuchFieldException e) { + e.printStackTrace(); + } } @Override @@ -103,22 +118,18 @@ public Addon loadAddon(Path path) throws InvalidAddonException, InvalidDescripti final Constructor constructor = addonClass.getConstructor(); final Addon addon = constructor.newInstance(); - final Field gameField = addonClass.getSuperclass().getDeclaredField("game"); gameField.setAccessible(true); gameField.set(addon, game); gameField.setAccessible(false); - final Field descriptionField = addonClass.getSuperclass().getDeclaredField("description"); descriptionField.setAccessible(true); descriptionField.set(addon, description); descriptionField.setAccessible(false); - final Field loggerField = addonClass.getSuperclass().getDeclaredField("logger"); loggerField.setAccessible(true); loggerField.set(addon, LogManager.getLogger(description.getName())); loggerField.setAccessible(false); - final Field dataPathField = addonClass.getSuperclass().getDeclaredField("dataPath"); dataPathField.setAccessible(true); dataPathField.set(addon, dataPath); dataPathField.setAccessible(false);