This is an automated email from the ASF dual-hosted git repository.

theigl pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/wicket.git


The following commit(s) were added to refs/heads/master by this push:
     new d6dfa8b9ad WICKET-7045 PageParameter optimizations (#577)
d6dfa8b9ad is described below

commit d6dfa8b9ad4a6a39ee49d9503082251d1c16ce9b
Author: Thomas Heigl <[email protected]>
AuthorDate: Wed Apr 19 11:48:09 2023 +0200

    WICKET-7045 PageParameter optimizations (#577)
    
    * Do not allocate when checking for empty named parameters
    
    * Do not allocate when checking for existence of named parameters
---
 .../request/mapper/AbstractBookmarkableMapper.java |  4 +-
 .../request/mapper/parameter/PageParameters.java   | 45 +++++++++++++++++-----
 2 files changed, 38 insertions(+), 11 deletions(-)

diff --git 
a/wicket-core/src/main/java/org/apache/wicket/core/request/mapper/AbstractBookmarkableMapper.java
 
b/wicket-core/src/main/java/org/apache/wicket/core/request/mapper/AbstractBookmarkableMapper.java
index 63a2757258..12298060b7 100644
--- 
a/wicket-core/src/main/java/org/apache/wicket/core/request/mapper/AbstractBookmarkableMapper.java
+++ 
b/wicket-core/src/main/java/org/apache/wicket/core/request/mapper/AbstractBookmarkableMapper.java
@@ -789,7 +789,7 @@ public abstract class AbstractBookmarkableMapper extends 
AbstractComponentMapper
                        String optionalPlaceholder = 
getOptionalPlaceholder(mountSegments[i]);
                        if (placeholder != null)
                        {
-                               if 
(parameters.getNamedKeys().contains(placeholder))
+                               if (parameters.contains(placeholder))
                                {
                                        url.getSegments().set(i - dropped, 
parameters.get(placeholder).toString());
                                        parameters.remove(placeholder);
@@ -802,7 +802,7 @@ public abstract class AbstractBookmarkableMapper extends 
AbstractComponentMapper
                        }
                        else if (optionalPlaceholder != null)
                        {
-                               if 
(parameters.getNamedKeys().contains(optionalPlaceholder))
+                               if (parameters.contains(optionalPlaceholder))
                                {
                                        url.getSegments().set(i - dropped, 
parameters.get(optionalPlaceholder).toString(""));
                                        parameters.remove(optionalPlaceholder);
diff --git 
a/wicket-request/src/main/java/org/apache/wicket/request/mapper/parameter/PageParameters.java
 
b/wicket-request/src/main/java/org/apache/wicket/request/mapper/parameter/PageParameters.java
index 57ca7f56fb..579cf8d180 100644
--- 
a/wicket-request/src/main/java/org/apache/wicket/request/mapper/parameter/PageParameters.java
+++ 
b/wicket-request/src/main/java/org/apache/wicket/request/mapper/parameter/PageParameters.java
@@ -87,6 +87,14 @@ public class PageParameters implements IClusterable, 
IIndexedParameters, INamedP
                return indexedParameters != null ? indexedParameters.size() : 0;
        }
 
+       /**
+        * @return count of named parameters
+        */
+       public int getNamedCount()
+       {
+               return namedParameters != null ? namedParameters.size() : 0;
+       }
+
        /**
         * @see 
org.apache.wicket.request.mapper.parameter.IIndexedParameters#set(int, 
java.lang.Object)
         */
@@ -148,6 +156,29 @@ public class PageParameters implements IClusterable, 
IIndexedParameters, INamedP
                return Collections.unmodifiableSet(set);
        }
 
+       /**
+        * Checks if the parameter with the given name exists
+        * 
+        * @param name the parameter name
+        * @return {@code true} if the parameter exists, {@code false} otherwise
+        */
+       public boolean contains(final String name)
+       {
+               Args.notNull(name, "name");
+
+               if (namedParameters != null)
+               {
+                       for (NamedPair entry : namedParameters)
+                       {
+                               if (entry.getKey().equals(name))
+                               {
+                                       return true;
+                               }
+                       }
+               }
+               return false;
+       }
+
        @Override
        public StringValue get(final String name)
        {
@@ -205,12 +236,8 @@ public class PageParameters implements IClusterable, 
IIndexedParameters, INamedP
                }
 
                List<NamedPair> parametersByType = new ArrayList<>();
-               Iterator<NamedPair> iterator = allNamed.iterator();
-               while (iterator.hasNext())
-               {
-                       NamedPair pair = iterator.next();
-                       if (type == pair.getType())
-                       {
+               for (NamedPair pair : allNamed) {
+                       if (type == pair.getType()) {
                                parametersByType.add(pair);
                        }
                }
@@ -522,11 +549,11 @@ public class PageParameters implements IClusterable, 
IIndexedParameters, INamedP
                {
                        return true;
                }
-               if ((p1 == null) && (p2.getIndexedCount() == 0) && 
p2.getNamedKeys().isEmpty())
+               if ((p1 == null) && (p2.getIndexedCount() == 0) && 
p2.getNamedCount() == 0)
                {
                        return true;
                }
-               if ((p2 == null) && (p1.getIndexedCount() == 0) && 
p1.getNamedKeys().isEmpty())
+               if ((p2 == null) && (p1.getIndexedCount() == 0) && 
p1.getNamedCount() == 0)
                {
                        return true;
                }
@@ -538,7 +565,7 @@ public class PageParameters implements IClusterable, 
IIndexedParameters, INamedP
         */
        public boolean isEmpty()
        {
-               return (getIndexedCount() == 0) && getNamedKeys().isEmpty();
+               return getIndexedCount() == 0 && getNamedCount() == 0;
        }
 
        public PageParameters setLocale(Locale locale)

Reply via email to