This is an automated email from the ASF dual-hosted git repository.
jamesbognar pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/juneau.git
The following commit(s) were added to refs/heads/master by this push:
new 6375c6839 Test modernization, clean up utility classes.
6375c6839 is described below
commit 6375c68393bd31af01c28d3b125fcce82ecd5ef7
Author: James Bognar <[email protected]>
AuthorDate: Mon Aug 25 15:26:31 2025 -0400
Test modernization, clean up utility classes.
---
.../juneau/assertions/FluentBeanAssertion.java | 3 +-
.../juneau/assertions/FluentBeanListAssertion.java | 2 +-
.../apache/juneau/common/internal/StringUtils.java | 531 +--------------------
.../org/apache/juneau/common/internal/Utils.java | 529 +++++++++++++++++++-
.../main/java/org/apache/juneau/config/Entry.java | 2 +-
.../juneau/config/internal/ConfigMapEntry.java | 2 +-
.../java/org/apache/juneau/AnnotationApplier.java | 2 +-
.../main/java/org/apache/juneau/BeanFilter.java | 9 +-
.../src/main/java/org/apache/juneau/BeanMeta.java | 4 +-
.../java/org/apache/juneau/BeanPropertyMeta.java | 6 +-
.../main/java/org/apache/juneau/BeanSession.java | 2 +-
.../src/main/java/org/apache/juneau/MediaType.java | 2 +-
.../src/main/java/org/apache/juneau/Version.java | 2 +-
.../java/org/apache/juneau/collections/Args.java | 3 +-
.../org/apache/juneau/collections/JsonList.java | 2 +-
.../org/apache/juneau/collections/JsonMap.java | 2 +-
.../main/java/org/apache/juneau/cp/Messages.java | 2 +-
.../org/apache/juneau/httppart/HttpPartSchema.java | 2 +-
.../juneau/jsonschema/JsonSchemaGenerator.java | 2 +-
.../org/apache/juneau/jsonschema/TypeCategory.java | 6 +-
.../apache/juneau/oapi/OpenApiParserSession.java | 24 +-
.../org/apache/juneau/objecttools/SearchArgs.java | 2 +-
.../org/apache/juneau/objecttools/SortArgs.java | 2 +-
.../juneau/objecttools/StringMatcherFactory.java | 2 +-
.../org/apache/juneau/objecttools/ViewArgs.java | 2 +-
.../apache/juneau/svl/MultipartResolvingVar.java | 4 +-
.../java/org/apache/juneau/svl/MultipartVar.java | 4 +-
.../java/org/apache/juneau/svl/vars/SwitchVar.java | 3 +-
.../org/apache/juneau/utils/ReflectionMap.java | 4 +-
.../main/java/org/apache/juneau/xml/Namespace.java | 2 +-
.../apache/juneau/http/header/BasicCsvHeader.java | 2 +-
.../org/apache/juneau/http/header/EntityTags.java | 2 +-
.../java/org/apache/juneau/http/header/Thrown.java | 2 +-
.../apache/juneau/http/part/BasicCsvArrayPart.java | 2 +-
.../java/org/apache/juneau/rest/RestContext.java | 2 +-
.../juneau/rest/debug/BasicDebugEnablement.java | 3 +-
.../rest/swagger/BasicSwaggerProviderSession.java | 2 +-
.../java/org/apache/juneau/rest/util/UrlPath.java | 2 +-
.../juneau/rest/vars/SerializedRequestAttrVar.java | 3 +-
.../src/test/java/org/apache/juneau/TestUtils.java | 12 +-
.../org/apache/juneau/utils/StringUtilsTest.java | 138 +++---
41 files changed, 673 insertions(+), 661 deletions(-)
diff --git
a/juneau-core/juneau-assertions/src/main/java/org/apache/juneau/assertions/FluentBeanAssertion.java
b/juneau-core/juneau-assertions/src/main/java/org/apache/juneau/assertions/FluentBeanAssertion.java
index 10b0a1388..a9230fc8d 100644
---
a/juneau-core/juneau-assertions/src/main/java/org/apache/juneau/assertions/FluentBeanAssertion.java
+++
b/juneau-core/juneau-assertions/src/main/java/org/apache/juneau/assertions/FluentBeanAssertion.java
@@ -19,6 +19,7 @@ import java.io.*;
import java.util.function.*;
import org.apache.juneau.*;
+import org.apache.juneau.common.internal.*;
import org.apache.juneau.internal.*;
import org.apache.juneau.serializer.*;
@@ -150,7 +151,7 @@ public class FluentBeanAssertion<T,R> extends
FluentObjectAssertion<T,R> {
* @return This object.
*/
public FluentMapAssertion<String,Object,R>
asPropertyMap(String...names) {
- return new FluentMapAssertion<>(this,
toBeanMap().getProperties(split3(names, ',')), returns());
+ return new FluentMapAssertion<>(this,
toBeanMap().getProperties(Utils.split3(names, ',')), returns());
}
/**
diff --git
a/juneau-core/juneau-assertions/src/main/java/org/apache/juneau/assertions/FluentBeanListAssertion.java
b/juneau-core/juneau-assertions/src/main/java/org/apache/juneau/assertions/FluentBeanListAssertion.java
index e23875d53..d5cbaaee9 100644
---
a/juneau-core/juneau-assertions/src/main/java/org/apache/juneau/assertions/FluentBeanListAssertion.java
+++
b/juneau-core/juneau-assertions/src/main/java/org/apache/juneau/assertions/FluentBeanListAssertion.java
@@ -173,7 +173,7 @@ public class FluentBeanListAssertion<E,R> extends
FluentListAssertion<E,R> {
* @return This object.
*/
public FluentListAssertion<Map<String,Object>,R>
asPropertyMaps(String...names) {
- String[] n = StringUtils.split3(names, ',');
+ String[] n = Utils.split3(names, ',');
return new FluentListAssertion<>(this, value().stream().map(x
-> beanMap(x).getProperties(n)).toList(), returns());
}
diff --git
a/juneau-core/juneau-common/src/main/java/org/apache/juneau/common/internal/StringUtils.java
b/juneau-core/juneau-common/src/main/java/org/apache/juneau/common/internal/StringUtils.java
index 6839efa34..89f6e399b 100644
---
a/juneau-core/juneau-common/src/main/java/org/apache/juneau/common/internal/StringUtils.java
+++
b/juneau-core/juneau-common/src/main/java/org/apache/juneau/common/internal/StringUtils.java
@@ -294,285 +294,12 @@ public final class StringUtils {
return true;
}
- private static AsciiSet getEscapeSet(char c) {
+ static AsciiSet getEscapeSet(char c) {
return ESCAPE_SETS.computeIfAbsent(c, key ->
AsciiSet.create().chars(key, '\\').build());
}
static final Map<Character,AsciiSet> ESCAPE_SETS = new
ConcurrentHashMap<>();
- /**
- * Shortcut for calling <code>split(s, <js>','</js>)</code>
- *
- * @param s The string to split. Can be <jk>null</jk>.
- * @return The tokens, or <jk>null</jk> if the string was null.
- */
- public static String[] split3(String s) {
- return split3(s, ',');
- }
-
- /**
- * Shortcut for calling <code>split(s, <js>','</js>)</code>
- *
- * @param s The string to split. Can be <jk>null</jk>.
- * @return The tokens, or <jk>null</jk> if the string was null.
- */
- public static List<String> split2(String s) {
- return split2(s, ',');
- }
-
- /**
- * Same as {@link #split3(String)} but consumes the tokens instead of
creating an array.
- *
- * @param s The string to split.
- * @param consumer The consumer of the tokens.
- */
- public static void split3(String s, Consumer<String> consumer) {
- split3(s, ',', consumer);
- }
-
- /**
- * Splits a character-delimited string into a string array.
- *
- * <p>
- * Does not split on escaped-delimiters (e.g. "\,");
- * Resulting tokens are trimmed of whitespace.
- *
- * <p>
- * <b>NOTE:</b> This behavior is different than the Jakarta equivalent.
- * split("a,b,c",',') -> {"a","b","c"}
- * split("a, b ,c ",',') -> {"a","b","c"}
- * split("a,,c",',') -> {"a","","c"}
- * split(",,",',') -> {"","",""}
- * split("",',') -> {}
- * split(null,',') -> null
- * split("a,b\,c,d", ',', false) -> {"a","b\,c","d"}
- * split("a,b\\,c,d", ',', false) -> {"a","b\","c","d"}
- * split("a,b\,c,d", ',', true) -> {"a","b,c","d"}
- *
- * @param s The string to split. Can be <jk>null</jk>.
- * @param c The character to split on.
- * @return The tokens, or <jk>null</jk> if the string was null.
- */
- public static String[] split3(String s, char c) {
- return split3(s, c, Integer.MAX_VALUE);
- }
-
- /**
- * Splits a character-delimited string into a string array.
- *
- * <p>
- * Does not split on escaped-delimiters (e.g. "\,");
- * Resulting tokens are trimmed of whitespace.
- *
- * <p>
- * <b>NOTE:</b> This behavior is different than the Jakarta equivalent.
- * split("a,b,c",',') -> {"a","b","c"}
- * split("a, b ,c ",',') -> {"a","b","c"}
- * split("a,,c",',') -> {"a","","c"}
- * split(",,",',') -> {"","",""}
- * split("",',') -> {}
- * split(null,',') -> null
- * split("a,b\,c,d", ',', false) -> {"a","b\,c","d"}
- * split("a,b\\,c,d", ',', false) -> {"a","b\","c","d"}
- * split("a,b\,c,d", ',', true) -> {"a","b,c","d"}
- *
- * @param s The string to split. Can be <jk>null</jk>.
- * @param c The character to split on.
- * @return The tokens, or <jk>null</jk> if the string was null.
- */
- public static List<String> split2(String s, char c) {
- return split2(s, c, Integer.MAX_VALUE);
- }
-
- /**
- * Same as {@link #split3(String,char)} but consumes the tokens instead
of creating an array.
- *
- * @param s The string to split.
- * @param c The character to split on.
- * @param consumer The consumer of the tokens.
- */
- public static void split3(String s, char c, Consumer<String> consumer) {
- var escapeChars = getEscapeSet(c);
-
- if (isEmpty3(s))
- return;
- if (s.indexOf(c) == -1) {
- consumer.accept(s);
- return;
- }
-
- var x1 = 0;
- var escapeCount = 0;
-
- for (var i = 0; i < s.length(); i++) {
- if (s.charAt(i) == '\\')
- escapeCount++;
- else if (s.charAt(i)==c && escapeCount % 2 == 0) {
- var s2 = s.substring(x1, i);
- var s3 = unEscapeChars(s2, escapeChars);
- consumer.accept(s3.trim()); // NOSONAR - NPE
not possible.
- x1 = i+1;
- }
- if (s.charAt(i) != '\\')
- escapeCount = 0;
- }
- var s2 = s.substring(x1);
- var s3 = unEscapeChars(s2, escapeChars);
- consumer.accept(s3.trim()); // NOSONAR - NPE not possible.
- }
-
- /**
- * Same as {@link #split3(String, char)} but limits the number of
tokens returned.
- *
- * @param s The string to split. Can be <jk>null</jk>.
- * @param c The character to split on.
- * @param limit The maximum number of tokens to return.
- * @return The tokens, or <jk>null</jk> if the string was null.
- */
- public static String[] split3(String s, char c, int limit) {
- var l = split2(s, c, limit);
- return l == null ? null : l.toArray(new String[l.size()]);
- }
-
- /**
- * Same as {@link #split3(String, char)} but limits the number of
tokens returned.
- *
- * @param s The string to split. Can be <jk>null</jk>.
- * @param c The character to split on.
- * @param limit The maximum number of tokens to return.
- * @return The tokens, or <jk>null</jk> if the string was null.
- */
- public static List<String> split2(String s, char c, int limit) {
-
- var escapeChars = getEscapeSet(c);
-
- if (s == null)
- return null; // NOSONAR - Intentional.
- if (isEmpty3(s))
- return Collections.emptyList();
- if (s.indexOf(c) == -1)
- return Collections.singletonList(s);
-
- var l = new LinkedList<String>();
- var sArray = s.toCharArray();
- var x1 = 0;
- var escapeCount = 0;
- limit--;
- for (var i = 0; i < sArray.length && limit > 0; i++) {
- if (sArray[i] == '\\')
- escapeCount++;
- else if (sArray[i]==c && escapeCount % 2 == 0) {
- var s2 = new String(sArray, x1, i-x1);
- var s3 = unEscapeChars(s2, escapeChars);
- l.add(s3.trim());
- limit--;
- x1 = i+1;
- }
- if (sArray[i] != '\\')
- escapeCount = 0;
- }
- var s2 = new String(sArray, x1, sArray.length-x1);
- var s3 = unEscapeChars(s2, escapeChars);
- l.add(s3.trim());
-
- return l;
- }
-
- /**
- * Same as {@link #split3(String, char)} except splits all strings in
the input and returns a single result.
- *
- * @param s The string to split. Can be <jk>null</jk>.
- * @param c The character to split on.
- * @return The tokens, or null if the input array was null
- */
- public static String[] split3(String[] s, char c) {
- if (s == null)
- return null; // NOSONAR - Intentional.
- var l = new LinkedList<String>();
- for (var ss : s) {
- if (ss == null || ss.indexOf(c) == -1)
- l.add(ss);
- else
- Collections.addAll(l, split3(ss, c));
- }
- return l.toArray(new String[l.size()]);
- }
-
- /**
- * Splits a list of key-value pairs into an ordered map.
- *
- * <p>
- * Example:
- * <p class='bjava'>
- * String <jv>in</jv> = <js>"foo=1;bar=2"</js>;
- * Map <jv>map</jv> = StringUtils.<jsm>splitMap</jsm>(in,
<js>';'</js>, <js>'='</js>, <jk>true</jk>);
- * </p>
- *
- * @param s The string to split.
- * @param trim Trim strings after parsing.
- * @return The parsed map, or null if the string was null.
- */
- public static Map<String,String> splitMap(String s, boolean trim) {
-
- if (s == null)
- return null; // NOSONAR - Intentional.
- if (isEmpty3(s))
- return Collections.emptyMap();
-
- var m = new LinkedHashMap<String,String>();
-
- final int
- S1 = 1, // Found start of key, looking for equals.
- S2 = 2; // Found equals, looking for delimiter (or
end).
-
- var state = S1;
-
- var sArray = s.toCharArray();
- var x1 = 0;
- var escapeCount = 0;
- String key = null;
- for (var i = 0; i < sArray.length + 1; i++) {
- var c = i == sArray.length ? ',' : sArray[i];
- if (c == '\\')
- escapeCount++;
- if (escapeCount % 2 == 0) {
- if (state == S1) {
- if (c == '=') {
- key = s.substring(x1, i);
- if (trim)
- key = trim(key);
- key = unEscapeChars(key,
MAP_ESCAPE_SET);
- state = S2;
- x1 = i+1;
- } else if (c == ',') {
- key = s.substring(x1, i);
- if (trim)
- key = trim(key);
- key = unEscapeChars(key,
MAP_ESCAPE_SET);
- m.put(key, "");
- state = S1;
- x1 = i+1;
- }
- } else if (state == S2) {
- if (c == ',') { // NOSONAR -
Intentional.
- var val = s.substring(x1, i);
- if (trim)
- val = trim(val);
- val = unEscapeChars(val,
MAP_ESCAPE_SET);
- m.put(key, val);
- key = null;
- x1 = i+1;
- state = S1;
- }
- }
- }
- if (c != '\\')
- escapeCount = 0;
- }
-
- return m;
- }
-
- private static final AsciiSet MAP_ESCAPE_SET = AsciiSet.of(",=\\");
+ static final AsciiSet MAP_ESCAPE_SET = AsciiSet.of(",=\\");
/**
* Returns <jk>true</jk> if the specified string contains any of the
specified characters.
@@ -595,220 +322,7 @@ public final class StringUtils {
return false;
}
- /**
- * Splits a space-delimited string with optionally quoted arguments.
- *
- * <p>
- * Examples:
- * <ul>
- * <li><js>"foo"</js> => <c>["foo"]</c>
- * <li><js>" foo "</js> => <c>["foo"]</c>
- * <li><js>"foo bar baz"</js> => <c>["foo","bar","baz"]</c>
- * <li><js>"foo 'bar baz'"</js> => <c>["foo","bar baz"]</c>
- * <li><js>"foo \"bar baz\""</js> => <c>["foo","bar baz"]</c>
- * <li><js>"foo 'bar\'baz'"</js> => <c>["foo","bar'baz"]</c>
- * </ul>
- *
- * @param s The input string.
- * @return
- * The results, or <jk>null</jk> if the input was <jk>null</jk>.
- * <br>An empty string results in an empty array.
- */
- public static String[] splitQuoted(String s) {
- return splitQuoted(s, false);
- }
-
- /**
- * Splits a comma-delimited list containing "nesting constructs".
- *
- * Nesting constructs are simple embedded "{...}" comma-delimted lists.
- *
- * Example:
- * "a{b,c},d" -> ["a{b,c}","d"]
- *
- * Handles escapes and trims whitespace from tokens.
- *
- * @param s The input string.
- * The results, or <jk>null</jk> if the input was <jk>null</jk>.
- * <br>An empty string results in an empty array.
- */
- public static List<String> splitNested(String s) {
- var escapeChars = getEscapeSet(',');
-
- if (s == null) return null; // NOSONAR - Intentional.
- if (isEmpty3(s)) return Collections.emptyList();
- if (s.indexOf(',') == -1) return
Collections.singletonList(trim(s));
-
- var l = new LinkedList<String>();
-
- var x1 = 0;
- var inEscape = false;
- var depthCount = 0;
-
- for (var i = 0; i < s.length(); i++) {
- var c = s.charAt(i);
- if (inEscape) {
- if (c == '\\') {
- inEscape = false;
- }
- } else {
- if (c == '\\') {
- inEscape = true;
- } else if (c == '{') {
- depthCount++;
- } else if (c == '}') {
- depthCount--;
- } else if (c == ',' && depthCount == 0) {
-
l.add(trim(unEscapeChars(s.substring(x1, i), escapeChars)));
- x1 = i+1;
- }
- }
- }
- l.add(trim(unEscapeChars(s.substring(x1, s.length()),
escapeChars)));
-
- return l;
- }
-
- /**
- * Splits a nested comma-delimited list.
- *
- * Nesting constructs are simple embedded "{...}" comma-delimted lists.
- *
- * Example:
- * "a{b,c{d,e}}" -> ["b","c{d,e}"]
- *
- * Handles escapes and trims whitespace from tokens.
- *
- * @param s The input string.
- * The results, or <jk>null</jk> if the input was <jk>null</jk>.
- * <br>An empty string results in an empty array.
- */
- public static List<String> splitNestedInner(String s) {
- if (s == null) throw illegalArg("String was null.");
- if (isEmpty3(s)) throw illegalArg("String was empty.");
-
- final int
- S1 = 1, // Looking for '{'
- S2 = 2; // Found '{', looking for '}'
-
- var start = -1;
- var end = -1;
- var state = S1;
- var depth = 0;
- var inEscape = false;
-
- for (var i = 0; i < s.length(); i++) {
- var c = s.charAt(i);
- if (inEscape) {
- if (c == '\\') {
- inEscape = false;
- }
- } else {
- if (c == '\\') {
- inEscape = true;
- } else if (state == S1) {
- if (c == '{') {
- start = i+1;
- state = S2;
- }
- } else /* state == S2 */ {
- if (c == '{') {
- depth++;
- } else if (depth > 0 && c == '}') {
- depth--;
- } else if (c == '}') {
- end = i;
- break;
- }
- }
- }
- }
-
- if (start == -1) throw illegalArg("Start character '{' not
found in string.", s);
- if (end == -1) throw illegalArg("End character '}' not found in
string.", s);
- return splitNested(s.substring(start, end));
- }
-
- /**
- * Same as {@link #splitQuoted(String)} but allows you to optionally
keep the quote characters.
- *
- * @param s The input string.
- * @param keepQuotes If <jk>true</jk>, quote characters are kept on the
tokens.
- * @return
- * The results, or <jk>null</jk> if the input was <jk>null</jk>.
- * <br>An empty string results in an empty array.
- */
- public static String[] splitQuoted(String s, boolean keepQuotes) {
-
- if (s == null)
- return null; // NOSONAR - Intentional.
-
- s = s.trim();
-
- if (isEmpty3(s))
- return new String[0];
-
- if (! containsAny(s, ' ', '\t', '\'', '"'))
- return new String[]{s};
-
- final int
- S1 = 1, // Looking for start of token.
- S2 = 2, // Found ', looking for end '
- S3 = 3, // Found ", looking for end "
- S4 = 4; // Found non-whitespace, looking for end
whitespace.
-
- var state = S1;
-
- var isInEscape = false;
- var needsUnescape = false;
- var mark = 0;
-
- var l = new ArrayList<String>();
- for (var i = 0; i < s.length(); i++) {
- var c = s.charAt(i);
-
- if (state == S1) {
- if (c == '\'') {
- state = S2;
- mark = keepQuotes ? i : i+1;
- } else if (c == '"') {
- state = S3;
- mark = keepQuotes ? i : i+1;
- } else if (c != ' ' && c != '\t') {
- state = S4;
- mark = i;
- }
- } else if (state == S2 || state == S3) {
- if (c == '\\') {
- isInEscape = ! isInEscape;
- needsUnescape = ! keepQuotes;
- } else if (! isInEscape) {
- if (c == (state == S2 ? '\'' : '"')) {
- var s2 = s.substring(mark,
keepQuotes ? i+1 : i);
- if (needsUnescape) // NOSONAR
- False positive check.
- s2 = unEscapeChars(s2,
QUOTE_ESCAPE_SET);
- l.add(s2);
- state = S1;
- isInEscape = needsUnescape =
false;
- }
- } else {
- isInEscape = false;
- }
- } else /* state == S4 */ {
- if (c == ' ' || c == '\t') {
- l.add(s.substring(mark, i));
- state = S1;
- }
- }
- }
- if (state == S4)
- l.add(s.substring(mark));
- else if (state == S2 || state == S3)
- throw new IllegalArgumentException("Unmatched string
quotes: " + s);
- return l.toArray(new String[l.size()]);
- }
-
- private static final AsciiSet QUOTE_ESCAPE_SET = AsciiSet.of("\"'\\");
+ static final AsciiSet QUOTE_ESCAPE_SET = AsciiSet.of("\"'\\");
/**
* Returns <jk>true</jk> if specified string is <jk>null</jk> or empty.
@@ -2567,45 +2081,6 @@ public final class StringUtils {
return in.substring(0, length-3) + "...";
}
- /**
- * Splits the method arguments in the signature of a method.
- *
- * @param s The arguments to split.
- * @return The split arguments, or null if the input string is null.
- */
- public static String[] splitMethodArgs(String s) {
-
- if (s == null)
- return null; // NOSONAR - Intentional.
- if (isEmpty3(s))
- return new String[0];
- if (s.indexOf(',') == -1)
- return new String[]{s};
-
- var l = new LinkedList<String>();
- var sArray = s.toCharArray();
- var x1 = 0;
- var paramDepth = 0;
-
- for (var i = 0; i < sArray.length; i++) {
- var c = s.charAt(i);
- if (c == '>')
- paramDepth++;
- else if (c == '<')
- paramDepth--;
- else if (c == ',' && paramDepth == 0) {
- var s2 = new String(sArray, x1, i-x1);
- l.add(s2.trim());
- x1 = i+1;
- }
- }
-
- var s2 = new String(sArray, x1, sArray.length-x1);
- l.add(s2.trim());
-
- return l.toArray(new String[l.size()]);
- }
-
private static final AsciiSet URI_CHARS =
AsciiSet.create().chars("?#+%;/:@&=+$,-_.!~*'()").range('0','9').range('A','Z').range('a','z').build();
/**
diff --git
a/juneau-core/juneau-common/src/main/java/org/apache/juneau/common/internal/Utils.java
b/juneau-core/juneau-common/src/main/java/org/apache/juneau/common/internal/Utils.java
index 52e2873a3..d55710ab7 100644
---
a/juneau-core/juneau-common/src/main/java/org/apache/juneau/common/internal/Utils.java
+++
b/juneau-core/juneau-common/src/main/java/org/apache/juneau/common/internal/Utils.java
@@ -349,14 +349,14 @@ public class Utils {
* Splits a comma-delimited list into a list of strings.
*/
public static List<String> split(String s) {
- return s == null ? Collections.emptyList() :
StringUtils.split2(s);
+ return s == null ? Collections.emptyList() : Utils.split2(s);
}
/**
* Splits a comma-delimited list into an array of strings.
*/
public static String[] splita(String s) {
- return s == null ? new String[0] : StringUtils.split3(s);
+ return s == null ? new String[0] : Utils.split3(s);
}
/**
@@ -923,4 +923,529 @@ public class Utils {
public static String joinnl(Object[] tokens) {
return join(tokens, '\n');
}
+
+ /**
+ * Shortcut for calling <code>split(s, <js>','</js>)</code>
+ *
+ * @param s The string to split. Can be <jk>null</jk>.
+ * @return The tokens, or <jk>null</jk> if the string was null.
+ */
+ public static String[] split3(String s) {
+ return split3(s, ',');
+ }
+
+ /**
+ * Shortcut for calling <code>split(s, <js>','</js>)</code>
+ *
+ * @param s The string to split. Can be <jk>null</jk>.
+ * @return The tokens, or <jk>null</jk> if the string was null.
+ */
+ public static List<String> split2(String s) {
+ return split2(s, ',');
+ }
+
+ /**
+ * Same as {@link #split3(String)} but consumes the tokens instead of
creating an array.
+ *
+ * @param s The string to split.
+ * @param consumer The consumer of the tokens.
+ */
+ public static void split3(String s, Consumer<String> consumer) {
+ split3(s, ',', consumer);
+ }
+
+ /**
+ * Splits a character-delimited string into a string array.
+ *
+ * <p>
+ * Does not split on escaped-delimiters (e.g. "\,");
+ * Resulting tokens are trimmed of whitespace.
+ *
+ * <p>
+ * <b>NOTE:</b> This behavior is different than the Jakarta equivalent.
+ * split("a,b,c",',') -> {"a","b","c"}
+ * split("a, b ,c ",',') -> {"a","b","c"}
+ * split("a,,c",',') -> {"a","","c"}
+ * split(",,",',') -> {"","",""}
+ * split("",',') -> {}
+ * split(null,',') -> null
+ * split("a,b\,c,d", ',', false) -> {"a","b\,c","d"}
+ * split("a,b\\,c,d", ',', false) -> {"a","b\","c","d"}
+ * split("a,b\,c,d", ',', true) -> {"a","b,c","d"}
+ *
+ * @param s The string to split. Can be <jk>null</jk>.
+ * @param c The character to split on.
+ * @return The tokens, or <jk>null</jk> if the string was null.
+ */
+ public static String[] split3(String s, char c) {
+ return split3(s, c, Integer.MAX_VALUE);
+ }
+
+ /**
+ * Splits a character-delimited string into a string array.
+ *
+ * <p>
+ * Does not split on escaped-delimiters (e.g. "\,");
+ * Resulting tokens are trimmed of whitespace.
+ *
+ * <p>
+ * <b>NOTE:</b> This behavior is different than the Jakarta equivalent.
+ * split("a,b,c",',') -> {"a","b","c"}
+ * split("a, b ,c ",',') -> {"a","b","c"}
+ * split("a,,c",',') -> {"a","","c"}
+ * split(",,",',') -> {"","",""}
+ * split("",',') -> {}
+ * split(null,',') -> null
+ * split("a,b\,c,d", ',', false) -> {"a","b\,c","d"}
+ * split("a,b\\,c,d", ',', false) -> {"a","b\","c","d"}
+ * split("a,b\,c,d", ',', true) -> {"a","b,c","d"}
+ *
+ * @param s The string to split. Can be <jk>null</jk>.
+ * @param c The character to split on.
+ * @return The tokens, or <jk>null</jk> if the string was null.
+ */
+ public static List<String> split2(String s, char c) {
+ return split2(s, c, Integer.MAX_VALUE);
+ }
+
+ /**
+ * Same as {@link #split3(String,char)} but consumes the tokens instead
of creating an array.
+ *
+ * @param s The string to split.
+ * @param c The character to split on.
+ * @param consumer The consumer of the tokens.
+ */
+ public static void split3(String s, char c, Consumer<String> consumer) {
+ var escapeChars = StringUtils.getEscapeSet(c);
+
+ if (StringUtils.isEmpty3(s))
+ return;
+ if (s.indexOf(c) == -1) {
+ consumer.accept(s);
+ return;
+ }
+
+ var x1 = 0;
+ var escapeCount = 0;
+
+ for (var i = 0; i < s.length(); i++) {
+ if (s.charAt(i) == '\\')
+ escapeCount++;
+ else if (s.charAt(i)==c && escapeCount % 2 == 0) {
+ var s2 = s.substring(x1, i);
+ var s3 = StringUtils.unEscapeChars(s2,
escapeChars);
+ consumer.accept(s3.trim()); // NOSONAR - NPE
not possible.
+ x1 = i+1;
+ }
+ if (s.charAt(i) != '\\')
+ escapeCount = 0;
+ }
+ var s2 = s.substring(x1);
+ var s3 = StringUtils.unEscapeChars(s2, escapeChars);
+ consumer.accept(s3.trim()); // NOSONAR - NPE not possible.
+ }
+
+ /**
+ * Same as {@link #split3(String, char)} but limits the number of
tokens returned.
+ *
+ * @param s The string to split. Can be <jk>null</jk>.
+ * @param c The character to split on.
+ * @param limit The maximum number of tokens to return.
+ * @return The tokens, or <jk>null</jk> if the string was null.
+ */
+ public static String[] split3(String s, char c, int limit) {
+ var l = split2(s, c, limit);
+ return l == null ? null : l.toArray(new String[l.size()]);
+ }
+
+ /**
+ * Same as {@link #split3(String, char)} but limits the number of
tokens returned.
+ *
+ * @param s The string to split. Can be <jk>null</jk>.
+ * @param c The character to split on.
+ * @param limit The maximum number of tokens to return.
+ * @return The tokens, or <jk>null</jk> if the string was null.
+ */
+ public static List<String> split2(String s, char c, int limit) {
+
+ var escapeChars = StringUtils.getEscapeSet(c);
+
+ if (s == null)
+ return null; // NOSONAR - Intentional.
+ if (StringUtils.isEmpty3(s))
+ return Collections.emptyList();
+ if (s.indexOf(c) == -1)
+ return Collections.singletonList(s);
+
+ var l = new LinkedList<String>();
+ var sArray = s.toCharArray();
+ var x1 = 0;
+ var escapeCount = 0;
+ limit--;
+ for (var i = 0; i < sArray.length && limit > 0; i++) {
+ if (sArray[i] == '\\')
+ escapeCount++;
+ else if (sArray[i]==c && escapeCount % 2 == 0) {
+ var s2 = new String(sArray, x1, i-x1);
+ var s3 = StringUtils.unEscapeChars(s2,
escapeChars);
+ l.add(s3.trim());
+ limit--;
+ x1 = i+1;
+ }
+ if (sArray[i] != '\\')
+ escapeCount = 0;
+ }
+ var s2 = new String(sArray, x1, sArray.length-x1);
+ var s3 = StringUtils.unEscapeChars(s2, escapeChars);
+ l.add(s3.trim());
+
+ return l;
+ }
+
+ /**
+ * Same as {@link #split3(String, char)} except splits all strings in
the input and returns a single result.
+ *
+ * @param s The string to split. Can be <jk>null</jk>.
+ * @param c The character to split on.
+ * @return The tokens, or null if the input array was null
+ */
+ public static String[] split3(String[] s, char c) {
+ if (s == null)
+ return null; // NOSONAR - Intentional.
+ var l = new LinkedList<String>();
+ for (var ss : s) {
+ if (ss == null || ss.indexOf(c) == -1)
+ l.add(ss);
+ else
+ Collections.addAll(l, split3(ss, c));
+ }
+ return l.toArray(new String[l.size()]);
+ }
+
+ /**
+ * Splits a list of key-value pairs into an ordered map.
+ *
+ * <p>
+ * Example:
+ * <p class='bjava'>
+ * String <jv>in</jv> = <js>"foo=1;bar=2"</js>;
+ * Map <jv>map</jv> = StringUtils.<jsm>splitMap</jsm>(in,
<js>';'</js>, <js>'='</js>, <jk>true</jk>);
+ * </p>
+ *
+ * @param s The string to split.
+ * @param trim Trim strings after parsing.
+ * @return The parsed map, or null if the string was null.
+ */
+ public static Map<String,String> splitMap(String s, boolean trim) {
+
+ if (s == null)
+ return null; // NOSONAR - Intentional.
+ if (StringUtils.isEmpty3(s))
+ return Collections.emptyMap();
+
+ var m = new LinkedHashMap<String,String>();
+
+ final int
+ S1 = 1, // Found start of key, looking for equals.
+ S2 = 2; // Found equals, looking for delimiter (or
end).
+
+ var state = S1;
+
+ var sArray = s.toCharArray();
+ var x1 = 0;
+ var escapeCount = 0;
+ String key = null;
+ for (var i = 0; i < sArray.length + 1; i++) {
+ var c = i == sArray.length ? ',' : sArray[i];
+ if (c == '\\')
+ escapeCount++;
+ if (escapeCount % 2 == 0) {
+ if (state == S1) {
+ if (c == '=') {
+ key = s.substring(x1, i);
+ if (trim)
+ key =
StringUtils.trim(key);
+ key =
StringUtils.unEscapeChars(key, StringUtils.MAP_ESCAPE_SET);
+ state = S2;
+ x1 = i+1;
+ } else if (c == ',') {
+ key = s.substring(x1, i);
+ if (trim)
+ key =
StringUtils.trim(key);
+ key =
StringUtils.unEscapeChars(key, StringUtils.MAP_ESCAPE_SET);
+ m.put(key, "");
+ state = S1;
+ x1 = i+1;
+ }
+ } else if (state == S2) {
+ if (c == ',') { // NOSONAR -
Intentional.
+ var val = s.substring(x1, i);
+ if (trim)
+ val =
StringUtils.trim(val);
+ val =
StringUtils.unEscapeChars(val, StringUtils.MAP_ESCAPE_SET);
+ m.put(key, val);
+ key = null;
+ x1 = i+1;
+ state = S1;
+ }
+ }
+ }
+ if (c != '\\')
+ escapeCount = 0;
+ }
+
+ return m;
+ }
+
+ /**
+ * Splits a space-delimited string with optionally quoted arguments.
+ *
+ * <p>
+ * Examples:
+ * <ul>
+ * <li><js>"foo"</js> => <c>["foo"]</c>
+ * <li><js>" foo "</js> => <c>["foo"]</c>
+ * <li><js>"foo bar baz"</js> => <c>["foo","bar","baz"]</c>
+ * <li><js>"foo 'bar baz'"</js> => <c>["foo","bar baz"]</c>
+ * <li><js>"foo \"bar baz\""</js> => <c>["foo","bar baz"]</c>
+ * <li><js>"foo 'bar\'baz'"</js> => <c>["foo","bar'baz"]</c>
+ * </ul>
+ *
+ * @param s The input string.
+ * @return
+ * The results, or <jk>null</jk> if the input was <jk>null</jk>.
+ * <br>An empty string results in an empty array.
+ */
+ public static String[] splitQuoted(String s) {
+ return splitQuoted(s, false);
+ }
+
+ /**
+ * Splits a comma-delimited list containing "nesting constructs".
+ *
+ * Nesting constructs are simple embedded "{...}" comma-delimted lists.
+ *
+ * Example:
+ * "a{b,c},d" -> ["a{b,c}","d"]
+ *
+ * Handles escapes and trims whitespace from tokens.
+ *
+ * @param s The input string.
+ * The results, or <jk>null</jk> if the input was <jk>null</jk>.
+ * <br>An empty string results in an empty array.
+ */
+ public static List<String> splitNested(String s) {
+ var escapeChars = StringUtils.getEscapeSet(',');
+
+ if (s == null) return null; // NOSONAR - Intentional.
+ if (StringUtils.isEmpty3(s)) return Collections.emptyList();
+ if (s.indexOf(',') == -1) return
Collections.singletonList(StringUtils.trim(s));
+
+ var l = new LinkedList<String>();
+
+ var x1 = 0;
+ var inEscape = false;
+ var depthCount = 0;
+
+ for (var i = 0; i < s.length(); i++) {
+ var c = s.charAt(i);
+ if (inEscape) {
+ if (c == '\\') {
+ inEscape = false;
+ }
+ } else {
+ if (c == '\\') {
+ inEscape = true;
+ } else if (c == '{') {
+ depthCount++;
+ } else if (c == '}') {
+ depthCount--;
+ } else if (c == ',' && depthCount == 0) {
+
l.add(StringUtils.trim(StringUtils.unEscapeChars(s.substring(x1, i),
escapeChars)));
+ x1 = i+1;
+ }
+ }
+ }
+
l.add(StringUtils.trim(StringUtils.unEscapeChars(s.substring(x1, s.length()),
escapeChars)));
+
+ return l;
+ }
+
+ /**
+ * Splits a nested comma-delimited list.
+ *
+ * Nesting constructs are simple embedded "{...}" comma-delimted lists.
+ *
+ * Example:
+ * "a{b,c{d,e}}" -> ["b","c{d,e}"]
+ *
+ * Handles escapes and trims whitespace from tokens.
+ *
+ * @param s The input string.
+ * The results, or <jk>null</jk> if the input was <jk>null</jk>.
+ * <br>An empty string results in an empty array.
+ */
+ public static List<String> splitNestedInner(String s) {
+ if (s == null) throw illegalArg("String was null.");
+ if (StringUtils.isEmpty3(s)) throw illegalArg("String was
empty.");
+
+ final int
+ S1 = 1, // Looking for '{'
+ S2 = 2; // Found '{', looking for '}'
+
+ var start = -1;
+ var end = -1;
+ var state = S1;
+ var depth = 0;
+ var inEscape = false;
+
+ for (var i = 0; i < s.length(); i++) {
+ var c = s.charAt(i);
+ if (inEscape) {
+ if (c == '\\') {
+ inEscape = false;
+ }
+ } else {
+ if (c == '\\') {
+ inEscape = true;
+ } else if (state == S1) {
+ if (c == '{') {
+ start = i+1;
+ state = S2;
+ }
+ } else /* state == S2 */ {
+ if (c == '{') {
+ depth++;
+ } else if (depth > 0 && c == '}') {
+ depth--;
+ } else if (c == '}') {
+ end = i;
+ break;
+ }
+ }
+ }
+ }
+
+ if (start == -1) throw illegalArg("Start character '{' not
found in string.", s);
+ if (end == -1) throw illegalArg("End character '}' not found in
string.", s);
+ return splitNested(s.substring(start, end));
+ }
+
+ /**
+ * Same as {@link #splitQuoted(String)} but allows you to optionally
keep the quote characters.
+ *
+ * @param s The input string.
+ * @param keepQuotes If <jk>true</jk>, quote characters are kept on the
tokens.
+ * @return
+ * The results, or <jk>null</jk> if the input was <jk>null</jk>.
+ * <br>An empty string results in an empty array.
+ */
+ public static String[] splitQuoted(String s, boolean keepQuotes) {
+
+ if (s == null)
+ return null; // NOSONAR - Intentional.
+
+ s = s.trim();
+
+ if (StringUtils.isEmpty3(s))
+ return new String[0];
+
+ if (! StringUtils.containsAny(s, ' ', '\t', '\'', '"'))
+ return new String[]{s};
+
+ final int
+ S1 = 1, // Looking for start of token.
+ S2 = 2, // Found ', looking for end '
+ S3 = 3, // Found ", looking for end "
+ S4 = 4; // Found non-whitespace, looking for end
whitespace.
+
+ var state = S1;
+
+ var isInEscape = false;
+ var needsUnescape = false;
+ var mark = 0;
+
+ var l = new ArrayList<String>();
+ for (var i = 0; i < s.length(); i++) {
+ var c = s.charAt(i);
+
+ if (state == S1) {
+ if (c == '\'') {
+ state = S2;
+ mark = keepQuotes ? i : i+1;
+ } else if (c == '"') {
+ state = S3;
+ mark = keepQuotes ? i : i+1;
+ } else if (c != ' ' && c != '\t') {
+ state = S4;
+ mark = i;
+ }
+ } else if (state == S2 || state == S3) {
+ if (c == '\\') {
+ isInEscape = ! isInEscape;
+ needsUnescape = ! keepQuotes;
+ } else if (! isInEscape) {
+ if (c == (state == S2 ? '\'' : '"')) {
+ var s2 = s.substring(mark,
keepQuotes ? i+1 : i);
+ if (needsUnescape) // NOSONAR
- False positive check.
+ s2 =
StringUtils.unEscapeChars(s2, StringUtils.QUOTE_ESCAPE_SET);
+ l.add(s2);
+ state = S1;
+ isInEscape = needsUnescape =
false;
+ }
+ } else {
+ isInEscape = false;
+ }
+ } else /* state == S4 */ {
+ if (c == ' ' || c == '\t') {
+ l.add(s.substring(mark, i));
+ state = S1;
+ }
+ }
+ }
+ if (state == S4)
+ l.add(s.substring(mark));
+ else if (state == S2 || state == S3)
+ throw new IllegalArgumentException("Unmatched string
quotes: " + s);
+ return l.toArray(new String[l.size()]);
+ }
+
+ /**
+ * Splits the method arguments in the signature of a method.
+ *
+ * @param s The arguments to split.
+ * @return The split arguments, or null if the input string is null.
+ */
+ public static String[] splitMethodArgs(String s) {
+
+ if (s == null)
+ return null; // NOSONAR - Intentional.
+ if (StringUtils.isEmpty3(s))
+ return new String[0];
+ if (s.indexOf(',') == -1)
+ return new String[]{s};
+
+ var l = new LinkedList<String>();
+ var sArray = s.toCharArray();
+ var x1 = 0;
+ var paramDepth = 0;
+
+ for (var i = 0; i < sArray.length; i++) {
+ var c = s.charAt(i);
+ if (c == '>')
+ paramDepth++;
+ else if (c == '<')
+ paramDepth--;
+ else if (c == ',' && paramDepth == 0) {
+ var s2 = new String(sArray, x1, i-x1);
+ l.add(s2.trim());
+ x1 = i+1;
+ }
+ }
+
+ var s2 = new String(sArray, x1, sArray.length-x1);
+ l.add(s2.trim());
+
+ return l.toArray(new String[l.size()]);
+ }
}
\ No newline at end of file
diff --git
a/juneau-core/juneau-config/src/main/java/org/apache/juneau/config/Entry.java
b/juneau-core/juneau-config/src/main/java/org/apache/juneau/config/Entry.java
index 24886ba0d..a91db67d9 100644
---
a/juneau-core/juneau-config/src/main/java/org/apache/juneau/config/Entry.java
+++
b/juneau-core/juneau-config/src/main/java/org/apache/juneau/config/Entry.java
@@ -281,7 +281,7 @@ public class Entry {
throw new BeanRuntimeException(e);
}
}
- return Utils.opt(split3(v));
+ return Utils.opt(Utils.split3(v));
}
/**
diff --git
a/juneau-core/juneau-config/src/main/java/org/apache/juneau/config/internal/ConfigMapEntry.java
b/juneau-core/juneau-config/src/main/java/org/apache/juneau/config/internal/ConfigMapEntry.java
index b111025fc..0644ce979 100644
---
a/juneau-core/juneau-config/src/main/java/org/apache/juneau/config/internal/ConfigMapEntry.java
+++
b/juneau-core/juneau-config/src/main/java/org/apache/juneau/config/internal/ConfigMapEntry.java
@@ -49,7 +49,7 @@ public class ConfigMapEntry {
i = line.indexOf('#');
if (i != -1) {
- var l2 = StringUtils.split3(line, '#', 2);
+ var l2 = Utils.split3(line, '#', 2);
line = l2[0];
if (l2.length == 2)
this.comment = l2[1].trim();
diff --git
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/AnnotationApplier.java
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/AnnotationApplier.java
index c41e90263..d2873d608 100644
---
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/AnnotationApplier.java
+++
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/AnnotationApplier.java
@@ -188,7 +188,7 @@ public abstract class AnnotationApplier<A extends
Annotation, B> {
* @return An array with resolved strings.
*/
protected Stream<String> cdl(String in) {
- return
Arrays.stream(split3(vr.resolve(in))).filter(StringUtils::isNotEmpty3);
+ return
Arrays.stream(Utils.split3(vr.resolve(in))).filter(StringUtils::isNotEmpty3);
}
/**
diff --git
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/BeanFilter.java
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/BeanFilter.java
index 3aa941c09..b3b4b4ca8 100644
---
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/BeanFilter.java
+++
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/BeanFilter.java
@@ -22,6 +22,7 @@ import static org.apache.juneau.common.internal.StringUtils.*;
import static org.apache.juneau.internal.ArrayUtils.*;
import org.apache.juneau.annotation.*;
+import org.apache.juneau.common.internal.*;
import org.apache.juneau.cp.*;
import org.apache.juneau.swap.*;
@@ -453,7 +454,7 @@ public final class BeanFilter {
public Builder properties(String...value) {
this.properties = set();
for (String v : value)
- split3(v, x -> properties.add(x));
+ Utils.split3(v, x -> properties.add(x));
return this;
}
@@ -497,7 +498,7 @@ public final class BeanFilter {
public Builder excludeProperties(String...value) {
this.excludeProperties = set();
for (String v : value)
- split3(v, x -> excludeProperties.add(x));
+ Utils.split3(v, x -> excludeProperties.add(x));
return this;
}
@@ -543,7 +544,7 @@ public final class BeanFilter {
public Builder readOnlyProperties(String...value) {
this.readOnlyProperties = set();
for (String v : value)
- split3(v, x -> readOnlyProperties.add(x));
+ Utils.split3(v, x -> readOnlyProperties.add(x));
return this;
}
@@ -589,7 +590,7 @@ public final class BeanFilter {
public Builder writeOnlyProperties(String...value) {
this.writeOnlyProperties = set();
for (String v : value)
- split3(v, x -> writeOnlyProperties.add(x));
+ Utils.split3(v, x ->
writeOnlyProperties.add(x));
return this;
}
diff --git
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/BeanMeta.java
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/BeanMeta.java
index 6e0b01f7f..9e7142d4e 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/BeanMeta.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/BeanMeta.java
@@ -233,7 +233,7 @@ public class BeanMeta<T> {
throw new
BeanRuntimeException(c, "Multiple instances of '@Beanc' found.");
constructor = x;
constructorArgs = new String[0];
- ctx.forEachAnnotation(Beanc.class,
x.inner(), y -> ! y.properties().isEmpty(), z -> constructorArgs =
StringUtils.split3(z.properties()));
+ ctx.forEachAnnotation(Beanc.class,
x.inner(), y -> ! y.properties().isEmpty(), z -> constructorArgs =
Utils.split3(z.properties()));
if (!
x.hasNumParams(constructorArgs.length)) {
if (constructorArgs.length != 0)
throw new
BeanRuntimeException(c, "Number of properties defined in '@Beanc' annotation
does not match number of parameters in constructor.");
@@ -256,7 +256,7 @@ public class BeanMeta<T> {
throw new
BeanRuntimeException(c, "Multiple instances of '@Beanc' found.");
constructor = x;
constructorArgs = new String[0];
-
ctx.forEachAnnotation(Beanc.class, x.inner(), y -> ! y.properties().isEmpty(),
z -> constructorArgs = StringUtils.split3(z.properties()));
+
ctx.forEachAnnotation(Beanc.class, x.inner(), y -> ! y.properties().isEmpty(),
z -> constructorArgs = Utils.split3(z.properties()));
if (!
x.hasNumParams(constructorArgs.length)) {
if
(constructorArgs.length != 0)
throw new
BeanRuntimeException(c, "Number of properties defined in '@Beanc' annotation
does not match number of parameters in constructor.");
diff --git
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/BeanPropertyMeta.java
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/BeanPropertyMeta.java
index 9575c100f..545decae0 100644
---
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/BeanPropertyMeta.java
+++
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/BeanPropertyMeta.java
@@ -191,7 +191,7 @@ public final class BeanPropertyMeta implements
Comparable<BeanPropertyMeta> {
}
lp.forEach(x -> {
if (! x.properties().isEmpty())
- properties =
split3(x.properties());
+ properties =
Utils.split3(x.properties());
addAll(bdClasses, x.dictionary());
if (! x.ro().isEmpty())
readOnly =
Boolean.valueOf(x.ro());
@@ -210,7 +210,7 @@ public final class BeanPropertyMeta implements
Comparable<BeanPropertyMeta> {
isUri |= (rawTypeMeta.isUri() ||
bc.hasAnnotation(Uri.class, getter));
lp.forEach(x -> {
if (properties != null && !
x.properties().isEmpty())
- properties =
split3(x.properties());
+ properties =
Utils.split3(x.properties());
addAll(bdClasses, x.dictionary());
if (! x.ro().isEmpty())
readOnly =
Boolean.valueOf(x.ro());
@@ -230,7 +230,7 @@ public final class BeanPropertyMeta implements
Comparable<BeanPropertyMeta> {
if (swap == null)
swap = getPropertySwap(x);
if (properties != null && !
x.properties().isEmpty())
- properties =
split3(x.properties());
+ properties =
Utils.split3(x.properties());
addAll(bdClasses, x.dictionary());
if (! x.ro().isEmpty())
readOnly =
Boolean.valueOf(x.ro());
diff --git
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/BeanSession.java
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/BeanSession.java
index 59fceaf88..3c54d72cf 100644
---
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/BeanSession.java
+++
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/BeanSession.java
@@ -720,7 +720,7 @@ public class BeanSession extends ContextSession {
else if (from.hasMutaterTo(to))
return from.mutateTo(value, to);
else
- return (T)toArray(to, new
JsonList((Object[])StringUtils.split3(value.toString())).setBeanSession(this));
+ return (T)toArray(to, new
JsonList((Object[])Utils.split3(value.toString())).setBeanSession(this));
}
// Target type is some sort of Map that needs to be
converted.
diff --git
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/MediaType.java
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/MediaType.java
index 075917fad..463d98b2a 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/MediaType.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/MediaType.java
@@ -194,7 +194,7 @@ public class MediaType implements Comparable<MediaType> {
type = (i == -1 ? x : x.substring(0, i));
subType = (i == -1 ? "*" : x.substring(i+1));
- subTypes = StringUtils.split3(subType, '+');
+ subTypes = Utils.split3(subType, '+');
subTypesSorted = Arrays.copyOf(subTypes, subTypes.length);
Arrays.sort(this.subTypesSorted);
hasSubtypeMeta = ArrayUtils.contains("*", this.subTypes);
diff --git
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/Version.java
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/Version.java
index 92d0190f1..732ae3b82 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/Version.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/Version.java
@@ -69,7 +69,7 @@ public class Version implements Comparable<Version> {
public Version(String value) {
if (isEmpty3(value))
value = "0";
- String[] sParts = split3(value, '.');
+ String[] sParts = Utils.split3(value, '.');
parts = new int[sParts.length];
for (int i = 0; i < sParts.length; i++) {
try {
diff --git
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/collections/Args.java
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/collections/Args.java
index 291c0dc84..f2b72ea4a 100644
---
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/collections/Args.java
+++
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/collections/Args.java
@@ -17,6 +17,7 @@ import static java.util.stream.Collectors.*;
import java.util.*;
import org.apache.juneau.*;
+import org.apache.juneau.common.internal.*;
/**
* Utility class to make it easier to work with command-line arguments pass in
through a
@@ -154,7 +155,7 @@ public final class Args extends JsonMap {
* @param args Arguments passed in as a raw command line.
*/
public Args(String args) {
- this(splitQuoted(args));
+ this(Utils.splitQuoted(args));
}
/**
diff --git
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/collections/JsonList.java
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/collections/JsonList.java
index b5879f653..3464f7546 100644
---
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/collections/JsonList.java
+++
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/collections/JsonList.java
@@ -128,7 +128,7 @@ public class JsonList extends LinkedList<Object> {
if (StringUtils.isEmpty3(s))
return null;
if (! StringUtils.isJsonArray(s, true))
- return new
JsonList((Object[])StringUtils.split3(s.trim(), ','));
+ return new JsonList((Object[])Utils.split3(s.trim(),
','));
return new JsonList(s);
}
diff --git
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/collections/JsonMap.java
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/collections/JsonMap.java
index c998ba304..82c549b3e 100644
---
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/collections/JsonMap.java
+++
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/collections/JsonMap.java
@@ -818,7 +818,7 @@ public class JsonMap extends LinkedHashMap<String,Object> {
else if (s instanceof Object[])
r = ArrayUtils.toStringArray(alist((Object[])s));
else
- r = StringUtils.split3(Utils.s(s));
+ r = Utils.split3(Utils.s(s));
return (r.length == 0 ? def : r);
}
diff --git
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/cp/Messages.java
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/cp/Messages.java
index f24a463b4..4ab3771c5 100644
---
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/cp/Messages.java
+++
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/cp/Messages.java
@@ -200,7 +200,7 @@ public class Messages extends ResourceBundle {
} catch (ParseException e) {
throw
asRuntimeException(e);
}
- x =
Messages.create(c).name(ms.name).baseNames(split3(ms.baseNames,
',')).locale(ms.locale).parent(x == null ? null : x.build());
+ x =
Messages.create(c).name(ms.name).baseNames(Utils.split3(ms.baseNames,
',')).locale(ms.locale).parent(x == null ? null : x.build());
} else {
x =
Messages.create(c).name(value).parent(x == null ? null : x.build());
}
diff --git
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/httppart/HttpPartSchema.java
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/httppart/HttpPartSchema.java
index a034ea993..a97e695ec 100644
---
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/httppart/HttpPartSchema.java
+++
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/httppart/HttpPartSchema.java
@@ -4045,7 +4045,7 @@ public class HttpPartSchema {
for (String[] ss : s)
if (ss != null)
for (String ss2 : ss)
- split3(ss2, x -> set.add(x));
+ Utils.split3(ss2, x -> set.add(x));
return set.isEmpty() ? null : set;
}
diff --git
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/jsonschema/JsonSchemaGenerator.java
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/jsonschema/JsonSchemaGenerator.java
index da3b31f1e..bc03d27ba 100644
---
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/jsonschema/JsonSchemaGenerator.java
+++
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/jsonschema/JsonSchemaGenerator.java
@@ -886,7 +886,7 @@ public class JsonSchemaGenerator extends
BeanTraverseContext implements JsonSche
ignoreTypes = builder.ignoreTypes == null ? emptySet() : new
TreeSet<>(builder.ignoreTypes);
Set<Pattern> ignoreTypePatterns = Utils.set();
- ignoreTypes.forEach(y -> split3(y, x ->
ignoreTypePatterns.add(Pattern.compile(x.replace(".", "\\.").replace("*",
".*")))));
+ ignoreTypes.forEach(y -> Utils.split3(y, x ->
ignoreTypePatterns.add(Pattern.compile(x.replace(".", "\\.").replace("*",
".*")))));
this.ignoreTypePatterns = ignoreTypePatterns.toArray(new
Pattern[ignoreTypePatterns.size()]);
try {
diff --git
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/jsonschema/TypeCategory.java
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/jsonschema/TypeCategory.java
index 28624a77c..f931cefa4 100644
---
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/jsonschema/TypeCategory.java
+++
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/jsonschema/TypeCategory.java
@@ -17,6 +17,8 @@ import static org.apache.juneau.common.internal.Utils.*;
import java.util.*;
+import org.apache.juneau.common.internal.*;
+
/**
* Represents possible values for JSONSCHEMA_addExamplesTo and
JSONSCHEMA_addDescriptionsTo.
*
@@ -71,7 +73,7 @@ public enum TypeCategory {
if (s == null || s.isEmpty())
return Collections.emptySet();
Set<TypeCategory> set = set();
- split3(s, x -> set.add(valueOf(x.toUpperCase())));
+ Utils.split3(s, x -> set.add(valueOf(x.toUpperCase())));
return set;
}
@@ -85,7 +87,7 @@ public enum TypeCategory {
if (s == null || s.isEmpty())
return new TypeCategory[0];
List<TypeCategory> list = list();
- split3(s, x -> list.add(valueOf(x.toUpperCase())));
+ Utils.split3(s, x -> list.add(valueOf(x.toUpperCase())));
return list.toArray(new TypeCategory[list.size()]);
}
}
\ No newline at end of file
diff --git
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/oapi/OpenApiParserSession.java
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/oapi/OpenApiParserSession.java
index 093981de7..e9df1d403 100644
---
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/oapi/OpenApiParserSession.java
+++
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/oapi/OpenApiParserSession.java
@@ -393,19 +393,19 @@ public class OpenApiParserSession extends
UonParserSession {
if (cf == MULTI)
ss = new String[]{in};
else if (cf == CSV)
- ss = split3(in, ',');
+ ss = Utils.split3(in, ',');
else if (cf == PIPES)
- ss = split3(in, '|');
+ ss = Utils.split3(in, '|');
else if (cf == SSV)
- ss = splitQuoted(in);
+ ss = Utils.splitQuoted(in);
else if (cf == TSV)
- ss = split3(in, '\t');
+ ss = Utils.split3(in, '\t');
else if (cf == HttpPartCollectionFormat.UONC)
return super.parse(partType, null, in,
type);
else if (cf == NO_COLLECTION_FORMAT) {
if (firstNonWhitespaceChar(in) == '@'
&& lastNonWhitespaceChar(in) == ')')
return super.parse(partType,
null, in, type);
- ss = split3(in, ',');
+ ss = Utils.split3(in, ',');
}
HttpPartSchema items = schema.getItems();
@@ -438,25 +438,25 @@ public class OpenApiParserSession extends
UonParserSession {
if (cf == MULTI)
ss = new String[]{in};
else if (cf == CSV)
- ss = split3(in, ',');
+ ss = Utils.split3(in, ',');
else if (cf == PIPES)
- ss = split3(in, '|');
+ ss = Utils.split3(in, '|');
else if (cf == SSV)
- ss = splitQuoted(in);
+ ss = Utils.splitQuoted(in);
else if (cf == TSV)
- ss = split3(in, '\t');
+ ss = Utils.split3(in, '\t');
else if (cf == HttpPartCollectionFormat.UONC)
return super.parse(partType, null, in,
type);
else if (cf == NO_COLLECTION_FORMAT) {
if (firstNonWhitespaceChar(in) == '@'
&& lastNonWhitespaceChar(in) == ')')
return super.parse(partType,
null, in, type);
- ss = split3(in, ',');
+ ss = Utils.split3(in, ',');
}
if (type.isBean()) {
BeanMap<T> m =
ctx.getBeanContext().newBeanMap(type.getInnerClass());
for (String s : ss) {
- String[] kv = split3(s, '=', 2);
+ String[] kv = Utils.split3(s,
'=', 2);
if (kv.length != 2)
throw new
ParseException("Invalid input {0} for part type OBJECT.", in);
String key = kv[0], value =
kv[1];
@@ -480,7 +480,7 @@ public class OpenApiParserSession extends UonParserSession {
m = JsonMap.create();
for (String s : ss) {
- String[] kv = split3(s, '=', 2);
+ String[] kv = Utils.split3(s,
'=', 2);
if (kv.length != 2)
throw new
ParseException("Invalid input {0} for part type OBJECT.", in);
String key = kv[0], value =
kv[1];
diff --git
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/objecttools/SearchArgs.java
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/objecttools/SearchArgs.java
index 9ac4040c2..1d6fd352c 100644
---
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/objecttools/SearchArgs.java
+++
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/objecttools/SearchArgs.java
@@ -66,7 +66,7 @@ public class SearchArgs {
* @param searchArgs Search arguments.
*/
public SearchArgs(String searchArgs) {
- this(alist(StringUtils.split3(searchArgs)));
+ this(alist(Utils.split3(searchArgs)));
}
/**
diff --git
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/objecttools/SortArgs.java
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/objecttools/SortArgs.java
index 8ad0e3a61..7bf2d9f8e 100644
---
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/objecttools/SortArgs.java
+++
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/objecttools/SortArgs.java
@@ -88,7 +88,7 @@ public class SortArgs {
* </ul>
*/
public SortArgs(String sortArgs) {
- this(alist(StringUtils.split3(sortArgs)));
+ this(alist(Utils.split3(sortArgs)));
}
/**
diff --git
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/objecttools/StringMatcherFactory.java
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/objecttools/StringMatcherFactory.java
index 1e24be5fb..f643ff377 100644
---
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/objecttools/StringMatcherFactory.java
+++
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/objecttools/StringMatcherFactory.java
@@ -78,7 +78,7 @@ public class StringMatcherFactory extends MatcherFactory {
List<Pattern> ands = new LinkedList<>();
List<Pattern> nots = new LinkedList<>();
- for (String s : splitQuoted(pattern, true)) {
+ for (String s : Utils.splitQuoted(pattern, true)) {
char c0 = s.charAt(0), c9 =
s.charAt(s.length()-1);
if (c0 == '/' && c9 == '/' && s.length() > 1) {
diff --git
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/objecttools/ViewArgs.java
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/objecttools/ViewArgs.java
index 2e0f3a4b6..7904cb0c8 100644
---
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/objecttools/ViewArgs.java
+++
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/objecttools/ViewArgs.java
@@ -68,7 +68,7 @@ public class ViewArgs {
* <br>Values are column names.
*/
public ViewArgs(String viewArgs) {
- this(alist(StringUtils.split3(viewArgs)));
+ this(alist(Utils.split3(viewArgs)));
}
/**
diff --git
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/svl/MultipartResolvingVar.java
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/svl/MultipartResolvingVar.java
index 6c33af184..c387892bd 100644
---
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/svl/MultipartResolvingVar.java
+++
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/svl/MultipartResolvingVar.java
@@ -14,6 +14,8 @@ package org.apache.juneau.svl;
import static org.apache.juneau.common.internal.StringUtils.*;
+import org.apache.juneau.common.internal.*;
+
/**
* Interface for the resolution of vars that can have one or more keys where
the first non-null resolution is returned.
*
@@ -47,7 +49,7 @@ public abstract class MultipartResolvingVar extends SimpleVar
{
int i = s.indexOf(',');
if (i == -1)
return resolve(session, s.trim());
- for (String s2 : split3(s)) {
+ for (String s2 : Utils.split3(s)) {
String v = resolve(session, s2);
if (v != null)
return v;
diff --git
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/svl/MultipartVar.java
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/svl/MultipartVar.java
index 0499aef30..8f7a0837a 100644
---
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/svl/MultipartVar.java
+++
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/svl/MultipartVar.java
@@ -14,6 +14,8 @@ package org.apache.juneau.svl;
import static org.apache.juneau.common.internal.StringUtils.*;
+import org.apache.juneau.common.internal.*;
+
/**
* Interface for the resolution of vars that consist of a comma-delimited list.
*
@@ -48,7 +50,7 @@ public abstract class MultipartVar extends SimpleVar {
@Override /* Var */
public String resolve(VarResolverSession session, String s) {
- String[] s2 = s.indexOf(',') == -1 ? new String[]{s.trim()} :
split3(s);
+ String[] s2 = s.indexOf(',') == -1 ? new String[]{s.trim()} :
Utils.split3(s);
return resolve(session, s2);
}
}
\ No newline at end of file
diff --git
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/svl/vars/SwitchVar.java
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/svl/vars/SwitchVar.java
index 36bfafa72..8a4b971c9 100644
---
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/svl/vars/SwitchVar.java
+++
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/svl/vars/SwitchVar.java
@@ -17,6 +17,7 @@ import static org.apache.juneau.common.internal.StringUtils.*;
import java.util.regex.*;
+import org.apache.juneau.common.internal.*;
import org.apache.juneau.svl.*;
/**
@@ -70,7 +71,7 @@ public class SwitchVar extends MultipartVar {
for (int i = 1; i < args.length; i++) {
String pattern = args[i];
- String[] parts = split3(pattern, ':', 2);
+ String[] parts = Utils.split3(pattern, ':', 2);
assertArg(parts.length >= 2, "Invalid arguments passed
to $SW var. Each case statement must contains 'pattern:value'.");
Pattern p = Pattern.compile(parts[0].replace("*",
".*").replace("?", "."));
diff --git
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/utils/ReflectionMap.java
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/utils/ReflectionMap.java
index 25a31cd6e..b8844aa92 100644
---
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/utils/ReflectionMap.java
+++
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/utils/ReflectionMap.java
@@ -617,7 +617,7 @@ public class ReflectionMap<V> {
MethodEntry(String name, V value) {
int i = name.indexOf('(');
- this.args = i == -1 ? null :
splitMethodArgs(name.substring(i+1, name.length()-1));
+ this.args = i == -1 ? null :
Utils.splitMethodArgs(name.substring(i+1, name.length()-1));
if (args != null) {
for (int j = 0; j < args.length; j++) {
@@ -678,7 +678,7 @@ public class ReflectionMap<V> {
ConstructorEntry(String name, V value) {
int i = name.indexOf('(');
- this.args = split3(name.substring(i+1,
name.length()-1));
+ this.args = Utils.split3(name.substring(i+1,
name.length()-1));
name = name.substring(0, i).trim();
this.simpleClassName = simpleClassName(name);
this.fullClassName = name;
diff --git
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/xml/Namespace.java
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/xml/Namespace.java
index 208ca8ec4..cfd7417de 100644
---
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/xml/Namespace.java
+++
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/xml/Namespace.java
@@ -127,7 +127,7 @@ public final class Namespace {
}
if (o instanceof CharSequence) {
- String[] ss = StringUtils.split3(o.toString());
+ String[] ss = Utils.split3(o.toString());
Namespace[] n = new Namespace[ss.length];
for (int i = 0; i < ss.length; i++)
n[i] = create(ss[i]);
diff --git
a/juneau-rest/juneau-rest-common/src/main/java/org/apache/juneau/http/header/BasicCsvHeader.java
b/juneau-rest/juneau-rest-common/src/main/java/org/apache/juneau/http/header/BasicCsvHeader.java
index d5d0a1bbf..fc3dc29c4 100644
---
a/juneau-rest/juneau-rest-common/src/main/java/org/apache/juneau/http/header/BasicCsvHeader.java
+++
b/juneau-rest/juneau-rest-common/src/main/java/org/apache/juneau/http/header/BasicCsvHeader.java
@@ -109,7 +109,7 @@ public class BasicCsvHeader extends BasicHeader {
*/
public BasicCsvHeader(String name, String value) {
super(name, value);
- this.value = split3(value);
+ this.value = Utils.split3(value);
this.supplier = null;
}
diff --git
a/juneau-rest/juneau-rest-common/src/main/java/org/apache/juneau/http/header/EntityTags.java
b/juneau-rest/juneau-rest-common/src/main/java/org/apache/juneau/http/header/EntityTags.java
index 4b5ee667b..b4857455c 100644
---
a/juneau-rest/juneau-rest-common/src/main/java/org/apache/juneau/http/header/EntityTags.java
+++
b/juneau-rest/juneau-rest-common/src/main/java/org/apache/juneau/http/header/EntityTags.java
@@ -83,7 +83,7 @@ public class EntityTags {
private EntityTag[] parse(String value) {
if (value == null)
return null;
- String[] s = split3(value);
+ String[] s = Utils.split3(value);
EntityTag[] v = new EntityTag[s.length];
for (int i = 0; i < s.length; i++)
v[i] = EntityTag.of(s[i]);
diff --git
a/juneau-rest/juneau-rest-common/src/main/java/org/apache/juneau/http/header/Thrown.java
b/juneau-rest/juneau-rest-common/src/main/java/org/apache/juneau/http/header/Thrown.java
index ef29bcbdf..ffadb9bb6 100644
---
a/juneau-rest/juneau-rest-common/src/main/java/org/apache/juneau/http/header/Thrown.java
+++
b/juneau-rest/juneau-rest-common/src/main/java/org/apache/juneau/http/header/Thrown.java
@@ -109,7 +109,7 @@ public class Thrown extends BasicCsvHeader {
public Thrown(String value) {
super(NAME, value);
List<Part> l = Utils.list();
- split3(value, x -> l.add(new Part(x)));
+ Utils.split3(value, x -> l.add(new Part(x)));
this.value = value == null ? null : u(l);
}
diff --git
a/juneau-rest/juneau-rest-common/src/main/java/org/apache/juneau/http/part/BasicCsvArrayPart.java
b/juneau-rest/juneau-rest-common/src/main/java/org/apache/juneau/http/part/BasicCsvArrayPart.java
index 6fe4dd295..a08775348 100644
---
a/juneau-rest/juneau-rest-common/src/main/java/org/apache/juneau/http/part/BasicCsvArrayPart.java
+++
b/juneau-rest/juneau-rest-common/src/main/java/org/apache/juneau/http/part/BasicCsvArrayPart.java
@@ -111,7 +111,7 @@ public class BasicCsvArrayPart extends BasicPart {
*/
public BasicCsvArrayPart(String name, String value) {
super(name, value);
- this.value = split3(value);
+ this.value = Utils.split3(value);
this.supplier = null;
this.stringValue = value;
}
diff --git
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestContext.java
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestContext.java
index 68bf53d1c..5e01f3641 100644
---
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestContext.java
+++
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestContext.java
@@ -5569,7 +5569,7 @@ public class RestContext extends Context {
return v == null ? false : super.contains(v);
}
};
- split3(value, x -> s.add(x));
+ Utils.split3(value, x -> s.add(x));
return u(s);
}
diff --git
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/debug/BasicDebugEnablement.java
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/debug/BasicDebugEnablement.java
index 850add31b..99b51f745 100644
---
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/debug/BasicDebugEnablement.java
+++
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/debug/BasicDebugEnablement.java
@@ -18,6 +18,7 @@ import static
org.apache.juneau.rest.annotation.RestOpAnnotation.*;
import java.util.*;
import org.apache.juneau.*;
+import org.apache.juneau.common.internal.*;
import org.apache.juneau.cp.*;
import org.apache.juneau.reflect.*;
import org.apache.juneau.rest.*;
@@ -99,7 +100,7 @@ public class BasicDebugEnablement extends DebugEnablement {
x -> true,
x -> {
String x2 = varResolver.resolve(x.debugOn());
- for (Map.Entry<String,String> e : splitMap(x2,
true).entrySet()) {
+ for (Map.Entry<String,String> e :
Utils.splitMap(x2, true).entrySet()) {
String k = e.getKey(), v = e.getValue();
if (v.isEmpty())
v = "ALWAYS";
diff --git
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/swagger/BasicSwaggerProviderSession.java
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/swagger/BasicSwaggerProviderSession.java
index 9730ef85c..9c86e9821 100644
---
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/swagger/BasicSwaggerProviderSession.java
+++
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/swagger/BasicSwaggerProviderSession.java
@@ -1128,7 +1128,7 @@ public class BasicSwaggerProviderSession {
return null;
Set<String> set = set();
for (String s : ss)
- split3(s, x -> set.add(x));
+ Utils.split3(s, x -> set.add(x));
return set.isEmpty() ? null : set;
}
diff --git
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/util/UrlPath.java
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/util/UrlPath.java
index 823b23930..31227d4b0 100644
---
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/util/UrlPath.java
+++
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/util/UrlPath.java
@@ -48,7 +48,7 @@ public class UrlPath {
*/
UrlPath(String path) {
this.path = path;
- parts = path == null ? new String[0] :
split3(path.substring(1), '/');
+ parts = path == null ? new String[0] :
Utils.split3(path.substring(1), '/');
for (int i = 0; i < parts.length; i++)
parts[i] = urlDecode(parts[i]);
}
diff --git
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/vars/SerializedRequestAttrVar.java
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/vars/SerializedRequestAttrVar.java
index 98a153a25..ece285d5d 100644
---
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/vars/SerializedRequestAttrVar.java
+++
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/vars/SerializedRequestAttrVar.java
@@ -16,6 +16,7 @@ import static org.apache.juneau.common.internal.StringUtils.*;
import java.io.*;
+import org.apache.juneau.common.internal.*;
import org.apache.juneau.http.response.*;
import org.apache.juneau.rest.*;
import org.apache.juneau.serializer.*;
@@ -55,7 +56,7 @@ public class SerializedRequestAttrVar extends StreamedVar {
int i = key.indexOf(',');
if (i == -1)
throw new IllegalArgumentException("Invalid format for
$SA var. Must be of the format $SA{contentType,key[,defaultValue]}");
- String[] s2 = split3(key);
+ String[] s2 = Utils.split3(key);
RestRequest req =
session.getBean(RestRequest.class).orElseThrow(InternalServerError::new);
Object o = req.getAttribute(key).orElse(key);
Serializer s =
req.getOpContext().getSerializers().getSerializer(s2[0]);
diff --git a/juneau-utest/src/test/java/org/apache/juneau/TestUtils.java
b/juneau-utest/src/test/java/org/apache/juneau/TestUtils.java
index e48b1edf4..40b0c3845 100644
--- a/juneau-utest/src/test/java/org/apache/juneau/TestUtils.java
+++ b/juneau-utest/src/test/java/org/apache/juneau/TestUtils.java
@@ -121,7 +121,7 @@ public class TestUtils extends Utils {
public static void assertContainsAll(String expected, Object actual) {
var a2 = r(actual);
- for (var e : StringUtils.split3(expected))
+ for (var e : Utils.split3(expected))
assertTrue(a2.contains(e), fs("String did not contain
expected substring. expected={0}, actual={1}", e, a2));
}
@@ -138,7 +138,7 @@ public class TestUtils extends Utils {
*/
public static void assertArray(Object array, Object...expected) {
if (expected.length == 1 && expected[0] instanceof String &&
s(expected[0]).contains(","))
- expected = s(expected[0]).charAt(0) == '>' ? new
String[]{s(expected[0]).substring(1)} : StringUtils.split3(s(expected[0]));
+ expected = s(expected[0]).charAt(0) == '>' ? new
String[]{s(expected[0]).substring(1)} : Utils.split3(s(expected[0]));
if (Array.getLength(array) != expected.length)
fail(fs("Wrong array length. expected={0},
actual={1}", expected.length, Array.getLength(array)));
for (var i = 0; i < expected.length; i++) {
@@ -161,7 +161,7 @@ public class TestUtils extends Utils {
*/
public static void assertList(List<?> list, Object...expected) {
if (expected.length == 1 && expected[0] instanceof String &&
s(expected[0]).contains(","))
- expected = s(expected[0]).charAt(0) == '>' ? new
String[]{s(expected[0]).substring(1)} : StringUtils.split3(s(expected[0]));
+ expected = s(expected[0]).charAt(0) == '>' ? new
String[]{s(expected[0]).substring(1)} : Utils.split3(s(expected[0]));
if (list.size() != expected.length)
fail(fs("Wrong list length. expected={0}, actual={1}",
expected.length, list.size()));
for (var i = 0; i < expected.length; i++) {
@@ -275,7 +275,7 @@ public class TestUtils extends Utils {
*/
public static void assertBean(Object o, String fields, String value) {
if (o == null) throw new NullPointerException("Bean was null");
- assertEquals(value, splitNested(fields).stream().map(x ->
TestUtils.getReadableEntry(o, x)).collect(joining(",")));
+ assertEquals(value, Utils.splitNested(fields).stream().map(x ->
TestUtils.getReadableEntry(o, x)).collect(joining(",")));
}
/**
@@ -302,7 +302,7 @@ public class TestUtils extends Utils {
public static void assertBeans(Collection l, String fields,
Object...values) {
assertEquals(values.length, l.size(), ()->"Expected
"+values.length+" rows but had actual " + l.size());
var r = 0;
- var f = splitNested(fields);
+ var f = Utils.splitNested(fields);
for (var o : l) {
var actual = f.stream().map(x ->
TestUtils.getReadableEntry(o, x)).collect(joining(","));
var r2 = r+1;
@@ -328,7 +328,7 @@ public class TestUtils extends Utils {
private static String getReadableEntry(Object o, String name) {
var i = name.indexOf("{");
var pn = i == -1 ? name : name.substring(0, i);
- var spn = i == -1 ? null : splitNestedInner(name);
+ var spn = i == -1 ? null : Utils.splitNestedInner(name);
var e = TestUtils.getEntry(o, pn);
if (spn == null) return r(e);
return spn.stream().map(x -> getReadableEntry(e,
x)).collect(joining(","));
diff --git
a/juneau-utest/src/test/java/org/apache/juneau/utils/StringUtilsTest.java
b/juneau-utest/src/test/java/org/apache/juneau/utils/StringUtilsTest.java
index 45806d6c3..5ee3b4c35 100755
--- a/juneau-utest/src/test/java/org/apache/juneau/utils/StringUtilsTest.java
+++ b/juneau-utest/src/test/java/org/apache/juneau/utils/StringUtilsTest.java
@@ -397,17 +397,17 @@ class StringUtilsTest extends SimpleTestBase {
// split(String,char)
//====================================================================================================
@Test void a07_split() {
- assertNull(StringUtils.split3((String)null));
- assertArray(StringUtils.split3(""));
- assertArray(StringUtils.split3("1"), "1");
- assertArray(StringUtils.split3("1,2"), "1", "2");
- assertArray(StringUtils.split3("1\\,2"), ">1,2");
- assertArray(StringUtils.split3("1\\\\,2"), "1\\", "2");
- assertArray(StringUtils.split3("1\\\\\\,2"), ">1\\,2");
- assertArray(StringUtils.split3("1,2\\"), "1", "2\\");
- assertArray(StringUtils.split3("1,2\\\\"), "1", "2\\");
- assertArray(StringUtils.split3("1,2\\,"), "1", "2,");
- assertArray(StringUtils.split3("1,2\\\\,"), "1", "2\\", "");
+ assertNull(Utils.split3((String)null));
+ assertArray(Utils.split3(""));
+ assertArray(Utils.split3("1"), "1");
+ assertArray(Utils.split3("1,2"), "1", "2");
+ assertArray(Utils.split3("1\\,2"), ">1,2");
+ assertArray(Utils.split3("1\\\\,2"), "1\\", "2");
+ assertArray(Utils.split3("1\\\\\\,2"), ">1\\,2");
+ assertArray(Utils.split3("1,2\\"), "1", "2\\");
+ assertArray(Utils.split3("1,2\\\\"), "1", "2\\");
+ assertArray(Utils.split3("1,2\\,"), "1", "2,");
+ assertArray(Utils.split3("1,2\\\\,"), "1", "2\\", "");
}
@Test void a08_split2() {
@@ -426,7 +426,7 @@ class StringUtilsTest extends SimpleTestBase {
private List<String> split2test(String s) {
List<String> l = TestUtils.list();
- split3(s, l::add);
+ Utils.split3(s, l::add);
return l;
}
@@ -434,13 +434,13 @@ class StringUtilsTest extends SimpleTestBase {
// split(String,char,int)
//====================================================================================================
@Test void a09_splitWithLimit() {
- TestUtils.assertString("[boo,and,foo]", split3("boo:and:foo",
':', 10));
- TestUtils.assertString("[boo,and:foo]", split3("boo:and:foo",
':', 2));
- TestUtils.assertString("[boo:and:foo]", split3("boo:and:foo",
':', 1));
- TestUtils.assertString("[boo:and:foo]", split3("boo:and:foo",
':', 0));
- TestUtils.assertString("[boo:and:foo]", split3("boo:and:foo",
':', -1));
- TestUtils.assertString("[boo,and,foo]", split3("boo : and :
foo", ':', 10));
- TestUtils.assertString("[boo,and : foo]", split3("boo : and :
foo", ':', 2));
+ TestUtils.assertString("[boo,and,foo]",
Utils.split3("boo:and:foo", ':', 10));
+ TestUtils.assertString("[boo,and:foo]",
Utils.split3("boo:and:foo", ':', 2));
+ TestUtils.assertString("[boo:and:foo]",
Utils.split3("boo:and:foo", ':', 1));
+ TestUtils.assertString("[boo:and:foo]",
Utils.split3("boo:and:foo", ':', 0));
+ TestUtils.assertString("[boo:and:foo]",
Utils.split3("boo:and:foo", ':', -1));
+ TestUtils.assertString("[boo,and,foo]", Utils.split3("boo : and
: foo", ':', 10));
+ TestUtils.assertString("[boo,and : foo]", Utils.split3("boo :
and : foo", ':', 2));
}
//====================================================================================================
@@ -565,16 +565,16 @@ class StringUtilsTest extends SimpleTestBase {
// parseMap(String,char,char,boolean)
//====================================================================================================
@Test void a19_splitMap() {
- TestUtils.assertString("{a=1}", splitMap("a=1", true));
- TestUtils.assertString("{a=1,b=2}", splitMap("a=1,b=2", true));
- TestUtils.assertString("{a=1,b=2}", splitMap(" a = 1 , b = 2 ",
true));
- TestUtils.assertString("{ a = 1 , b = 2 }", splitMap(" a = 1 ,
b = 2 ", false));
- TestUtils.assertString("{a=}", splitMap("a", true));
- TestUtils.assertString("{a=,b=}", splitMap("a,b", true));
- TestUtils.assertString("{a=1,b=}", splitMap("a=1,b", true));
- TestUtils.assertString("{a=,b=1}", splitMap("a,b=1", true));
- TestUtils.assertString("{a==1}", splitMap("a\\==1", true));
- TestUtils.assertString("{a\\=1}", splitMap("a\\\\=1", true));
+ TestUtils.assertString("{a=1}", Utils.splitMap("a=1", true));
+ TestUtils.assertString("{a=1,b=2}", Utils.splitMap("a=1,b=2",
true));
+ TestUtils.assertString("{a=1,b=2}", Utils.splitMap(" a = 1 , b
= 2 ", true));
+ TestUtils.assertString("{ a = 1 , b = 2 }", Utils.splitMap(" a
= 1 , b = 2 ", false));
+ TestUtils.assertString("{a=}", Utils.splitMap("a", true));
+ TestUtils.assertString("{a=,b=}", Utils.splitMap("a,b", true));
+ TestUtils.assertString("{a=1,b=}", Utils.splitMap("a=1,b",
true));
+ TestUtils.assertString("{a=,b=1}", Utils.splitMap("a,b=1",
true));
+ TestUtils.assertString("{a==1}", Utils.splitMap("a\\==1",
true));
+ TestUtils.assertString("{a\\=1}", Utils.splitMap("a\\\\=1",
true));
}
//====================================================================================================
@@ -607,25 +607,25 @@ class StringUtilsTest extends SimpleTestBase {
// splitQuoted(String)
//====================================================================================================
@Test void a22_splitQuoted() {
- assertNull(splitQuoted(null));
- assertArray(splitQuoted(""));
- assertArray(splitQuoted(" \t "));
- assertArray(splitQuoted("foo"), "foo");
- assertArray(splitQuoted("foo bar baz"), "foo", "bar", "baz");
- assertArray(splitQuoted("'foo'"), "foo");
- assertArray(splitQuoted(" ' foo ' "), " foo ");
- assertArray(splitQuoted("'foo' 'bar'"), "foo", "bar");
- assertArray(splitQuoted("\"foo\""), "foo");
- assertArray(splitQuoted(" \" foo \" "), " foo ");
- assertArray(splitQuoted("\"foo\" \"bar\""), "foo", "bar");
- assertArray(splitQuoted("'foo\\'bar'"), "foo'bar");
- assertArray(splitQuoted("'foo\\\"bar'"), "foo\"bar");
- assertArray(splitQuoted("'\\'foo\\'bar\\''"), "'foo'bar'");
- assertArray(splitQuoted("'\\\"foo\\\"bar\\\"'"),
"\"foo\"bar\"");
- assertArray(splitQuoted("'\\'foo\\''"), "'foo'");
- assertArray(splitQuoted("\"\\\"foo\\\"\""), "\"foo\"");
- assertArray(splitQuoted("'\"foo\"'"), "\"foo\"");
- assertArray(splitQuoted("\"'foo'\""), "'foo'");
+ assertNull(Utils.splitQuoted(null));
+ assertArray(Utils.splitQuoted(""));
+ assertArray(Utils.splitQuoted(" \t "));
+ assertArray(Utils.splitQuoted("foo"), "foo");
+ assertArray(Utils.splitQuoted("foo bar baz"), "foo", "bar",
"baz");
+ assertArray(Utils.splitQuoted("'foo'"), "foo");
+ assertArray(Utils.splitQuoted(" ' foo ' "), " foo ");
+ assertArray(Utils.splitQuoted("'foo' 'bar'"), "foo", "bar");
+ assertArray(Utils.splitQuoted("\"foo\""), "foo");
+ assertArray(Utils.splitQuoted(" \" foo \" "), " foo ");
+ assertArray(Utils.splitQuoted("\"foo\" \"bar\""), "foo", "bar");
+ assertArray(Utils.splitQuoted("'foo\\'bar'"), "foo'bar");
+ assertArray(Utils.splitQuoted("'foo\\\"bar'"), "foo\"bar");
+ assertArray(Utils.splitQuoted("'\\'foo\\'bar\\''"),
"'foo'bar'");
+ assertArray(Utils.splitQuoted("'\\\"foo\\\"bar\\\"'"),
"\"foo\"bar\"");
+ assertArray(Utils.splitQuoted("'\\'foo\\''"), "'foo'");
+ assertArray(Utils.splitQuoted("\"\\\"foo\\\"\""), "\"foo\"");
+ assertArray(Utils.splitQuoted("'\"foo\"'"), "\"foo\"");
+ assertArray(Utils.splitQuoted("\"'foo'\""), "'foo'");
}
//====================================================================================================
@@ -813,11 +813,11 @@ class StringUtilsTest extends SimpleTestBase {
// splitMethodArgs(String)
//====================================================================================================
@Test void a33_splitMethodArgs() {
- assertArray(splitMethodArgs("java.lang.String"),
"java.lang.String");
-
assertArray(splitMethodArgs("java.lang.String,java.lang.Integer"),
"java.lang.String", "java.lang.Integer");
- assertArray(splitMethodArgs("x,y"), "x","y");
- assertArray(splitMethodArgs("x,y<a,b>,z"), "x", "y<a,b>", "z");
- assertArray(splitMethodArgs("x,y<a<b,c>,d<e,f>>,z"), "x",
"y<a<b,c>,d<e,f>>", "z");
+ assertArray(Utils.splitMethodArgs("java.lang.String"),
"java.lang.String");
+
assertArray(Utils.splitMethodArgs("java.lang.String,java.lang.Integer"),
"java.lang.String", "java.lang.Integer");
+ assertArray(Utils.splitMethodArgs("x,y"), "x","y");
+ assertArray(Utils.splitMethodArgs("x,y<a,b>,z"), "x", "y<a,b>",
"z");
+ assertArray(Utils.splitMethodArgs("x,y<a<b,c>,d<e,f>>,z"), "x",
"y<a<b,c>,d<e,f>>", "z");
}
//====================================================================================================
@@ -866,27 +866,27 @@ class StringUtilsTest extends SimpleTestBase {
// splitNested(String)
//====================================================================================================
@Test void a37_splitNested() {
- assertNull(splitNested(null));
- assertList(splitNested(""));
- assertList(splitNested("a"), "a");
- assertList(splitNested("a,b,c"), "a", "b", "c");
- assertList(splitNested("a{b,c},d"), "a{b,c}", "d");
- assertList(splitNested("a,b{c,d}"), "a", "b{c,d}");
- assertList(splitNested("a,b{c,d{e,f}}"), "a", "b{c,d{e,f}}");
- assertList(splitNested("a { b , c } , d "), "a { b , c }", "d");
- assertList(splitNested("a\\,b"), ">a,b");
- assertList(splitNested("a\\\\,b"), "a\\", "b");
+ assertNull(Utils.splitNested(null));
+ assertList(Utils.splitNested(""));
+ assertList(Utils.splitNested("a"), "a");
+ assertList(Utils.splitNested("a,b,c"), "a", "b", "c");
+ assertList(Utils.splitNested("a{b,c},d"), "a{b,c}", "d");
+ assertList(Utils.splitNested("a,b{c,d}"), "a", "b{c,d}");
+ assertList(Utils.splitNested("a,b{c,d{e,f}}"), "a",
"b{c,d{e,f}}");
+ assertList(Utils.splitNested("a { b , c } , d "), "a { b , c
}", "d");
+ assertList(Utils.splitNested("a\\,b"), ">a,b");
+ assertList(Utils.splitNested("a\\\\,b"), "a\\", "b");
}
//====================================================================================================
// splitNestedInner(String)
//====================================================================================================
@Test void a38_splitNestedInner() {
- assertThrowsWithMessage(IllegalArgumentException.class, "String
was null.", ()->splitNestedInner(null));
- assertThrowsWithMessage(IllegalArgumentException.class, "String
was empty.", ()->splitNestedInner(""));
- assertList(splitNestedInner("a{b}"), "b");
- assertList(splitNestedInner(" a { b } "), "b");
- assertList(splitNestedInner("a{b,c}"), "b", "c");
- assertList(splitNestedInner("a{b{c,d},e{f,g}}"), "b{c,d}",
"e{f,g}");
+ assertThrowsWithMessage(IllegalArgumentException.class, "String
was null.", ()->Utils.splitNestedInner(null));
+ assertThrowsWithMessage(IllegalArgumentException.class, "String
was empty.", ()->Utils.splitNestedInner(""));
+ assertList(Utils.splitNestedInner("a{b}"), "b");
+ assertList(Utils.splitNestedInner(" a { b } "), "b");
+ assertList(Utils.splitNestedInner("a{b,c}"), "b", "c");
+ assertList(Utils.splitNestedInner("a{b{c,d},e{f,g}}"),
"b{c,d}", "e{f,g}");
}
}
\ No newline at end of file