Repository: wicket Updated Branches: refs/heads/master 52d99f303 -> 32a40bc1d
WICKET-5904 NPE after editing a markup file in debug mode Project: http://git-wip-us.apache.org/repos/asf/wicket/repo Commit: http://git-wip-us.apache.org/repos/asf/wicket/commit/32a40bc1 Tree: http://git-wip-us.apache.org/repos/asf/wicket/tree/32a40bc1 Diff: http://git-wip-us.apache.org/repos/asf/wicket/diff/32a40bc1 Branch: refs/heads/master Commit: 32a40bc1de5302f17bbcc19cd3ab769b0dc0f274 Parents: 52d99f3 Author: Andrea Del Bene <[email protected]> Authored: Sat May 16 17:14:45 2015 +0200 Committer: Andrea Del Bene <[email protected]> Committed: Sat May 16 17:14:45 2015 +0200 ---------------------------------------------------------------------- .../markup/parser/AbstractMarkupFilter.java | 31 +++++++++++++++++++- .../markup/parser/filter/EnclosureHandler.java | 11 +------ .../filter/RelativePathPrefixHandler.java | 11 +------ 3 files changed, 32 insertions(+), 21 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/wicket/blob/32a40bc1/wicket-core/src/main/java/org/apache/wicket/markup/parser/AbstractMarkupFilter.java ---------------------------------------------------------------------- diff --git a/wicket-core/src/main/java/org/apache/wicket/markup/parser/AbstractMarkupFilter.java b/wicket-core/src/main/java/org/apache/wicket/markup/parser/AbstractMarkupFilter.java index 2ce2fab..6478da2 100644 --- a/wicket-core/src/main/java/org/apache/wicket/markup/parser/AbstractMarkupFilter.java +++ b/wicket-core/src/main/java/org/apache/wicket/markup/parser/AbstractMarkupFilter.java @@ -17,7 +17,9 @@ package org.apache.wicket.markup.parser; import java.text.ParseException; +import java.util.concurrent.atomic.AtomicLong; +import org.apache.wicket.MetaDataKey; import org.apache.wicket.markup.ComponentTag; import org.apache.wicket.markup.HtmlSpecialTag; import org.apache.wicket.markup.Markup; @@ -25,6 +27,7 @@ import org.apache.wicket.markup.MarkupElement; import org.apache.wicket.markup.MarkupParser; import org.apache.wicket.markup.MarkupResourceStream; import org.apache.wicket.markup.MarkupStream; +import org.apache.wicket.request.cycle.RequestCycle; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -45,7 +48,12 @@ public abstract class AbstractMarkupFilter implements IMarkupFilter /** The next MarkupFilter in the chain */ private IMarkupFilter parent; - + + /** A key for a request-relative counter (see {@link #getRequestUniqueId()}) **/ + private final static MetaDataKey<AtomicLong> REQUEST_COUNTER_KEY = new MetaDataKey<AtomicLong>() + { + }; + /** * Construct. */ @@ -190,4 +198,25 @@ public abstract class AbstractMarkupFilter implements IMarkupFilter } return wicketNamespace; } + + /** + * Returns an id using a request-relative counter. This can be + * useful for autocomponent tags that needs to get tag id. + * + * @return + * the request-relative id + */ + protected long getRequestUniqueId() + { + AtomicLong counter = RequestCycle.get().getMetaData(REQUEST_COUNTER_KEY); + + if (counter == null) + { + counter = new AtomicLong(); + + RequestCycle.get().setMetaData(REQUEST_COUNTER_KEY, counter); + } + + return counter.getAndIncrement(); + } } http://git-wip-us.apache.org/repos/asf/wicket/blob/32a40bc1/wicket-core/src/main/java/org/apache/wicket/markup/parser/filter/EnclosureHandler.java ---------------------------------------------------------------------- diff --git a/wicket-core/src/main/java/org/apache/wicket/markup/parser/filter/EnclosureHandler.java b/wicket-core/src/main/java/org/apache/wicket/markup/parser/filter/EnclosureHandler.java index 7739cd0..b29da3b 100644 --- a/wicket-core/src/main/java/org/apache/wicket/markup/parser/filter/EnclosureHandler.java +++ b/wicket-core/src/main/java/org/apache/wicket/markup/parser/filter/EnclosureHandler.java @@ -19,7 +19,6 @@ package org.apache.wicket.markup.parser.filter; import java.text.ParseException; import java.util.ArrayDeque; import java.util.Deque; -import java.util.concurrent.atomic.AtomicLong; import org.apache.wicket.Component; import org.apache.wicket.MarkupContainer; @@ -73,14 +72,6 @@ public final class EnclosureHandler extends AbstractMarkupFilter implements ICom /** Stack of <wicket:enclosure> tags */ private Deque<ComponentTag> stack; - /** - * Used to assign unique ids to enclosures - * - * TODO queueing: there has to be a better way of doing this, perhaps some merged-markup-unique - * counter - */ - private static final AtomicLong index = new AtomicLong(); - /** The id of the first wicket tag inside the enclosure */ private String childId; @@ -109,7 +100,7 @@ public final class EnclosureHandler extends AbstractMarkupFilter implements ICom // If open tag, than put the tag onto the stack if (tag.isOpen()) { - tag.setId(tag.getId() + index.getAndIncrement()); + tag.setId(tag.getId() + getRequestUniqueId()); tag.setModified(true); tag.setAutoComponentFactory(FACTORY); http://git-wip-us.apache.org/repos/asf/wicket/blob/32a40bc1/wicket-core/src/main/java/org/apache/wicket/markup/parser/filter/RelativePathPrefixHandler.java ---------------------------------------------------------------------- diff --git a/wicket-core/src/main/java/org/apache/wicket/markup/parser/filter/RelativePathPrefixHandler.java b/wicket-core/src/main/java/org/apache/wicket/markup/parser/filter/RelativePathPrefixHandler.java index 0523d9a..554df3e 100644 --- a/wicket-core/src/main/java/org/apache/wicket/markup/parser/filter/RelativePathPrefixHandler.java +++ b/wicket-core/src/main/java/org/apache/wicket/markup/parser/filter/RelativePathPrefixHandler.java @@ -18,7 +18,6 @@ package org.apache.wicket.markup.parser.filter; import java.text.ParseException; import java.util.Iterator; -import java.util.concurrent.atomic.AtomicInteger; import org.apache.wicket.Component; import org.apache.wicket.MarkupContainer; @@ -109,14 +108,6 @@ public final class RelativePathPrefixHandler extends AbstractMarkupFilter } }; - - /** - * https://issues.apache.org/jira/browse/WICKET-5724 - * - * Unique index to generate new tag ids. - * */ - private final AtomicInteger componentIndex = new AtomicInteger(); - /** * Constructor for the IComponentResolver role. */ @@ -164,7 +155,7 @@ public final class RelativePathPrefixHandler extends AbstractMarkupFilter if (tag.getId() == null) { tag.setId(getWicketRelativePathPrefix(null) - + componentIndex.getAndIncrement()); + + getRequestUniqueId()); tag.setAutoComponentTag(true); }
