You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tapestry.apache.org by jk...@apache.org on 2014/04/26 14:06:27 UTC
[04/10] git commit: TAP5-2317: fix a StackOverflowError when counting
a large flow
TAP5-2317: fix a StackOverflowError when counting a large flow
Project: http://git-wip-us.apache.org/repos/asf/tapestry-5/repo
Commit: http://git-wip-us.apache.org/repos/asf/tapestry-5/commit/602f43f5
Tree: http://git-wip-us.apache.org/repos/asf/tapestry-5/tree/602f43f5
Diff: http://git-wip-us.apache.org/repos/asf/tapestry-5/diff/602f43f5
Branch: refs/heads/master
Commit: 602f43f5441a7f0309a712130587e3433c959448
Parents: d8ec30d
Author: Jochen Kemnade <jo...@web.de>
Authored: Sat Apr 26 13:19:09 2014 +0200
Committer: Jochen Kemnade <jo...@web.de>
Committed: Sat Apr 26 13:19:09 2014 +0200
----------------------------------------------------------------------
.../main/java/org/apache/tapestry5/func/AbstractFlow.java | 9 ++++++++-
.../src/test/java/org/apache/tapestry5/func/FuncTest.java | 8 ++++++++
2 files changed, 16 insertions(+), 1 deletion(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/tapestry-5/blob/602f43f5/tapestry-func/src/main/java/org/apache/tapestry5/func/AbstractFlow.java
----------------------------------------------------------------------
diff --git a/tapestry-func/src/main/java/org/apache/tapestry5/func/AbstractFlow.java b/tapestry-func/src/main/java/org/apache/tapestry5/func/AbstractFlow.java
index 9a5eb5b..e657c41 100644
--- a/tapestry-func/src/main/java/org/apache/tapestry5/func/AbstractFlow.java
+++ b/tapestry-func/src/main/java/org/apache/tapestry5/func/AbstractFlow.java
@@ -213,7 +213,14 @@ abstract class AbstractFlow<T> implements Flow<T>
public int count()
{
- return isEmpty() ? 0 : 1 + rest().count();
+ if (isEmpty()){
+ return 0;
+ }
+ int count = 0;
+ for(Flow<T> flow = this; flow != null && !flow.isEmpty(); flow = flow.rest()){
+ count++;
+ }
+ return count;
}
public Flow<T> take(int length)
http://git-wip-us.apache.org/repos/asf/tapestry-5/blob/602f43f5/tapestry-func/src/test/java/org/apache/tapestry5/func/FuncTest.java
----------------------------------------------------------------------
diff --git a/tapestry-func/src/test/java/org/apache/tapestry5/func/FuncTest.java b/tapestry-func/src/test/java/org/apache/tapestry5/func/FuncTest.java
index 7bf527a..a9f2dc6 100644
--- a/tapestry-func/src/test/java/org/apache/tapestry5/func/FuncTest.java
+++ b/tapestry-func/src/test/java/org/apache/tapestry5/func/FuncTest.java
@@ -571,6 +571,14 @@ public class FuncTest extends BaseFuncTest
}
@Test
+ public void count_of_a_large_flow()
+ {
+ Flow<Integer> flow = F.series(1, 1).take(50000);
+
+ assertEquals(flow.count(), 50000);
+ }
+
+ @Test
public void concat_empty_list()
{
Flow<Integer> flow = F.flow(1, 3);