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

Reply via email to