This is an automated email from the ASF dual-hosted git repository.
theigl pushed a commit to branch wicket-9.x
in repository https://gitbox.apache.org/repos/asf/wicket.git
The following commit(s) were added to refs/heads/wicket-9.x by this push:
new 76a47ab WICKET-6952 Performance improvements for `Strings.isEmpty()`
(#497)
76a47ab is described below
commit 76a47ab37d30e3548bd3bb86d02657a28d0cc077
Author: Thomas Heigl <[email protected]>
AuthorDate: Wed Feb 2 10:05:51 2022 +0100
WICKET-6952 Performance improvements for `Strings.isEmpty()` (#497)
(cherry picked from commit f95cbf4b072ee87a4ceb7cb61a2c79d82744b7bc)
---
.../java/org/apache/wicket/util/lang/Args.java | 22 ++++++++++++++++++++++
.../org/apache/wicket/util/string/Strings.java | 22 ++++++++++++++++++++--
.../org/apache/wicket/util/string/StringsTest.java | 18 ++++++++++++++++--
3 files changed, 58 insertions(+), 4 deletions(-)
diff --git a/wicket-util/src/main/java/org/apache/wicket/util/lang/Args.java
b/wicket-util/src/main/java/org/apache/wicket/util/lang/Args.java
index cd947d1..3d8c9e5 100644
--- a/wicket-util/src/main/java/org/apache/wicket/util/lang/Args.java
+++ b/wicket-util/src/main/java/org/apache/wicket/util/lang/Args.java
@@ -66,6 +66,28 @@ public class Args
return argument;
}
+ /**
+ * Checks argument is not empty (not null and has a non-whitespace
character)
+ *
+ * Note: This method overloads {@link #notEmpty(CharSequence, String)}
for performance reasons.
+ *
+ * @param argument
+ * the argument to check for emptiness
+ * @param name
+ * the name to use in the error message
+ * @return The {@code argument} parameter if not empty
+ * @throws IllegalArgumentException
+ * when the passed {@code argument} is empty
+ */
+ public static String notEmpty(final String argument, final String name)
+ {
+ if (Strings.isEmpty(argument))
+ {
+ throw new IllegalArgumentException("Argument '" + name
+ "' may not be null or empty.");
+ }
+ return argument;
+ }
+
/**
*
diff --git
a/wicket-util/src/main/java/org/apache/wicket/util/string/Strings.java
b/wicket-util/src/main/java/org/apache/wicket/util/string/Strings.java
index 2b7095a..d569323 100755
--- a/wicket-util/src/main/java/org/apache/wicket/util/string/Strings.java
+++ b/wicket-util/src/main/java/org/apache/wicket/util/string/Strings.java
@@ -537,8 +537,26 @@ public final class Strings
*/
public static boolean isEmpty(final CharSequence string)
{
- return (string == null) || (string.length() == 0) ||
- (string.toString().trim().length() == 0);
+ return string == null || string.length() == 0 ||
+ (string.charAt(0) <= ' ' &&
string.toString().trim().isEmpty());
+ }
+
+ /**
+ * Checks whether the <code>string</code> is considered empty. Empty
means that the string may
+ * contain whitespace, but no visible characters.
+ *
+ * "\n\t " is considered empty, while " a" is not.
+ *
+ * Note: This method overloads {@link #isEmpty(CharSequence)} for
performance reasons.
+ *
+ * @param string
+ * The string
+ * @return True if the string is null or ""
+ */
+ public static boolean isEmpty(final String string)
+ {
+ return string == null || string.isEmpty() ||
+ (string.charAt(0) <= ' ' && string.trim().isEmpty());
}
/**
diff --git
a/wicket-util/src/test/java/org/apache/wicket/util/string/StringsTest.java
b/wicket-util/src/test/java/org/apache/wicket/util/string/StringsTest.java
index 10bb526..db93329 100644
--- a/wicket-util/src/test/java/org/apache/wicket/util/string/StringsTest.java
+++ b/wicket-util/src/test/java/org/apache/wicket/util/string/StringsTest.java
@@ -24,8 +24,6 @@ import static org.junit.jupiter.api.Assertions.assertThrows;
import static org.junit.jupiter.api.Assertions.assertTrue;
import java.lang.reflect.Field;
-import java.lang.reflect.Method;
-import java.lang.reflect.Modifier;
import java.util.Arrays;
import java.util.List;
@@ -276,8 +274,24 @@ class StringsTest
assertTrue(Strings.isEmpty(" "));
assertTrue(Strings.isEmpty(" "));
assertTrue(Strings.isEmpty(" \n\t"));
+
assertFalse(Strings.isEmpty("a"));
assertFalse(Strings.isEmpty(" a"));
+ assertFalse(Strings.isEmpty("a "));
+ }
+
+ @Test
+ void isEmptyCharSequence()
+ {
+ assertTrue(Strings.isEmpty((AppendingStringBuffer)null));
+ assertTrue(Strings.isEmpty(new AppendingStringBuffer("")));
+ assertTrue(Strings.isEmpty(new AppendingStringBuffer(" ")));
+ assertTrue(Strings.isEmpty(new AppendingStringBuffer("
")));
+ assertTrue(Strings.isEmpty(new AppendingStringBuffer(" \n\t")));
+
+ assertFalse(Strings.isEmpty(new AppendingStringBuffer("a")));
+ assertFalse(Strings.isEmpty(new AppendingStringBuffer(" a")));
+ assertFalse(Strings.isEmpty(new AppendingStringBuffer("a ")));
}
@Test