Skip to content

Commit 9f8b88e

Browse files
authored
feat: improve PacakageURL.toString() (#208)
* Use single character append instead of string append * Avoid `StringBuilder::setLength` for qualifiers * Qualifier keys are already lowercase
1 parent 684c305 commit 9f8b88e

1 file changed

Lines changed: 19 additions & 13 deletions

File tree

src/main/java/com/github/packageurl/PackageURL.java

Lines changed: 19 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@
3232
import java.util.Collections;
3333
import java.util.Map;
3434
import java.util.Objects;
35+
import java.util.Set;
3536
import java.util.TreeMap;
3637
import java.util.function.IntPredicate;
3738
import java.util.stream.Collectors;
@@ -470,28 +471,33 @@ public String canonicalize() {
470471
*/
471472
private String canonicalize(boolean coordinatesOnly) {
472473
final StringBuilder purl = new StringBuilder();
473-
purl.append(SCHEME_PART).append(type).append("/");
474+
purl.append(SCHEME_PART).append(type).append('/');
474475
if (namespace != null) {
475476
purl.append(encodePath(namespace));
476-
purl.append("/");
477+
purl.append('/');
477478
}
478479
purl.append(percentEncode(name));
479480
if (version != null) {
480-
purl.append("@").append(percentEncode(version));
481+
purl.append('@').append(percentEncode(version));
481482
}
482-
if (! coordinatesOnly) {
483+
484+
if (!coordinatesOnly) {
483485
if (qualifiers != null) {
484-
purl.append("?");
485-
qualifiers.forEach((key, value) -> {
486-
purl.append(toLowerCase(key));
487-
purl.append("=");
488-
purl.append(percentEncode(value));
489-
purl.append("&");
490-
});
491-
purl.setLength(purl.length() - 1);
486+
purl.append('?');
487+
Set<Map.Entry<String, String>> entries = qualifiers.entrySet();
488+
boolean separator = false;
489+
for (Map.Entry<String, String> entry : entries) {
490+
if (separator) {
491+
purl.append('&');
492+
}
493+
purl.append(entry.getKey());
494+
purl.append('=');
495+
purl.append(percentEncode(entry.getValue()));
496+
separator = true;
497+
}
492498
}
493499
if (subpath != null) {
494-
purl.append("#").append(encodePath(subpath));
500+
purl.append('#').append(encodePath(subpath));
495501
}
496502
}
497503
return purl.toString();

0 commit comments

Comments
 (0)