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)