From 41a1c9b5e58a5496f18b34d41c96756d24980d56 Mon Sep 17 00:00:00 2001 From: Myrd Date: Mon, 29 Dec 2014 17:45:52 +0000 Subject: [PATCH] Change recursion to iteration. This is a bit more efficient, but also I've observed a stack overflow error with this recursion - so maybe iteration will help, unless there's another underlying logic error (e.g. a cycle). --- .../screens/match/views/VCardDisplayArea.java | 24 +++++++++---------- 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/forge-gui-mobile/src/forge/screens/match/views/VCardDisplayArea.java b/forge-gui-mobile/src/forge/screens/match/views/VCardDisplayArea.java index fb612c4f86d..e046a03fc7d 100644 --- a/forge-gui-mobile/src/forge/screens/match/views/VCardDisplayArea.java +++ b/forge-gui-mobile/src/forge/screens/match/views/VCardDisplayArea.java @@ -81,21 +81,21 @@ public abstract class VCardDisplayArea extends VDisplayArea implements ActivateH //support adding card panel and attached panels to display area recursively private void addCardPanelToDisplayArea(CardAreaPanel cardPanel) { - List attachedPanels = cardPanel.getAttachedPanels(); - if (!attachedPanels.isEmpty()) { - for (int i = attachedPanels.size() - 1; i >= 0; i--) { - addCardPanelToDisplayArea(attachedPanels.get(i)); + do { + List attachedPanels = cardPanel.getAttachedPanels(); + if (!attachedPanels.isEmpty()) { + for (int i = attachedPanels.size() - 1; i >= 0; i--) { + addCardPanelToDisplayArea(attachedPanels.get(i)); + } } - } - if (isVisible()) { //only set display area for card if area is visible - cardPanel.displayArea = this; - } - add(cardPanel); + if (isVisible()) { //only set display area for card if area is visible + cardPanel.displayArea = this; + } + add(cardPanel); - if (cardPanel.getNextPanelInStack() != null) { - addCardPanelToDisplayArea(cardPanel.getNextPanelInStack()); - } + cardPanel = cardPanel.getNextPanelInStack(); + } while (cardPanel != null); } public final void removeCardPanel(final CardAreaPanel fromPanel) {