CardCharacteristics.triggers: now using a thread-safe collection

other members that were referenced as ArrayLists now are declared as lists, dependencies updated
This commit is contained in:
Maxmtg
2013-05-06 15:00:29 +00:00
parent 84bfe3ebae
commit 6c4251fddd
7 changed files with 31 additions and 41 deletions

View File

@@ -31,6 +31,7 @@ import java.util.Map.Entry;
import java.util.Set; import java.util.Set;
import java.util.TreeMap; import java.util.TreeMap;
import java.util.concurrent.ConcurrentSkipListMap; import java.util.concurrent.ConcurrentSkipListMap;
import java.util.concurrent.CopyOnWriteArrayList;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
@@ -827,7 +828,7 @@ public class Card extends GameEntity implements Comparable<Card> {
* a {@link java.util.ArrayList} object. * a {@link java.util.ArrayList} object.
*/ */
public final void setTriggers(final List<Trigger> trigs) { public final void setTriggers(final List<Trigger> trigs) {
final ArrayList<Trigger> copyList = new ArrayList<Trigger>(); final List<Trigger> copyList = new CopyOnWriteArrayList<Trigger>();
for (final Trigger t : trigs) { for (final Trigger t : trigs) {
if (t.isIntrinsic()) { if (t.isIntrinsic()) {
final Trigger newtrig = t.getCopy(); final Trigger newtrig = t.getCopy();
@@ -1624,7 +1625,7 @@ public class Card extends GameEntity implements Comparable<Card> {
* *
* @return a {@link java.util.ArrayList} object. * @return a {@link java.util.ArrayList} object.
*/ */
public final ArrayList<CardColor> getColor() { public final List<CardColor> getColor() {
return this.getCharacteristics().getCardColor(); return this.getCharacteristics().getCardColor();
} }
@@ -4527,7 +4528,7 @@ public class Card extends GameEntity implements Comparable<Card> {
* @param a * @param a
* a {@link java.util.ArrayList} object. * a {@link java.util.ArrayList} object.
*/ */
public final void setStaticAbilityStrings(final ArrayList<String> a) { public final void setStaticAbilityStrings(final List<String> a) {
this.getCharacteristics().setStaticAbilityStrings(new ArrayList<String>(a)); this.getCharacteristics().setStaticAbilityStrings(new ArrayList<String>(a));
} }
@@ -4536,7 +4537,7 @@ public class Card extends GameEntity implements Comparable<Card> {
* *
* @return the static ability strings * @return the static ability strings
*/ */
public final ArrayList<String> getStaticAbilityStrings() { public final List<String> getStaticAbilityStrings() {
return this.getCharacteristics().getStaticAbilityStrings(); return this.getCharacteristics().getStaticAbilityStrings();
} }
@@ -8065,7 +8066,7 @@ public class Card extends GameEntity implements Comparable<Card> {
* *
* @return the replacement effects * @return the replacement effects
*/ */
public ArrayList<ReplacementEffect> getReplacementEffects() { public List<ReplacementEffect> getReplacementEffects() {
return this.getCharacteristics().getReplacementEffects(); return this.getCharacteristics().getReplacementEffects();
} }
@@ -8075,7 +8076,7 @@ public class Card extends GameEntity implements Comparable<Card> {
* @param res * @param res
* the new replacement effects * the new replacement effects
*/ */
public void setReplacementEffects(final ArrayList<ReplacementEffect> res) { public void setReplacementEffects(final List<ReplacementEffect> res) {
this.getCharacteristics().getReplacementEffects().clear(); this.getCharacteristics().getReplacementEffects().clear();
for (final ReplacementEffect replacementEffect : res) { for (final ReplacementEffect replacementEffect : res) {
this.addReplacementEffect(replacementEffect); this.addReplacementEffect(replacementEffect);

View File

@@ -26,7 +26,6 @@ import java.util.List;
import com.esotericsoftware.minlog.Log; import com.esotericsoftware.minlog.Log;
import forge.card.TriggerReplacementBase; import forge.card.TriggerReplacementBase;
import forge.card.replacement.ReplacementEffect;
import forge.card.spellability.SpellAbility; import forge.card.spellability.SpellAbility;
import forge.card.staticability.StaticAbility; import forge.card.staticability.StaticAbility;
import forge.game.GameState; import forge.game.GameState;
@@ -239,16 +238,13 @@ public class StaticEffects {
// remove abilities // remove abilities
if (params.containsKey("RemoveAllAbilities")) { if (params.containsKey("RemoveAllAbilities")) {
final ArrayList<SpellAbility> abilities = affectedCard.getSpellAbilities(); for (final SpellAbility ab : affectedCard.getSpellAbilities()) {
for (final SpellAbility ab : abilities) {
ab.setTemporarilySuppressed(false); ab.setTemporarilySuppressed(false);
} }
final ArrayList<StaticAbility> staticAbilities = affectedCard.getStaticAbilities(); for (final StaticAbility stA : affectedCard.getStaticAbilities()) {
for (final StaticAbility stA : staticAbilities) {
stA.setTemporarilySuppressed(false); stA.setTemporarilySuppressed(false);
} }
final ArrayList<ReplacementEffect> replacementEffects = affectedCard.getReplacementEffects(); for (final TriggerReplacementBase rE : affectedCard.getReplacementEffects()) {
for (final TriggerReplacementBase rE : replacementEffects) {
rE.setTemporarilySuppressed(false); rE.setTemporarilySuppressed(false);
} }
} }

View File

@@ -40,17 +40,17 @@ public class CardCharacteristics {
private String name = ""; private String name = "";
private List<String> type = new CopyOnWriteArrayList<String>(); private List<String> type = new CopyOnWriteArrayList<String>();
private ManaCost manaCost = ManaCost.NO_COST; private ManaCost manaCost = ManaCost.NO_COST;
private ArrayList<CardColor> cardColor = new ArrayList<CardColor>(); private List<CardColor> cardColor = new ArrayList<CardColor>();
private int baseAttack = 0; private int baseAttack = 0;
private int baseDefense = 0; private int baseDefense = 0;
private ArrayList<String> intrinsicKeyword = new ArrayList<String>(); private List<String> intrinsicKeyword = new ArrayList<String>();
private final List<SpellAbility> spellAbility = new ArrayList<SpellAbility>(); private final List<SpellAbility> spellAbility = new ArrayList<SpellAbility>();
private final List<SpellAbility> manaAbility = new ArrayList<SpellAbility>(); private final List<SpellAbility> manaAbility = new ArrayList<SpellAbility>();
private List<String> unparsedAbilities = new ArrayList<String>(); private List<String> unparsedAbilities = new ArrayList<String>();
private ArrayList<Trigger> triggers = new ArrayList<Trigger>(); private List<Trigger> triggers = new CopyOnWriteArrayList<Trigger>();
private ArrayList<ReplacementEffect> replacementEffects = new ArrayList<ReplacementEffect>(); private List<ReplacementEffect> replacementEffects = new ArrayList<ReplacementEffect>();
private ArrayList<StaticAbility> staticAbilities = new ArrayList<StaticAbility>(); private List<StaticAbility> staticAbilities = new ArrayList<StaticAbility>();
private ArrayList<String> staticAbilityStrings = new ArrayList<String>(); private List<String> staticAbilityStrings = new ArrayList<String>();
private String imageKey = ""; private String imageKey = "";
private Map<String, String> sVars = new TreeMap<String, String>(); private Map<String, String> sVars = new TreeMap<String, String>();
@@ -120,7 +120,7 @@ public class CardCharacteristics {
* *
* @return the cardColor * @return the cardColor
*/ */
public final ArrayList<CardColor> getCardColor() { public final List<CardColor> getCardColor() {
return this.cardColor; return this.cardColor;
} }
@@ -186,7 +186,7 @@ public class CardCharacteristics {
* *
* @return the intrinsicKeyword * @return the intrinsicKeyword
*/ */
public final ArrayList<String> getIntrinsicKeyword() { public final List<String> getIntrinsicKeyword() {
return this.intrinsicKeyword; return this.intrinsicKeyword;
} }
@@ -253,7 +253,7 @@ public class CardCharacteristics {
* @param triggers0 * @param triggers0
* the triggers to set * the triggers to set
*/ */
public final void setTriggers(final ArrayList<Trigger> triggers0) { public final void setTriggers(final List<Trigger> triggers0) {
this.triggers = triggers0; this.triggers = triggers0;
} }
@@ -262,7 +262,7 @@ public class CardCharacteristics {
* *
* @return the staticAbilities * @return the staticAbilities
*/ */
public final ArrayList<StaticAbility> getStaticAbilities() { public final List<StaticAbility> getStaticAbilities() {
return this.staticAbilities; return this.staticAbilities;
} }
@@ -300,7 +300,7 @@ public class CardCharacteristics {
* *
* @return the staticAbilityStrings * @return the staticAbilityStrings
*/ */
public final ArrayList<String> getStaticAbilityStrings() { public final List<String> getStaticAbilityStrings() {
return this.staticAbilityStrings; return this.staticAbilityStrings;
} }
@@ -317,7 +317,7 @@ public class CardCharacteristics {
/** /**
* @return the replacementEffects * @return the replacementEffects
*/ */
public ArrayList<ReplacementEffect> getReplacementEffects() { public List<ReplacementEffect> getReplacementEffects() {
return replacementEffects; return replacementEffects;
} }

View File

@@ -197,9 +197,9 @@ public class AnimateAllEffect extends AnimateEffectBase {
} }
// suppress static abilities from the animated card // suppress static abilities from the animated card
final ArrayList<ReplacementEffect> removedReplacements = new ArrayList<ReplacementEffect>(); final List<ReplacementEffect> removedReplacements = new ArrayList<ReplacementEffect>();
if (sa.hasParam("OverwriteReplacements") || sa.hasParam("RemoveAllAbilities")) { if (sa.hasParam("OverwriteReplacements") || sa.hasParam("RemoveAllAbilities")) {
final ArrayList<ReplacementEffect> replacementsToRemove = c.getReplacementEffects(); final List<ReplacementEffect> replacementsToRemove = c.getReplacementEffects();
for (final ReplacementEffect re : replacementsToRemove) { for (final ReplacementEffect re : replacementsToRemove) {
re.setTemporarilySuppressed(true); re.setTemporarilySuppressed(true);
removedReplacements.add(re); removedReplacements.add(re);

View File

@@ -222,8 +222,7 @@ public class AnimateEffect extends AnimateEffectBase {
// suppress static abilities from the animated card // suppress static abilities from the animated card
final ArrayList<ReplacementEffect> removedReplacements = new ArrayList<ReplacementEffect>(); final ArrayList<ReplacementEffect> removedReplacements = new ArrayList<ReplacementEffect>();
if (sa.hasParam("OverwriteReplacements") || removeAll) { if (sa.hasParam("OverwriteReplacements") || removeAll) {
final ArrayList<ReplacementEffect> replacementsToRemove = c.getReplacementEffects(); for (final ReplacementEffect re : c.getReplacementEffects()) {
for (final ReplacementEffect re : replacementsToRemove) {
re.setTemporarilySuppressed(true); re.setTemporarilySuppressed(true);
removedReplacements.add(re); removedReplacements.add(re);
} }

View File

@@ -282,13 +282,11 @@ public class CardFactory {
} }
card.setState(state); card.setState(state);
CardFactoryUtil.addAbilityFactoryAbilities(card); CardFactoryUtil.addAbilityFactoryAbilities(card);
final ArrayList<String> stAbs = card.getStaticAbilityStrings(); for (String stAb : card.getStaticAbilityStrings()) {
if (stAbs.size() > 0) { card.addStaticAbility(stAb);
for (int i = 0; i < stAbs.size(); i++) {
card.addStaticAbility(stAbs.get(i));
}
} }
if ( state == CardCharacteristicName.LeftSplit || state == CardCharacteristicName.RightSplit ) if ( state == CardCharacteristicName.LeftSplit || state == CardCharacteristicName.RightSplit )
{ {
CardCharacteristics original = card.getState(CardCharacteristicName.Original); CardCharacteristics original = card.getState(CardCharacteristicName.Original);

View File

@@ -34,7 +34,6 @@ import forge.card.TriggerReplacementBase;
import forge.card.ability.AbilityFactory; import forge.card.ability.AbilityFactory;
import forge.card.ability.AbilityUtils; import forge.card.ability.AbilityUtils;
import forge.card.cardfactory.CardFactoryUtil; import forge.card.cardfactory.CardFactoryUtil;
import forge.card.replacement.ReplacementEffect;
import forge.card.spellability.AbilityActivated; import forge.card.spellability.AbilityActivated;
import forge.card.spellability.SpellAbility; import forge.card.spellability.SpellAbility;
import forge.card.trigger.Trigger; import forge.card.trigger.Trigger;
@@ -447,16 +446,13 @@ public class StaticAbilityContinuous {
// remove activated and static abilities // remove activated and static abilities
if (removeAllAbilities) { if (removeAllAbilities) {
final ArrayList<SpellAbility> abilities = affectedCard.getSpellAbilities(); for (final SpellAbility ab : affectedCard.getSpellAbilities()) {
for (final SpellAbility ab : abilities) {
ab.setTemporarilySuppressed(true); ab.setTemporarilySuppressed(true);
} }
final ArrayList<StaticAbility> staticAbilities = affectedCard.getStaticAbilities(); for (final StaticAbility stA : affectedCard.getStaticAbilities()) {
for (final StaticAbility stA : staticAbilities) {
stA.setTemporarilySuppressed(true); stA.setTemporarilySuppressed(true);
} }
final ArrayList<ReplacementEffect> replacementEffects = affectedCard.getReplacementEffects(); for (final TriggerReplacementBase rE : affectedCard.getReplacementEffects()) {
for (final TriggerReplacementBase rE : replacementEffects) {
rE.setTemporarilySuppressed(true); rE.setTemporarilySuppressed(true);
} }
} }