Hi, @martin: indeed. But it's a small chance and that the bug fix will benefit future devs who may want to use Wicket 6 or 7 to parse and iterate markup. Does -0 means in doubt but inclined to -1? In I'm in doubt whether to backport or not as well.
@tobias: to list this bug fix in the release change log looks enough to me. Any dev using Wicket to parse and iterate a markup would have ran in the same problem. As WICKET-6165 is the first ticket I see on this matter, it looks like this steam API, even being public, wasn't being used outside Wicket core. cheers Pedro Santos On Wed, Sep 7, 2016 at 3:01 AM, Tobias Soloschenko < [email protected]> 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/MarkupContainer.java > >>> +++ b/wicket-core/src/main/java/org/apache/wicket/MarkupContainer.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/MarkupStream.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/TagUtils.java > >>> +++ b/wicket-core/src/main/java/org/apache/wicket/markup/TagUtils.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( > openTag)) > >>> { > >>> MarkupElement element = > >>> markupStream.get(); > >> >
