in src/main/java/org/apache/sling/servlets/resolver/internal/resource/MergingServletResourceProvider.java [90:115]
private void index(ConcurrentHashMap<String, Set<String>> tree, ConcurrentHashMap<String, Pair<ServletResourceProvider, ServiceReference<?>>> providers, List<Pair<ServletResourceProvider, ServiceReference<?>>> registrations) {
for (Pair<ServletResourceProvider, ServiceReference<?>> reference : registrations) {
for (String path : reference.getLeft().getServletPaths()) {
StringBuilder currentBuilder = new StringBuilder();
for (String part : path.split("/")) {
Set<String> childs = tree.computeIfAbsent(currentBuilder.toString(), k -> Collections.synchronizedSet(new LinkedHashSet<>()));
currentBuilder.append("/").append(part);
String cleanedCurrent = currentBuilder.toString().trim().replace("//", "/");
// replace the buffer with the cleaned string
currentBuilder.setLength(0);
currentBuilder.append(cleanedCurrent);
childs.add(currentBuilder.toString());
}
Pair<ServletResourceProvider, ServiceReference<?>> old = providers.get(path);
if (old == null) {
providers.put(path, reference);
} else {
if (reference.getRight().compareTo(old.getRight()) > 0) {
providers.put(path, reference);
}
}
}
}
}