diff --git a/forge-game/src/main/java/forge/game/trigger/TriggerType.java b/forge-game/src/main/java/forge/game/trigger/TriggerType.java index 6593f2de15b..6107d35bfec 100644 --- a/forge-game/src/main/java/forge/game/trigger/TriggerType.java +++ b/forge-game/src/main/java/forge/game/trigger/TriggerType.java @@ -71,9 +71,25 @@ public enum TriggerType { Vote(TriggerVote.class); private final Class classTrigger; + private final Constructor constructor; + private TriggerType(Class clasz) { classTrigger = clasz; + constructor = findConstructor(clasz); } + + private static Constructor findConstructor(Class clasz) { + @SuppressWarnings("unchecked") + Constructor[] cc = (Constructor[]) clasz.getDeclaredConstructors(); + for (Constructor c : cc) { + Class[] pp = c.getParameterTypes(); + if (pp[0].isAssignableFrom(Map.class)) { + return c; + } + } + throw new RuntimeException("No constructor found that would take Map as 1st parameter in class " + clasz.getName()); + } + /** * TODO: Write javadoc for this method. * @param string @@ -109,21 +125,12 @@ public enum TriggerType { * @return */ public Trigger createTrigger(Map mapParams, Card host, boolean intrinsic) { - @SuppressWarnings("unchecked") - Constructor[] cc = (Constructor[]) classTrigger.getDeclaredConstructors(); - for (Constructor c : cc) { - Class[] pp = c.getParameterTypes(); - if (pp[0].isAssignableFrom(Map.class)) { - try { - Trigger res = c.newInstance(mapParams, host, intrinsic); - res.setMode(this); - return res; - } catch (IllegalArgumentException | InstantiationException | IllegalAccessException | InvocationTargetException e) { - // TODO Auto-generated catch block ignores the exception, but sends it to System.err and probably forge.log. - e.printStackTrace(); - } - } + try { + Trigger res = constructor.newInstance(mapParams, host, intrinsic); + res.setMode(this); + return res; + } catch (IllegalArgumentException | InstantiationException | IllegalAccessException | InvocationTargetException e) { + throw new RuntimeException(e); } - throw new RuntimeException("No constructor found that would take Map as 1st parameter in class " + classTrigger.getName()); } }