From e56171305858aeb15aa69f24ebeb68220b69df1d Mon Sep 17 00:00:00 2001 From: Maxmtg Date: Sat, 1 Jun 2013 13:11:58 +0000 Subject: [PATCH] Api-based SpellEffects and Ai classes are all stateless (except the one for tokens) - this allows me to pre-create their instances in ApiType enum members and use same instance multiple times. --- src/main/java/forge/card/ability/ApiType.java | 20 +++++++++++++++---- .../ability/effects/TapOrUntapAllEffect.java | 2 +- 2 files changed, 17 insertions(+), 5 deletions(-) diff --git a/src/main/java/forge/card/ability/ApiType.java b/src/main/java/forge/card/ability/ApiType.java index d0ca6aeb841..9bd68d70b9e 100644 --- a/src/main/java/forge/card/ability/ApiType.java +++ b/src/main/java/forge/card/ability/ApiType.java @@ -207,7 +207,7 @@ public enum ApiType { TapAll (TapAllEffect.class, TapAllAi.class), TapOrUntap (TapOrUntapEffect.class, TapOrUntapAi.class), TapOrUntapAll (TapOrUntapAllEffect.class, TapOrUntapAllAi.class), - Token (TokenEffect.class, TokenAi.class), + Token (TokenEffect.class, TokenAi.class, false), // Token AI and effect classes have state, they have to be re-created on each request TwoPiles (TwoPilesEffect.class, TwoPilesAi.class), UnattachAll (UnattachAllEffect.class, UnattachAllAi.class), Untap (UntapEffect.class, UntapAi.class), @@ -221,12 +221,24 @@ public enum ApiType { private final Class clsEffect; private final Class clsAi; + private final SpellAbilityEffect instanceEffect; + private final SpellAbilityAi instanceAi; + + private static final Map allValues = new TreeMap(String.CASE_INSENSITIVE_ORDER); - ApiType(Class clsEf, Class clsAI) { + ApiType(Class clsEf, Class clsAi) { + this(clsEf, clsAi, true); + } + + ApiType(Class clsEf, Class clsAI, final boolean isStateLess) { clsEffect = clsEf; clsAi = clsAI; + + instanceAi = isStateLess ? ReflectionUtil.makeDefaultInstanceOf(clsAi) : null; + instanceEffect = isStateLess ? ReflectionUtil.makeDefaultInstanceOf(clsEf) : null; + } public static ApiType smartValueOf(String value) { @@ -241,11 +253,11 @@ public enum ApiType { } public SpellAbilityEffect getSpellEffect() { - return clsEffect == null ? null : ReflectionUtil.makeDefaultInstanceOf(clsEffect); + return instanceEffect != null ? instanceEffect : ReflectionUtil.makeDefaultInstanceOf(clsEffect); } public SpellAbilityAi getAi() { - return clsAi == null ? null : ReflectionUtil.makeDefaultInstanceOf(clsAi); + return instanceAi != null ? instanceAi : ReflectionUtil.makeDefaultInstanceOf(clsAi); } } diff --git a/src/main/java/forge/card/ability/effects/TapOrUntapAllEffect.java b/src/main/java/forge/card/ability/effects/TapOrUntapAllEffect.java index 0480745be9c..de3455b61c4 100644 --- a/src/main/java/forge/card/ability/effects/TapOrUntapAllEffect.java +++ b/src/main/java/forge/card/ability/effects/TapOrUntapAllEffect.java @@ -20,7 +20,7 @@ import forge.gui.GuiChoose; */ public class TapOrUntapAllEffect extends SpellAbilityEffect { - private enum TapOrUntap { + private static enum TapOrUntap { TAP, UNTAP }