Created a branch [1] to elaborate on how the purely improvement in the stream API can be backported without the bug fix and no impact to current apps, while providing a correct API to the few future users who may want to use the MarkupStream.
1 - https://github.com/apache/wicket/commits/stream-api-improvement Pedro Santos On Wed, Sep 7, 2016 at 4:09 AM, Pedro Santos <[email protected]> wrote: > Hi Sven, > > I think you meant the bug fix shouldn't be backported given this change is > both a bug fix and a consistency improvement, and that the consistency > improvement can indeed be merged into 6.x and 7.x with no impact on > existing applications. > > I may have chosen the wrong words in the commit message since the change > rather adds the isCurrentIndexInsideTheStream method next to the current > hasMore method than to rename hasMore to isCurrentIndexInsideTheStream. > > cheers > > Pedro Santos > > On Wed, Sep 7, 2016 at 3:08 AM, Sven Meier <[email protected]> wrote: > >> Hi, >> >> IMHO this change should *not* be merged into 6.x and 7.x: >> It's important to improve consistency on master, but we shouldn't risk >> breaking existing applications. >> >> Regards >> Sven >> >> >> >> On 07.09.2016 08:01, Tobias Soloschenko wrote: >> >>> Hi, >>> >>> can we somehow announce this / list this up? >>> >>> Maybe in the release news and migration guide? >>> >>> Otherwise devs will wonder why something is not working like with the >>> file part parse call in forms some months ago. >>> >>> kind regards >>> >>> Tobias >>> >>> Am 07.09.2016 um 04:33 schrieb Martin Grigorov <[email protected]>: >>>> >>>> Hi, >>>> >>>> I'm -0 to backport this to 6.x/7.x. >>>> IMO there is a small chance that this will break some applications >>>> silently. >>>> >>>> Martin Grigorov >>>> Wicket Training and Consulting >>>> https://twitter.com/mtgrigorov >>>> >>>> On Mon, Sep 5, 2016 at 7:10 AM, Pedro Santos <[email protected]> >>>>> wrote: >>>>> >>>>> I searched of MarkupStream#hasMore usages inside Wicket Stuff, which >>>>> should >>>>> give a good idea of how often this method is used, and I think it's >>>>> safe to >>>>> apply the fix on the 1.6.x and 1.7.x branches. >>>>> >>>>> Pedro Santos >>>>> >>>>> On Mon, Sep 5, 2016 at 2:01 AM, <[email protected]> wrote: >>>>>> >>>>>> Repository: wicket >>>>>> Updated Branches: >>>>>> refs/heads/master 7da317e51 -> e3e09fd00 >>>>>> >>>>>> >>>>>> WICKET-6165 renaming MarkupStream#hasMore to MarkupStream# >>>>>> isCurrentIndexInsideTheStream >>>>>> >>>>>> >>>>>> Project: http://git-wip-us.apache.org/repos/asf/wicket/repo >>>>>> Commit: http://git-wip-us.apache.org/repos/asf/wicket/commit/e3e09fd0 >>>>>> Tree: http://git-wip-us.apache.org/repos/asf/wicket/tree/e3e09fd0 >>>>>> Diff: http://git-wip-us.apache.org/repos/asf/wicket/diff/e3e09fd0 >>>>>> >>>>>> Branch: refs/heads/master >>>>>> Commit: e3e09fd002452c8d2ea4be18f2733cffda78fc10 >>>>>> Parents: 7da317e >>>>>> Author: Pedro Henrique Oliveira dos Santos <[email protected]> >>>>>> Authored: Mon Sep 5 02:00:29 2016 -0300 >>>>>> Committer: Pedro Henrique Oliveira dos Santos <[email protected]> >>>>>> Committed: Mon Sep 5 02:00:29 2016 -0300 >>>>>> >>>>>> ------------------------------------------------------------ >>>>>> ---------- >>>>>> .../java/org/apache/wicket/MarkupContainer.java | 2 +- >>>>>> .../org/apache/wicket/markup/MarkupStream.java | 18 >>>>>> >>>>> +++++++++++++----- >>>>> >>>>>> .../java/org/apache/wicket/markup/TagUtils.java | 2 +- >>>>>> .../html/TransparentWebMarkupContainer.java | 2 +- >>>>>> .../wicket/markup/html/border/BorderBehavior.java | 6 +++--- >>>>>> .../wicket/markup/html/internal/Enclosure.java | 2 +- >>>>>> .../markup/resolver/WicketMessageResolver.java | 4 ++-- >>>>>> 7 files changed, 22 insertions(+), 14 deletions(-) >>>>>> ------------------------------------------------------------ >>>>>> ---------- >>>>>> >>>>>> >>>>>> http://git-wip-us.apache.org/repos/asf/wicket/blob/ >>>>>> e3e09fd0/wicket-core/src/main/java/org/apache/wicket/ >>>>>> >>>>> MarkupContainer.java >>>>> >>>>>> ------------------------------------------------------------ >>>>>> ---------- >>>>>> diff --git a/wicket-core/src/main/java/org/apache/wicket/ >>>>>> >>>>> MarkupContainer.java >>>>> >>>>>> b/wicket-core/src/main/java/org/apache/wicket/MarkupContainer.java >>>>>> index 09705ff..6df5316 100644 >>>>>> --- a/wicket-core/src/main/java/org/apache/wicket/MarkupContaine >>>>>> r.java >>>>>> +++ b/wicket-core/src/main/java/org/apache/wicket/MarkupContaine >>>>>> r.java >>>>>> @@ -1643,7 +1643,7 @@ public abstract class MarkupContainer extends >>>>>> Component implements Iterable<Comp >>>>>> */ >>>>>> protected final void renderAll(final MarkupStream >>>>>> markupStream, >>>>>> final ComponentTag openTag) >>>>>> { >>>>>> - while (markupStream.hasMore()) >>>>>> + while (markupStream.isCurrentIndexInsideTheStream()) >>>>>> { >>>>>> // In case of Page we need to render the whole >>>>>> file. For all other components just what >>>>>> // is in between the open and the close tag. >>>>>> >>>>>> http://git-wip-us.apache.org/repos/asf/wicket/blob/ >>>>>> e3e09fd0/wicket-core/src/main/java/org/apache/wicket/markup/ >>>>>> MarkupStream.java >>>>>> ------------------------------------------------------------ >>>>>> ---------- >>>>>> diff --git a/wicket-core/src/main/java/org/apache/wicket/markup/ >>>>>> >>>>> MarkupStream.java >>>>> >>>>>> b/wicket-core/src/main/java/org/apache/wicket/markup/MarkupS >>>>>> tream.java >>>>>> index 99a5165..d5d8b74 100644 >>>>>> --- a/wicket-core/src/main/java/org/apache/wicket/markup/ >>>>>> >>>>> MarkupStream.java >>>>> >>>>>> +++ b/wicket-core/src/main/java/org/apache/wicket/markup/ >>>>>> >>>>> MarkupStream.java >>>>> >>>>>> @@ -134,7 +134,7 @@ public class MarkupStream >>>>>> public boolean equalTo(final MarkupStream that) >>>>>> { >>>>>> // While a has more markup elements >>>>>> - while (hasMore()) >>>>>> + while (isCurrentIndexInsideTheStream()) >>>>>> { >>>>>> // Get an element from each >>>>>> final MarkupElement thisElement = this.get(); >>>>>> @@ -163,7 +163,7 @@ public class MarkupStream >>>>>> } >>>>>> >>>>>> // If we've run out of markup elements in b >>>>>> - if (!that.hasMore()) >>>>>> + if (!that.isCurrentIndexInsideTheStream()) >>>>>> { >>>>>> // then the two streams match perfectly >>>>>> return true; >>>>>> @@ -271,11 +271,19 @@ public class MarkupStream >>>>>> } >>>>>> >>>>>> /** >>>>>> + * @return True if this markup stream is moved to a >>>>>> MarkupElement >>>>>> element >>>>>> + */ >>>>>> + public boolean isCurrentIndexInsideTheStream() >>>>>> + { >>>>>> + return currentIndex < markup.size(); >>>>>> + } >>>>>> + >>>>>> + /** >>>>>> * @return True if this markup stream has more MarkupElement >>>>>> elements >>>>>> */ >>>>>> public boolean hasMore() >>>>>> { >>>>>> - return currentIndex < markup.size(); >>>>>> + return currentIndex < (markup.size() - 1); >>>>>> } >>>>>> >>>>>> /** >>>>>> @@ -417,7 +425,7 @@ public class MarkupStream >>>>>> */ >>>>>> public boolean skipUntil(final Class<? extends MarkupElement> >>>>>> clazz) >>>>>> { >>>>>> - while (hasMore()) >>>>>> + while (isCurrentIndexInsideTheStream()) >>>>>> { >>>>>> if (clazz.isInstance(current)) >>>>>> { >>>>>> @@ -462,7 +470,7 @@ public class MarkupStream >>>>>> public void skipToMatchingCloseTag(final ComponentTag openTag) >>>>>> { >>>>>> // Loop through the markup in this container >>>>>> - while (hasMore()) >>>>>> + while (isCurrentIndexInsideTheStream()) >>>>>> { >>>>>> // If the current markup tag closes the >>>>>> openTag >>>>>> if (get().closes(openTag)) >>>>>> >>>>>> http://git-wip-us.apache.org/repos/asf/wicket/blob/ >>>>>> e3e09fd0/wicket-core/src/main/java/org/apache/wicket/markup/ >>>>>> >>>>> TagUtils.java >>>>> >>>>>> ------------------------------------------------------------ >>>>>> ---------- >>>>>> diff --git a/wicket-core/src/main/java/org/apache/wicket/markup/ >>>>>> >>>>> TagUtils.java >>>>> >>>>>> b/wicket-core/src/main/java/org/apache/wicket/markup/TagUtils.java >>>>>> index 9bd9433..bd0ee75 100644 >>>>>> --- a/wicket-core/src/main/java/org/apache/wicket/markup/TagUtil >>>>>> s.java >>>>>> +++ b/wicket-core/src/main/java/org/apache/wicket/markup/TagUtil >>>>>> s.java >>>>>> @@ -242,7 +242,7 @@ public class TagUtils >>>>>> >>>>>> MarkupStream stream = new MarkupStream(fragment); >>>>>> stream.setCurrentIndex(streamOffset); >>>>>> - while (stream.hasMore()) >>>>>> + while (stream.isCurrentIndexInsideTheStream()) >>>>>> { >>>>>> MarkupElement elem = stream.get(); >>>>>> >>>>>> >>>>>> http://git-wip-us.apache.org/repos/asf/wicket/blob/ >>>>>> e3e09fd0/wicket-core/src/main/java/org/apache/wicket/markup/html/ >>>>>> TransparentWebMarkupContainer.java >>>>>> ------------------------------------------------------------ >>>>>> ---------- >>>>>> diff --git a/wicket-core/src/main/java/org/apache/wicket/markup/html/ >>>>>> TransparentWebMarkupContainer.java b/wicket-core/src/main/java/ >>>>>> org/apache/wicket/markup/html/TransparentWebMarkupContainer.java >>>>>> index f9f76de..6959914 100644 >>>>>> --- a/wicket-core/src/main/java/org/apache/wicket/markup/html/ >>>>>> TransparentWebMarkupContainer.java >>>>>> +++ b/wicket-core/src/main/java/org/apache/wicket/markup/html/ >>>>>> TransparentWebMarkupContainer.java >>>>>> @@ -133,7 +133,7 @@ public class TransparentWebMarkupContainer extends >>>>>> WebMarkupContainer implements >>>>>> { >>>>>> MarkupStream stream = new MarkupStream(getMarkup()); >>>>>> >>>>>> - while (stream.hasMore()) >>>>>> + while (stream.isCurrentIndexInsideTheStream()) >>>>>> { >>>>>> MarkupElement childOpenTag = >>>>>> >>>>> stream.nextOpenTag(); >>>>> >>>>>> >>>>>> http://git-wip-us.apache.org/repos/asf/wicket/blob/ >>>>>> e3e09fd0/wicket-core/src/main/java/org/apache/wicket/markup/ >>>>>> html/border/BorderBehavior.java >>>>>> ------------------------------------------------------------ >>>>>> ---------- >>>>>> diff --git a/wicket-core/src/main/java/org/apache/wicket/markup/html/ >>>>>> >>>>> border/BorderBehavior.java >>>>> >>>>>> b/wicket-core/src/main/java/org/apache/wicket/markup/html/ >>>>>> border/BorderBehavior.java >>>>>> index ecb15b8..9459918 100644 >>>>>> --- a/wicket-core/src/main/java/org/apache/wicket/markup/html/ >>>>>> border/BorderBehavior.java >>>>>> +++ b/wicket-core/src/main/java/org/apache/wicket/markup/html/ >>>>>> border/BorderBehavior.java >>>>>> @@ -61,7 +61,7 @@ public class BorderBehavior extends Behavior >>>>>> stream.setCurrentIndex(0); >>>>>> >>>>>> boolean insideBorderMarkup = false; >>>>>> - while (stream.hasMore()) >>>>>> + while (stream.isCurrentIndexInsideTheStream()) >>>>>> { >>>>>> MarkupElement elem = stream.get(); >>>>>> stream.next(); >>>>>> @@ -104,7 +104,7 @@ public class BorderBehavior extends Behavior >>>>>> } >>>>>> } >>>>>> >>>>>> - if (!stream.hasMore()) >>>>>> + if (!stream.isCurrentIndexInsideTheStream()) >>>>>> { >>>>>> throw new WicketRuntimeException("Markup for >>>>>> component border " + getClass().getName() + >>>>>> " ended prematurely, was expecting >>>>>> </wicket:border>"); >>>>>> @@ -117,7 +117,7 @@ public class BorderBehavior extends Behavior >>>>>> final MarkupStream stream = >>>>>> getMarkupStream(component); >>>>>> final Response response = component.getResponse(); >>>>>> >>>>>> - while (stream.hasMore()) >>>>>> + while (stream.isCurrentIndexInsideTheStream()) >>>>>> { >>>>>> MarkupElement elem = stream.get(); >>>>>> stream.next(); >>>>>> >>>>>> http://git-wip-us.apache.org/repos/asf/wicket/blob/ >>>>>> e3e09fd0/wicket-core/src/main/java/org/apache/wicket/markup/ >>>>>> html/internal/Enclosure.java >>>>>> ------------------------------------------------------------ >>>>>> ---------- >>>>>> diff --git a/wicket-core/src/main/java/org/apache/wicket/markup/html/ >>>>>> >>>>> internal/Enclosure.java >>>>> >>>>>> b/wicket-core/src/main/java/org/apache/wicket/markup/html/ >>>>>> internal/Enclosure.java >>>>>> index 2d72ac0..1daa4c7 100644 >>>>>> --- a/wicket-core/src/main/java/org/apache/wicket/markup/html/ >>>>>> internal/Enclosure.java >>>>>> +++ b/wicket-core/src/main/java/org/apache/wicket/markup/html/ >>>>>> internal/Enclosure.java >>>>>> @@ -229,7 +229,7 @@ public class Enclosure extends WebMarkupContainer >>>>>> implements IComponentResolver >>>>>> int orgIndex = markupStream.getCurrentIndex() >>>>>> ; >>>>>> try >>>>>> { >>>>>> - while (markupStream.hasMore()) >>>>>> + while (markupStream. >>>>>> isCurrentIndexInsideTheStream()) >>>>>> { >>>>>> markupStream.next(); >>>>>> if (markupStream.skipUntil( >>>>>> ComponentTag.class)) >>>>>> >>>>>> http://git-wip-us.apache.org/repos/asf/wicket/blob/ >>>>>> e3e09fd0/wicket-core/src/main/java/org/apache/wicket/markup/resolver/ >>>>>> WicketMessageResolver.java >>>>>> ------------------------------------------------------------ >>>>>> ---------- >>>>>> diff --git a/wicket-core/src/main/java/org/apache/wicket/markup/ >>>>>> >>>>> resolver/WicketMessageResolver.java >>>>> >>>>>> b/wicket-core/src/main/java/org/apache/wicket/markup/resolver/ >>>>>> WicketMessageResolver.java >>>>>> index f2f99f8..bbb5643 100644 >>>>>> --- a/wicket-core/src/main/java/org/apache/wicket/markup/resolver/ >>>>>> WicketMessageResolver.java >>>>>> +++ b/wicket-core/src/main/java/org/apache/wicket/markup/resolver/ >>>>>> WicketMessageResolver.java >>>>>> @@ -230,7 +230,7 @@ public class WicketMessageResolver implements >>>>>> IComponentResolver >>>>>> log.warn("No value found for >>>>>> wicket:message tag with key: {}", key); >>>>>> >>>>>> // If open tag was open-close >>>>>> - if (markupStream.hasMore() == false) >>>>>> + if (markupStream. >>>>>> isCurrentIndexInsideTheStream() == false) >>>>>> { >>>>>> String formatedNotFound = >>>>>> String.format(NOT_FOUND, key); >>>>>> getResponse().write( >>>>>> formatedNotFound); >>>>>> @@ -358,7 +358,7 @@ public class WicketMessageResolver implements >>>>>> IComponentResolver >>>>>> // child component and save their tag index >>>>>> if (!tag.isOpenClose()) >>>>>> { >>>>>> - while (markupStream.hasMore() && >>>>>> !markupStream.get().closes(openTag)) >>>>>> + while (markupStream. >>>>>> isCurrentIndexInsideTheStream() && !markupStream.get().closes(ope >>>>>> nTag)) >>>>>> { >>>>>> MarkupElement element = >>>>>> markupStream.get(); >>>>>> >>>>> >> >
