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();
> >>
>

Reply via email to