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

Reply via email to