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

Reply via email to