You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@freemarker.apache.org by dd...@apache.org on 2016/06/12 16:53:59 UTC
[18/50] incubator-freemarker git commit: Reuse the
KeyValuePairIterator created for #list for #items.
Reuse the KeyValuePairIterator created for #list for #items.
Project: http://git-wip-us.apache.org/repos/asf/incubator-freemarker/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-freemarker/commit/fafc5fca
Tree: http://git-wip-us.apache.org/repos/asf/incubator-freemarker/tree/fafc5fca
Diff: http://git-wip-us.apache.org/repos/asf/incubator-freemarker/diff/fafc5fca
Branch: refs/heads/2.3
Commit: fafc5fca6cb8f88ff62a99fefc274ae40e611303
Parents: 7e08ebc
Author: ddekany <dd...@apache.org>
Authored: Tue May 31 20:52:34 2016 +0200
Committer: ddekany <dd...@apache.org>
Committed: Tue May 31 20:52:34 2016 +0200
----------------------------------------------------------------------
.../java/freemarker/core/IteratorBlock.java | 20 +++++++++++++-------
1 file changed, 13 insertions(+), 7 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-freemarker/blob/fafc5fca/src/main/java/freemarker/core/IteratorBlock.java
----------------------------------------------------------------------
diff --git a/src/main/java/freemarker/core/IteratorBlock.java b/src/main/java/freemarker/core/IteratorBlock.java
index 4161c92..d59d96b 100644
--- a/src/main/java/freemarker/core/IteratorBlock.java
+++ b/src/main/java/freemarker/core/IteratorBlock.java
@@ -218,7 +218,7 @@ final class IteratorBlock extends TemplateElement {
private static final String LOOP_STATE_HAS_NEXT = "_has_next"; // lenght: 9
private static final String LOOP_STATE_INDEX = "_index"; // length 6
- private TemplateModelIterator openedIteratorModel;
+ private Object openedIterator;
private boolean hasNext;
private TemplateModel loopVar;
private TemplateModel loopVar2;
@@ -269,7 +269,7 @@ final class IteratorBlock extends TemplateElement {
throws TemplateModelException, TemplateException, IOException, NonSequenceOrCollectionException,
InvalidReferenceException {
return !hashListing
- ? executedNestedContentForNonHashListing(env, childBuffer)
+ ? executedNestedContentForCollOrSeqListing(env, childBuffer)
: executedNestedContentForHashListing(env, childBuffer);
}
@@ -279,7 +279,9 @@ final class IteratorBlock extends TemplateElement {
if (listedValue instanceof TemplateHashModelEx) {
TemplateHashModelEx listedHash = (TemplateHashModelEx) listedValue;
if (listedHash instanceof TemplateHashModelEx2) {
- KeyValuePairIterator kvpIter = ((TemplateHashModelEx2) listedHash).keyValuePairIterator();
+ KeyValuePairIterator kvpIter
+ = openedIterator == null ? ((TemplateHashModelEx2) listedHash).keyValuePairIterator()
+ : (KeyValuePairIterator) openedIterator;
hashNotEmpty = kvpIter.hasNext();
if (hashNotEmpty) {
if (loopVarName != null) {
@@ -295,7 +297,10 @@ final class IteratorBlock extends TemplateElement {
} catch (BreakInstruction.Break br) {
// Silently exit loop
}
+ openedIterator = null;
} else {
+ // We will reuse this at the #iterms
+ openedIterator = kvpIter;
env.visit(childBuffer);
}
}
@@ -348,14 +353,15 @@ final class IteratorBlock extends TemplateElement {
return hashNotEmpty;
}
- private boolean executedNestedContentForNonHashListing(Environment env, TemplateElement[] childBuffer)
+ private boolean executedNestedContentForCollOrSeqListing(Environment env, TemplateElement[] childBuffer)
throws TemplateModelException, IOException, TemplateException,
NonSequenceOrCollectionException, InvalidReferenceException {
final boolean listNotEmpty;
if (listedValue instanceof TemplateCollectionModel) {
final TemplateCollectionModel collModel = (TemplateCollectionModel) listedValue;
final TemplateModelIterator iterModel
- = openedIteratorModel == null ? collModel.iterator() : openedIteratorModel;
+ = openedIterator == null ? collModel.iterator()
+ : ((TemplateModelIterator) openedIterator);
listNotEmpty = iterModel.hasNext();
if (listNotEmpty) {
if (loopVarName != null) {
@@ -369,11 +375,11 @@ final class IteratorBlock extends TemplateElement {
} catch (BreakInstruction.Break br) {
// Silently exit loop
}
- openedIteratorModel = null;
+ openedIterator = null;
} else {
// We must reuse this later, because TemplateCollectionModel-s that wrap an Iterator only
// allow one iterator() call.
- openedIteratorModel = iterModel;
+ openedIterator = iterModel;
env.visit(childBuffer);
}
}