From e94e89e9c0a7756c9203bfe78f41b61b0783446e Mon Sep 17 00:00:00 2001 From: Sebastian Kaiser Date: Sat, 13 May 2023 19:48:17 +0200 Subject: [PATCH 01/15] Replace String.indexOf() with String.contains Because you only want to check if textToSearch contains substring. --- lang/src/main/java/com/okta/commons/lang/Assert.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lang/src/main/java/com/okta/commons/lang/Assert.java b/lang/src/main/java/com/okta/commons/lang/Assert.java index 552547fe..e011e625 100644 --- a/lang/src/main/java/com/okta/commons/lang/Assert.java +++ b/lang/src/main/java/com/okta/commons/lang/Assert.java @@ -153,7 +153,7 @@ public static void hasText(String text) { */ public static void doesNotContain(String textToSearch, String substring, String message) { if (Strings.hasLength(textToSearch) && Strings.hasLength(substring) && - textToSearch.indexOf(substring) != -1) { + textToSearch.contains(substring)) { throw new IllegalArgumentException(message); } } From a4f09a2ec11f2373f9ae0efeae1dabf63b65f634 Mon Sep 17 00:00:00 2001 From: Sebastian Kaiser Date: Sat, 13 May 2023 19:59:37 +0200 Subject: [PATCH 02/15] Use enhanced for loop --- lang/src/main/java/com/okta/commons/lang/Assert.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lang/src/main/java/com/okta/commons/lang/Assert.java b/lang/src/main/java/com/okta/commons/lang/Assert.java index e011e625..722fc750 100644 --- a/lang/src/main/java/com/okta/commons/lang/Assert.java +++ b/lang/src/main/java/com/okta/commons/lang/Assert.java @@ -205,8 +205,8 @@ public static void notEmpty(Object[] array) { */ public static void noNullElements(Object[] array, String message) { if (array != null) { - for (int i = 0; i < array.length; i++) { - if (array[i] == null) { + for (Object o : array) { + if (o == null) { throw new IllegalArgumentException(message); } } From 22ba68e0546a6415e60a91af4f1e6854083637a0 Mon Sep 17 00:00:00 2001 From: Sebastian Kaiser Date: Sat, 13 May 2023 20:14:36 +0200 Subject: [PATCH 03/15] Replace lambda with method reference --- .../java/com/okta/commons/http/HttpHeaders.java | 16 ++-------------- 1 file changed, 2 insertions(+), 14 deletions(-) diff --git a/http/http-api/src/main/java/com/okta/commons/http/HttpHeaders.java b/http/http-api/src/main/java/com/okta/commons/http/HttpHeaders.java index b99adb07..7eca0838 100644 --- a/http/http-api/src/main/java/com/okta/commons/http/HttpHeaders.java +++ b/http/http-api/src/main/java/com/okta/commons/http/HttpHeaders.java @@ -23,19 +23,7 @@ import java.nio.charset.Charset; import java.text.ParseException; import java.text.SimpleDateFormat; -import java.util.ArrayList; -import java.util.Collection; -import java.util.Collections; -import java.util.Date; -import java.util.EnumSet; -import java.util.Iterator; -import java.util.LinkedHashMap; -import java.util.LinkedList; -import java.util.List; -import java.util.Locale; -import java.util.Map; -import java.util.Set; -import java.util.TimeZone; +import java.util.*; import java.util.regex.Matcher; import java.util.regex.Pattern; import java.util.stream.Collectors; @@ -515,7 +503,7 @@ public Map getLinkMap() { List headerValues = headers.get(LINK); return headerValues.stream() .map(HttpHeaders::parseLinkHeader) - .filter(link -> link != null) + .filter(Objects::nonNull) .collect(Collectors.toMap(Link::getRelationType, Link::getHref)); } return Collections.emptyMap(); From e6034ffef563167e87a5b4f138e5b3e3aa0ba5e0 Mon Sep 17 00:00:00 2001 From: Sebastian Kaiser Date: Sat, 13 May 2023 21:55:51 +0200 Subject: [PATCH 04/15] Keeps the default load factor in mind when setting initial capacity --- .../src/main/java/com/okta/commons/http/HttpHeaders.java | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/http/http-api/src/main/java/com/okta/commons/http/HttpHeaders.java b/http/http-api/src/main/java/com/okta/commons/http/HttpHeaders.java index 7eca0838..5922e5c1 100644 --- a/http/http-api/src/main/java/com/okta/commons/http/HttpHeaders.java +++ b/http/http-api/src/main/java/com/okta/commons/http/HttpHeaders.java @@ -569,7 +569,7 @@ public String getFirst(String headerName) { public void add(String headerName, String headerValue) { List headerValues = headers.get(headerName); if (headerValues == null) { - headerValues = new LinkedList(); + headerValues = new LinkedList<>(); this.headers.put(headerName, headerValues); } headerValues.add(headerValue); @@ -585,7 +585,7 @@ public void add(String headerName, String headerValue) { * @see #add(String, String) */ public void set(String headerName, String headerValue) { - List headerValues = new LinkedList(); + List headerValues = new LinkedList<>(); headerValues.add(headerValue); headers.put(headerName, headerValues); } @@ -597,7 +597,9 @@ public void setAll(Map values) { } public Map toSingleValueMap() { - LinkedHashMap singleValueMap = new LinkedHashMap(this.headers.size()); + // Sets the initial capacity while keeping the default load factor in mind. + int capacity = (int) ((this.headers.size())/0.75+1); + LinkedHashMap singleValueMap = new LinkedHashMap<>(capacity); for (Map.Entry> entry : headers.entrySet()) { singleValueMap.put(entry.getKey(), entry.getValue().get(0)); } From 4ac36db7591e34295bfcad0acc2781e6448aaaba Mon Sep 17 00:00:00 2001 From: Sebastian Kaiser Date: Sat, 13 May 2023 22:03:37 +0200 Subject: [PATCH 05/15] Remove duplicate from pattern --- .../src/main/java/com/okta/commons/http/HttpHeaders.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/http/http-api/src/main/java/com/okta/commons/http/HttpHeaders.java b/http/http-api/src/main/java/com/okta/commons/http/HttpHeaders.java index 5922e5c1..b2ab4dc8 100644 --- a/http/http-api/src/main/java/com/okta/commons/http/HttpHeaders.java +++ b/http/http-api/src/main/java/com/okta/commons/http/HttpHeaders.java @@ -510,7 +510,7 @@ public Map getLinkMap() { } private static Link parseLinkHeader(String rawHeader) { - Pattern pattern = Pattern.compile("<(.*)>;.*rel=\"?([^;|,|\"]*)\"?.*"); + Pattern pattern = Pattern.compile("<(.*)>;.*rel=\"?([^;|,\"]*)\"?.*"); Matcher matcher = pattern.matcher(rawHeader); if (matcher.matches()) { return new DefaultLink(matcher.group(2), matcher.group(1)); From 939c9b293d71e6e2acd6871ca24d1994e5c4761c Mon Sep 17 00:00:00 2001 From: Sebastian Kaiser Date: Sat, 13 May 2023 22:16:39 +0200 Subject: [PATCH 06/15] Simplify iterator for loops based string concatenation --- .../com/okta/commons/http/HttpHeaders.java | 24 +++++-------------- 1 file changed, 6 insertions(+), 18 deletions(-) diff --git a/http/http-api/src/main/java/com/okta/commons/http/HttpHeaders.java b/http/http-api/src/main/java/com/okta/commons/http/HttpHeaders.java index b2ab4dc8..1f44b254 100644 --- a/http/http-api/src/main/java/com/okta/commons/http/HttpHeaders.java +++ b/http/http-api/src/main/java/com/okta/commons/http/HttpHeaders.java @@ -146,15 +146,11 @@ public List getAccept() { * @param acceptableCharsets the acceptable charsets */ public void setAcceptCharset(List acceptableCharsets) { - StringBuilder builder = new StringBuilder(); - for (Iterator iterator = acceptableCharsets.iterator(); iterator.hasNext(); ) { - Charset charset = iterator.next(); - builder.append(charset.name().toLowerCase(Locale.ENGLISH)); - if (iterator.hasNext()) { - builder.append(", "); - } - } - set(ACCEPT_CHARSET, builder.toString()); + String accept = acceptableCharsets.stream() + .map(c -> c.name().toLowerCase(Locale.ENGLISH)) + .collect(Collectors.joining(", ")); + + set(ACCEPT_CHARSET, accept); } /** @@ -398,15 +394,7 @@ public void setIfNoneMatch(String ifNoneMatch) { * @param ifNoneMatchList the new value of the header */ public void setIfNoneMatch(List ifNoneMatchList) { - StringBuilder builder = new StringBuilder(); - for (Iterator iterator = ifNoneMatchList.iterator(); iterator.hasNext(); ) { - String ifNoneMatch = iterator.next(); - builder.append(ifNoneMatch); - if (iterator.hasNext()) { - builder.append(", "); - } - } - set(IF_NONE_MATCH, builder.toString()); + set(IF_NONE_MATCH, String.join(", ", ifNoneMatchList)); } /** From 5c105609ed6989b5d1e6fc01f5c6150583f592c6 Mon Sep 17 00:00:00 2001 From: Sebastian Kaiser Date: Sat, 13 May 2023 23:08:02 +0200 Subject: [PATCH 07/15] Use char instead of string --- .../src/main/java/com/okta/commons/http/QueryString.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/http/http-api/src/main/java/com/okta/commons/http/QueryString.java b/http/http-api/src/main/java/com/okta/commons/http/QueryString.java index 956bf4f8..ebedad00 100644 --- a/http/http-api/src/main/java/com/okta/commons/http/QueryString.java +++ b/http/http-api/src/main/java/com/okta/commons/http/QueryString.java @@ -91,7 +91,7 @@ public String toString(boolean canonical) { sb.append('&'); } - sb.append(key).append("=").append(value); + sb.append(key).append('=').append(value); } return sb.toString(); From ab771cc6ee7eec28f9344b6176d69006a565a7b4 Mon Sep 17 00:00:00 2001 From: Sebastian Kaiser Date: Sat, 13 May 2023 23:16:57 +0200 Subject: [PATCH 08/15] Replace Collections.sort() --- .../src/main/java/com/okta/commons/http/MimeTypeUtils.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/http/http-api/src/main/java/com/okta/commons/http/MimeTypeUtils.java b/http/http-api/src/main/java/com/okta/commons/http/MimeTypeUtils.java index 69958032..45eeafde 100644 --- a/http/http-api/src/main/java/com/okta/commons/http/MimeTypeUtils.java +++ b/http/http-api/src/main/java/com/okta/commons/http/MimeTypeUtils.java @@ -312,7 +312,7 @@ public static String toString(Collection mimeTypes) { public static void sortBySpecificity(List mimeTypes) { Assert.notNull(mimeTypes, "'mimeTypes' must not be null"); if (mimeTypes.size() > 1) { - Collections.sort(mimeTypes, SPECIFICITY_COMPARATOR); + mimeTypes.sort(SPECIFICITY_COMPARATOR); } } From 5284c36175875391a1b1f8d203391b5894fbebb5 Mon Sep 17 00:00:00 2001 From: Sebastian Kaiser Date: Sat, 13 May 2023 23:18:56 +0200 Subject: [PATCH 09/15] Remove 2nd argument in String.substring() length of string is implicit --- .../src/main/java/com/okta/commons/http/MimeTypeUtils.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/http/http-api/src/main/java/com/okta/commons/http/MimeTypeUtils.java b/http/http-api/src/main/java/com/okta/commons/http/MimeTypeUtils.java index 45eeafde..66568a5f 100644 --- a/http/http-api/src/main/java/com/okta/commons/http/MimeTypeUtils.java +++ b/http/http-api/src/main/java/com/okta/commons/http/MimeTypeUtils.java @@ -229,7 +229,7 @@ else if (ch == '"') { int eqIndex = parameter.indexOf('='); if (eqIndex >= 0) { String attribute = parameter.substring(0, eqIndex); - String value = parameter.substring(eqIndex + 1, parameter.length()); + String value = parameter.substring(eqIndex + 1); parameters.put(attribute, value); } } From 264f227725c5f5aca53767b0cc796b86059d841e Mon Sep 17 00:00:00 2001 From: Sebastian Kaiser Date: Sat, 13 May 2023 23:19:20 +0200 Subject: [PATCH 10/15] Remove 2nd argument in String.substring() length of string is implicit --- .../src/main/java/com/okta/commons/http/MimeTypeUtils.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/http/http-api/src/main/java/com/okta/commons/http/MimeTypeUtils.java b/http/http-api/src/main/java/com/okta/commons/http/MimeTypeUtils.java index 66568a5f..c68dc2f5 100644 --- a/http/http-api/src/main/java/com/okta/commons/http/MimeTypeUtils.java +++ b/http/http-api/src/main/java/com/okta/commons/http/MimeTypeUtils.java @@ -200,7 +200,7 @@ public static MimeType parseMimeType(String mimeType) { throw new InvalidMimeTypeException(mimeType, "does not contain subtype after '/'"); } String type = fullType.substring(0, subIndex); - String subtype = fullType.substring(subIndex + 1, fullType.length()); + String subtype = fullType.substring(subIndex + 1); if (MimeType.WILDCARD_TYPE.equals(type) && !MimeType.WILDCARD_TYPE.equals(subtype)) { throw new InvalidMimeTypeException(mimeType, "wildcard type is legal only in '*/*' (all mime types)"); } From c0ecc91945b4fbe74a6fc3f211c50d8a850d5b96 Mon Sep 17 00:00:00 2001 From: Sebastian Kaiser Date: Sat, 13 May 2023 23:29:36 +0200 Subject: [PATCH 11/15] Replace append per line Is the append per line approach really more readable considering the logic. I'd argue it is not so why not keep the size of the byte code minimal more info: https://stackoverflow.com/questions/37672785/how-can-i-improve-performance-if-append-is-called-on-stringbuffer-or-stringb --- .../src/main/java/com/okta/commons/http/MimeType.java | 9 ++------- 1 file changed, 2 insertions(+), 7 deletions(-) diff --git a/http/http-api/src/main/java/com/okta/commons/http/MimeType.java b/http/http-api/src/main/java/com/okta/commons/http/MimeType.java index 095c2248..90574ecd 100644 --- a/http/http-api/src/main/java/com/okta/commons/http/MimeType.java +++ b/http/http-api/src/main/java/com/okta/commons/http/MimeType.java @@ -458,18 +458,13 @@ public String toString() { } protected void appendTo(StringBuilder builder) { - builder.append(this.type); - builder.append('/'); - builder.append(this.subtype); + builder.append(this.type).append('/').append(this.subtype); appendTo(this.parameters, builder); } private void appendTo(Map map, StringBuilder builder) { for (Map.Entry entry : map.entrySet()) { - builder.append(';'); - builder.append(entry.getKey()); - builder.append('='); - builder.append(entry.getValue()); + builder.append(';').append(entry.getKey()).append('=').append(entry.getValue()); } } From 830c425924b85abd60b6407ef31e649982fae5c7 Mon Sep 17 00:00:00 2001 From: Sebastian Kaiser Date: Sat, 13 May 2023 23:31:53 +0200 Subject: [PATCH 12/15] Use Integer.compare() --- http/http-api/src/main/java/com/okta/commons/http/MimeType.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/http/http-api/src/main/java/com/okta/commons/http/MimeType.java b/http/http-api/src/main/java/com/okta/commons/http/MimeType.java index 90574ecd..4f1e4b0b 100644 --- a/http/http-api/src/main/java/com/okta/commons/http/MimeType.java +++ b/http/http-api/src/main/java/com/okta/commons/http/MimeType.java @@ -565,7 +565,7 @@ else if (!mimeType1.getSubtype().equals(mimeType2.getSubtype())) { // audio/basi protected int compareParameters(T mimeType1, T mimeType2) { int paramsSize1 = mimeType1.getParameters().size(); int paramsSize2 = mimeType2.getParameters().size(); - return (paramsSize2 < paramsSize1 ? -1 : (paramsSize2 == paramsSize1 ? 0 : 1)); // audio/basic;level=1 < audio/basic + return (Integer.compare(paramsSize2, paramsSize1)); // audio/basic;level=1 < audio/basic } } From 835286de92ea078edebdc592a4e793b5a3f01d69 Mon Sep 17 00:00:00 2001 From: Sebastian Kaiser Date: Sat, 13 May 2023 23:39:06 +0200 Subject: [PATCH 13/15] Simplify --- http/http-api/src/main/java/com/okta/commons/http/MimeType.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/http/http-api/src/main/java/com/okta/commons/http/MimeType.java b/http/http-api/src/main/java/com/okta/commons/http/MimeType.java index 4f1e4b0b..baadd385 100644 --- a/http/http-api/src/main/java/com/okta/commons/http/MimeType.java +++ b/http/http-api/src/main/java/com/okta/commons/http/MimeType.java @@ -224,7 +224,7 @@ private boolean isQuotedString(String s) { return false; } else { - return ((s.startsWith("\"") && s.endsWith("\"")) || (s.startsWith("'") && s.endsWith("'"))); + return (s.charAt(0) == '"' && s.endsWith("\"")) || (s.charAt(0) == '\'' && s.endsWith("'")); } } From d5db18580906b2e701171acb4e36e3d08b297552 Mon Sep 17 00:00:00 2001 From: Sebastian Kaiser Date: Sat, 13 May 2023 23:44:39 +0200 Subject: [PATCH 14/15] Replace Collections.sort() --- .../src/main/java/com/okta/commons/http/MediaType.java | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/http/http-api/src/main/java/com/okta/commons/http/MediaType.java b/http/http-api/src/main/java/com/okta/commons/http/MediaType.java index 735250d3..e83407a5 100644 --- a/http/http-api/src/main/java/com/okta/commons/http/MediaType.java +++ b/http/http-api/src/main/java/com/okta/commons/http/MediaType.java @@ -618,7 +618,7 @@ public static String toString(Collection mediaTypes) { public static void sortBySpecificity(List mediaTypes) { Assert.notNull(mediaTypes, "'mediaTypes' must not be null"); if (mediaTypes.size() > 1) { - Collections.sort(mediaTypes, SPECIFICITY_COMPARATOR); + mediaTypes.sort(SPECIFICITY_COMPARATOR); } } @@ -645,7 +645,7 @@ public static void sortBySpecificity(List mediaTypes) { public static void sortByQualityValue(List mediaTypes) { Assert.notNull(mediaTypes, "'mediaTypes' must not be null"); if (mediaTypes.size() > 1) { - Collections.sort(mediaTypes, QUALITY_VALUE_COMPARATOR); + mediaTypes.sort(QUALITY_VALUE_COMPARATOR); } } @@ -658,8 +658,7 @@ public static void sortByQualityValue(List mediaTypes) { public static void sortBySpecificityAndQuality(List mediaTypes) { Assert.notNull(mediaTypes, "'mediaTypes' must not be null"); if (mediaTypes.size() > 1) { - Collections.sort(mediaTypes, - MediaType.SPECIFICITY_COMPARATOR.thenComparing(MediaType.QUALITY_VALUE_COMPARATOR)); + mediaTypes.sort(MediaType.SPECIFICITY_COMPARATOR.thenComparing(MediaType.QUALITY_VALUE_COMPARATOR)); } } From 2f246854aec8d91edcdf20d5a00107c6c2b5cb12 Mon Sep 17 00:00:00 2001 From: Sebastian Kaiser Date: Sat, 13 May 2023 23:45:19 +0200 Subject: [PATCH 15/15] Use Integer.compare() --- .../http-api/src/main/java/com/okta/commons/http/MediaType.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/http/http-api/src/main/java/com/okta/commons/http/MediaType.java b/http/http-api/src/main/java/com/okta/commons/http/MediaType.java index e83407a5..feffa39f 100644 --- a/http/http-api/src/main/java/com/okta/commons/http/MediaType.java +++ b/http/http-api/src/main/java/com/okta/commons/http/MediaType.java @@ -696,7 +696,7 @@ else if (!mediaType1.getSubtype().equals(mediaType2.getSubtype())) { // audio/ba int paramsSize1 = mediaType1.getParameters().size(); int paramsSize2 = mediaType2.getParameters().size(); // audio/basic;level=1 < audio/basic - return (paramsSize2 < paramsSize1 ? -1 : (paramsSize2 == paramsSize1 ? 0 : 1)); + return (Integer.compare(paramsSize2, paramsSize1)); } } };