Skip to content

Commit 8197702

Browse files
authored
Further reduce usages of StringUtils (#9044)
* Remove usages of StringUtils#containsIgnoreCase Signed-off-by: Bob Du <[email protected]> * Remove usages of StringUtils#removeStart StringUtils#removeEnd Signed-off-by: Bob Du <[email protected]> * Remove usages of StringUtils#defaultString Signed-off-by: Bob Du <[email protected]> * Remove usages of StringUtils#defaultIfBlank Signed-off-by: Bob Du <[email protected]> * Remove usages of StringUtils#isAlphanumeric Signed-off-by: Bob Du <[email protected]> * Remove usages of StringUtils.EMPTY Signed-off-by: Bob Du <[email protected]> * Remove usages of StringUtils#split Signed-off-by: Bob Du <[email protected]> * Remove usages of StringUtils#startsWithIgnoreCase Signed-off-by: Bob Du <[email protected]> * Remove usages of StringUtils#countMatches Signed-off-by: Bob Du <[email protected]> * Remove usages of StringUtils#endsWithAny Signed-off-by: Bob Du <[email protected]> * fix spotbugs warning Signed-off-by: Bob Du <[email protected]> * Use Objects.toString Signed-off-by: Bob Du <[email protected]> * revert unrelated change Signed-off-by: Bob Du <[email protected]> --------- Signed-off-by: Bob Du <[email protected]>
1 parent e914bb6 commit 8197702

File tree

17 files changed

+53
-43
lines changed

17 files changed

+53
-43
lines changed

cli/src/main/java/hudson/cli/CLI.java

+1-2
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,6 @@
6161
import javax.net.ssl.HttpsURLConnection;
6262
import javax.net.ssl.SSLContext;
6363
import javax.net.ssl.TrustManager;
64-
import org.apache.commons.lang.StringUtils;
6564
import org.glassfish.tyrus.client.ClientManager;
6665
import org.glassfish.tyrus.client.ClientProperties;
6766
import org.glassfish.tyrus.client.SslEngineConfigurator;
@@ -246,7 +245,7 @@ public static int _main(String[] _args) throws Exception {
246245
if (auth == null && bearer == null) {
247246
// -auth option not set
248247
if ((userIdEnv != null && !userIdEnv.isBlank()) && (tokenEnv != null && !tokenEnv.isBlank())) {
249-
auth = StringUtils.defaultString(userIdEnv).concat(":").concat(StringUtils.defaultString(tokenEnv));
248+
auth = userIdEnv.concat(":").concat(tokenEnv);
250249
} else if ((userIdEnv != null && !userIdEnv.isBlank()) || (tokenEnv != null && !tokenEnv.isBlank())) {
251250
printUsage(Messages.CLI_BadAuth());
252251
return -1;

core/src/main/java/hudson/Functions.java

+1-2
Original file line numberDiff line numberDiff line change
@@ -163,7 +163,6 @@
163163
import org.apache.commons.jelly.XMLOutput;
164164
import org.apache.commons.jexl.parser.ASTSizeFunction;
165165
import org.apache.commons.jexl.util.Introspector;
166-
import org.apache.commons.lang.StringUtils;
167166
import org.jenkins.ui.icon.Icon;
168167
import org.jenkins.ui.icon.IconSet;
169168
import org.jvnet.tiger_types.Types;
@@ -2415,7 +2414,7 @@ public static Icon tryGetIcon(String iconGuess) {
24152414
}
24162415

24172416
private static @NonNull String filterIconNameClasses(@NonNull String classNames) {
2418-
return Arrays.stream(StringUtils.split(classNames, ' '))
2417+
return Arrays.stream(classNames.split(" "))
24192418
.filter(className -> className.startsWith("icon-"))
24202419
.collect(Collectors.joining(" "));
24212420
}

core/src/main/java/hudson/PluginManager.java

+5-6
Original file line numberDiff line numberDiff line change
@@ -145,7 +145,6 @@
145145
import org.apache.commons.io.FileUtils;
146146
import org.apache.commons.io.FilenameUtils;
147147
import org.apache.commons.io.IOUtils;
148-
import org.apache.commons.lang.StringUtils;
149148
import org.apache.commons.logging.LogFactory;
150149
import org.jenkinsci.Symbol;
151150
import org.jvnet.hudson.reactor.Executable;
@@ -1436,13 +1435,13 @@ public HttpResponse doPluginsSearch(@QueryParameter String query, @QueryParamete
14361435
if (query == null || query.isBlank()) {
14371436
return true;
14381437
}
1439-
return StringUtils.containsIgnoreCase(plugin.name, query) ||
1440-
StringUtils.containsIgnoreCase(plugin.title, query) ||
1441-
StringUtils.containsIgnoreCase(plugin.excerpt, query) ||
1438+
return (plugin.name != null && plugin.name.toLowerCase().contains(query.toLowerCase())) ||
1439+
(plugin.title != null && plugin.title.toLowerCase().contains(query.toLowerCase())) ||
1440+
(plugin.excerpt != null && plugin.excerpt.toLowerCase().contains(query.toLowerCase())) ||
14421441
plugin.hasCategory(query) ||
14431442
plugin.getCategoriesStream()
14441443
.map(UpdateCenter::getCategoryDisplayName)
1445-
.anyMatch(category -> StringUtils.containsIgnoreCase(category, query)) ||
1444+
.anyMatch(category -> category != null && category.toLowerCase().contains(query.toLowerCase())) ||
14461445
plugin.hasWarnings() && query.equalsIgnoreCase("warning:");
14471446
})
14481447
.limit(Math.max(limit - plugins.size(), 1))
@@ -1472,7 +1471,7 @@ public HttpResponse doPluginsSearch(@QueryParameter String query, @QueryParamete
14721471
jsonObject.put("title", plugin.title);
14731472
jsonObject.put("displayName", plugin.getDisplayName());
14741473
if (plugin.wiki == null || !(plugin.wiki.startsWith("https://") || plugin.wiki.startsWith("http://"))) {
1475-
jsonObject.put("wiki", StringUtils.EMPTY);
1474+
jsonObject.put("wiki", "");
14761475
} else {
14771476
jsonObject.put("wiki", plugin.wiki);
14781477
}

core/src/main/java/hudson/PluginWrapper.java

+6-2
Original file line numberDiff line numberDiff line change
@@ -73,7 +73,6 @@
7373
import jenkins.plugins.DetachedPluginsUtil;
7474
import jenkins.security.UpdateSiteWarningsMonitor;
7575
import jenkins.util.URLClassLoader2;
76-
import org.apache.commons.lang.StringUtils;
7776
import org.apache.commons.logging.LogFactory;
7877
import org.kohsuke.accmod.Restricted;
7978
import org.kohsuke.accmod.restrictions.Beta;
@@ -497,7 +496,12 @@ public PluginWrapper(PluginManager parent, File archive, Manifest manifest, URL
497496

498497
@Override
499498
public String getDisplayName() {
500-
return StringUtils.removeStart(getLongName(), "Jenkins ");
499+
String displayName = getLongName();
500+
String removePrefix = "Jenkins ";
501+
if (displayName != null && displayName.startsWith(removePrefix)) {
502+
return displayName.substring(removePrefix.length());
503+
}
504+
return displayName;
501505
}
502506

503507
public Api getApi() {

core/src/main/java/hudson/cli/CLIAction.java

+11-2
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,6 @@
5252
import jenkins.util.SystemProperties;
5353
import jenkins.websocket.WebSocketSession;
5454
import jenkins.websocket.WebSockets;
55-
import org.apache.commons.lang.StringUtils;
5655
import org.jenkinsci.Symbol;
5756
import org.kohsuke.accmod.Restricted;
5857
import org.kohsuke.accmod.restrictions.NoExternalUse;
@@ -128,7 +127,17 @@ public HttpResponse doWs(StaplerRequest req) {
128127
}
129128
if (ALLOW_WEBSOCKET == null) {
130129
final String actualOrigin = req.getHeader("Origin");
131-
final String expectedOrigin = StringUtils.removeEnd(StringUtils.removeEnd(Jenkins.get().getRootUrlFromRequest(), "/"), req.getContextPath());
130+
131+
String o = Jenkins.get().getRootUrlFromRequest();
132+
String removeSuffix1 = "/";
133+
if (o.endsWith(removeSuffix1)) {
134+
o = o.substring(0, o.length() - removeSuffix1.length());
135+
}
136+
String removeSuffix2 = req.getContextPath();
137+
if (o.endsWith(removeSuffix2)) {
138+
o = o.substring(0, o.length() - removeSuffix2.length());
139+
}
140+
final String expectedOrigin = o;
132141

133142
if (actualOrigin == null || !actualOrigin.equals(expectedOrigin)) {
134143
LOGGER.log(Level.FINE, () -> "Rejecting origin: " + actualOrigin + "; expected was from request: " + expectedOrigin);

core/src/main/java/hudson/model/AutoCompletionCandidates.java

+1-2
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,6 @@
3434
import java.util.List;
3535
import javax.servlet.ServletException;
3636
import jenkins.model.Jenkins;
37-
import org.apache.commons.lang.StringUtils;
3837
import org.kohsuke.stapler.HttpResponse;
3938
import org.kohsuke.stapler.StaplerRequest;
4039
import org.kohsuke.stapler.StaplerResponse;
@@ -173,6 +172,6 @@ private String contextualNameOf(Item i) {
173172
}
174173

175174
private static boolean startsWithImpl(String str, String prefix, boolean ignoreCase) {
176-
return ignoreCase ? StringUtils.startsWithIgnoreCase(str, prefix) : str.startsWith(prefix);
175+
return ignoreCase ? str.toLowerCase().startsWith(prefix.toLowerCase()) : str.startsWith(prefix);
177176
}
178177
}

core/src/main/java/hudson/model/Fingerprint.java

+2-3
Original file line numberDiff line numberDiff line change
@@ -67,7 +67,6 @@
6767
import jenkins.model.FingerprintFacet;
6868
import jenkins.model.Jenkins;
6969
import jenkins.model.TransientFingerprintFacetFactory;
70-
import org.apache.commons.lang.StringUtils;
7170
import org.kohsuke.stapler.export.Exported;
7271
import org.kohsuke.stapler.export.ExportedBean;
7372
import org.springframework.security.access.AccessDeniedException;
@@ -681,7 +680,7 @@ public static RangeSet fromString(String list, boolean skipError) {
681680
}
682681

683682
String[] items = Util.tokenize(list, ",");
684-
if (items.length > 1 && items.length <= StringUtils.countMatches(list, ",")) {
683+
if (items.length > 1 && items.length <= list.chars().filter(c -> c == ',').count()) {
685684
if (!skipError) {
686685
throw new IllegalArgumentException(
687686
String.format("Unable to parse '%s', expected correct notation M,N or M-N", list));
@@ -704,7 +703,7 @@ public static RangeSet fromString(String list, boolean skipError) {
704703
}
705704

706705
if (s.contains("-")) {
707-
if (StringUtils.countMatches(s, "-") > 1) {
706+
if (s.chars().filter(c -> c == '-').count() > 1) {
708707
if (!skipError) {
709708
throw new IllegalArgumentException(String.format(
710709
"Unable to parse '%s', expected correct notation M,N or M-N", list));

core/src/main/java/hudson/model/Slave.java

+2-2
Original file line numberDiff line numberDiff line change
@@ -63,6 +63,7 @@
6363
import java.util.Collection;
6464
import java.util.Collections;
6565
import java.util.List;
66+
import java.util.Objects;
6667
import java.util.Set;
6768
import java.util.jar.JarFile;
6869
import java.util.jar.Manifest;
@@ -73,7 +74,6 @@
7374
import jenkins.security.MasterToSlaveCallable;
7475
import jenkins.slaves.WorkspaceLocator;
7576
import jenkins.util.SystemProperties;
76-
import org.apache.commons.lang.StringUtils;
7777
import org.kohsuke.accmod.Restricted;
7878
import org.kohsuke.accmod.restrictions.DoNotUse;
7979
import org.kohsuke.accmod.restrictions.NoExternalUse;
@@ -393,7 +393,7 @@ public FilePath getRootPath() {
393393
// if computer is null then channel is null and thus we were going to return null anyway
394394
return null;
395395
} else {
396-
return createPath(StringUtils.defaultString(computer.getAbsoluteRemoteFs(), remoteFS));
396+
return createPath(Objects.toString(computer.getAbsoluteRemoteFs(), remoteFS));
397397
}
398398
}
399399

core/src/main/java/hudson/model/UpdateSite.java

+5-2
Original file line numberDiff line numberDiff line change
@@ -83,7 +83,6 @@
8383
import net.sf.json.JSONArray;
8484
import net.sf.json.JSONException;
8585
import net.sf.json.JSONObject;
86-
import org.apache.commons.lang.StringUtils;
8786
import org.kohsuke.accmod.Restricted;
8887
import org.kohsuke.accmod.restrictions.DoNotUse;
8988
import org.kohsuke.accmod.restrictions.NoExternalUse;
@@ -1299,7 +1298,11 @@ public String getDisplayName() {
12991298
displayName = title;
13001299
else
13011300
displayName = name;
1302-
return StringUtils.removeStart(displayName, "Jenkins ");
1301+
String removePrefix = "Jenkins ";
1302+
if (displayName != null && displayName.startsWith(removePrefix)) {
1303+
return displayName.substring(removePrefix.length());
1304+
}
1305+
return displayName;
13031306
}
13041307

13051308
/**

core/src/main/java/hudson/search/FixedSet.java

+1-2
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,6 @@
2727
import java.util.Arrays;
2828
import java.util.Collection;
2929
import java.util.List;
30-
import org.apache.commons.lang.StringUtils;
3130

3231
/**
3332
* Set of {@link SearchItem}s that are statically known upfront.
@@ -62,7 +61,7 @@ public void suggest(String token, List<SearchItem> result) {
6261
boolean caseInsensitive = UserSearchProperty.isCaseInsensitive();
6362
for (SearchItem i : items) {
6463
String name = i.getSearchName();
65-
if (name != null && (name.contains(token) || (caseInsensitive && StringUtils.containsIgnoreCase(name, token)))) {
64+
if (name != null && (name.contains(token) || (caseInsensitive && name.toLowerCase().contains(token.toLowerCase())))) {
6665
result.add(i);
6766
}
6867
}

core/src/main/java/hudson/security/SecurityRealm.java

+4-2
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,6 @@
5656
import jenkins.security.BasicHeaderProcessor;
5757
import jenkins.util.SystemProperties;
5858
import net.sf.json.JSONObject;
59-
import org.apache.commons.lang.StringUtils;
6059
import org.jenkinsci.Symbol;
6160
import org.kohsuke.accmod.Restricted;
6261
import org.kohsuke.accmod.restrictions.DoNotUse;
@@ -672,7 +671,10 @@ public static String getFrom() {
672671

673672
// If deduced entry point isn't deduced yet or the content is a blank value
674673
// use the root web point "/" as a fallback
675-
from = StringUtils.defaultIfBlank(from, "/").trim();
674+
if (from == null || from.isBlank()) {
675+
from = "/";
676+
}
677+
from = from.trim();
676678

677679
// Encode the return value
678680
String returnValue = URLEncoder.encode(from, StandardCharsets.UTF_8);

core/src/main/java/hudson/slaves/JNLPLauncher.java

+4-5
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,6 @@
3939
import jenkins.slaves.RemotingWorkDirSettings;
4040
import jenkins.util.SystemProperties;
4141
import jenkins.websocket.WebSockets;
42-
import org.apache.commons.lang.StringUtils;
4342
import org.jenkinsci.Symbol;
4443
import org.kohsuke.accmod.Restricted;
4544
import org.kohsuke.accmod.restrictions.DoNotUse;
@@ -229,8 +228,8 @@ private String getRemotingOptions(String computerName) {
229228
* {@link Jenkins#checkGoodName(String)} saves us from most troublesome characters, but we still have to deal with
230229
* spaces and therefore with double quotes and backticks.
231230
*/
232-
private static String escapeUnix(String input) {
233-
if (StringUtils.isAlphanumeric(input)) {
231+
private static String escapeUnix(@NonNull String input) {
232+
if (!input.isEmpty() && input.chars().allMatch(Character::isLetterOrDigit)) {
234233
return input;
235234
}
236235
Escaper escaper =
@@ -242,8 +241,8 @@ private static String escapeUnix(String input) {
242241
* {@link Jenkins#checkGoodName(String)} saves us from most troublesome characters, but we still have to deal with
243242
* spaces and therefore with double quotes.
244243
*/
245-
private static String escapeWindows(String input) {
246-
if (StringUtils.isAlphanumeric(input)) {
244+
private static String escapeWindows(@NonNull String input) {
245+
if (!input.isEmpty() && input.chars().allMatch(Character::isLetterOrDigit)) {
247246
return input;
248247
}
249248
Escaper escaper = Escapers.builder().addEscape('"', "\\\"").build();

core/src/main/java/hudson/tasks/BuildTrigger.java

+2-2
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,7 @@
5858
import java.util.Collection;
5959
import java.util.Comparator;
6060
import java.util.List;
61+
import java.util.Objects;
6162
import java.util.StringTokenizer;
6263
import java.util.concurrent.ExecutionException;
6364
import java.util.concurrent.Future;
@@ -68,7 +69,6 @@
6869
import jenkins.model.ParameterizedJobMixIn;
6970
import jenkins.triggers.ReverseBuildTrigger;
7071
import net.sf.json.JSONObject;
71-
import org.apache.commons.lang.StringUtils;
7272
import org.jenkinsci.Symbol;
7373
import org.kohsuke.stapler.AncestorInPath;
7474
import org.kohsuke.stapler.DataBoundConstructor;
@@ -114,7 +114,7 @@ public BuildTrigger(String childProjects, boolean evenIfUnstable) {
114114

115115
@DataBoundConstructor
116116
public BuildTrigger(String childProjects, String threshold) {
117-
this(childProjects, Result.fromString(StringUtils.defaultString(threshold, Result.SUCCESS.toString())));
117+
this(childProjects, Result.fromString(Objects.toString(threshold, Result.SUCCESS.toString())));
118118
}
119119

120120
public BuildTrigger(String childProjects, Result threshold) {

core/src/main/java/jenkins/install/SetupWizard.java

+5-3
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,5 @@
11
package jenkins.install;
22

3-
import static org.apache.commons.lang.StringUtils.defaultIfBlank;
4-
53
import edu.umd.cs.findbugs.annotations.CheckForNull;
64
import edu.umd.cs.findbugs.annotations.NonNull;
75
import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
@@ -486,7 +484,11 @@ public VersionNumber getCurrentLevel() {
486484
File state = getUpdateStateFile();
487485
if (state.exists()) {
488486
try {
489-
from = new VersionNumber(defaultIfBlank(Files.readString(Util.fileToPath(state), StandardCharsets.UTF_8), "1.0").trim());
487+
String version = Files.readString(Util.fileToPath(state), StandardCharsets.UTF_8);
488+
if (version == null || version.isBlank()) {
489+
version = "1.0";
490+
}
491+
from = new VersionNumber(version.trim());
490492
} catch (IOException ex) {
491493
LOGGER.log(Level.SEVERE, "Cannot read the current version file", ex);
492494
return null;

core/src/main/java/jenkins/security/BasicHeaderProcessor.java

+1-2
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,6 @@
1818
import javax.servlet.ServletResponse;
1919
import javax.servlet.http.HttpServletRequest;
2020
import javax.servlet.http.HttpServletResponse;
21-
import org.apache.commons.lang.StringUtils;
2221
import org.kohsuke.accmod.Restricted;
2322
import org.kohsuke.accmod.restrictions.NoExternalUse;
2423
import org.springframework.security.authentication.AnonymousAuthenticationToken;
@@ -65,7 +64,7 @@ public void doFilter(ServletRequest request, ServletResponse response, FilterCha
6564
HttpServletResponse rsp = (HttpServletResponse) response;
6665
String authorization = req.getHeader("Authorization");
6766

68-
if (StringUtils.startsWithIgnoreCase(authorization, "Basic ")) {
67+
if (authorization != null && authorization.toLowerCase().startsWith("Basic ".toLowerCase())) {
6968
// authenticate the user
7069
String uidpassword = Scrambler.descramble(authorization.substring(6));
7170
int idx = uidpassword.indexOf(':');

core/src/main/java/org/jenkins/ui/icon/Icon.java

+1-2
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,6 @@
3131
import java.util.List;
3232
import java.util.Map;
3333
import org.apache.commons.jelly.JellyContext;
34-
import org.apache.commons.lang.StringUtils;
3534
import org.kohsuke.accmod.Restricted;
3635
import org.kohsuke.accmod.restrictions.NoExternalUse;
3736

@@ -238,7 +237,7 @@ public static String toNormalizedIconName(String string) {
238237
if (string == null) {
239238
return null;
240239
}
241-
if (StringUtils.endsWithAny(string, SUPPORTED_FORMATS)) {
240+
if (Arrays.stream(SUPPORTED_FORMATS).anyMatch(string::endsWith)) {
242241
string = string.substring(0, string.length() - 4);
243242
}
244243
return string.replace('_', '-');

core/src/main/java/org/jenkins/ui/symbol/Symbol.java

+1-2
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,6 @@
1515
import java.util.logging.Logger;
1616
import jenkins.model.Jenkins;
1717
import org.apache.commons.io.IOUtils;
18-
import org.apache.commons.lang.StringUtils;
1918

2019
/**
2120
* Helper class to load symbols from Jenkins core or plugins.
@@ -50,7 +49,7 @@ public static String get(@NonNull SymbolRequest request) {
5049
String pluginName = request.getPluginName();
5150
String id = request.getId();
5251

53-
String identifier = StringUtils.defaultIfBlank(pluginName, "core");
52+
String identifier = (pluginName == null || pluginName.isBlank()) ? "core" : pluginName;
5453

5554
String symbol = SYMBOLS
5655
.computeIfAbsent(identifier, key -> new ConcurrentHashMap<>())

0 commit comments

Comments
 (0)