in src/main/java/org/apache/sling/servlets/resolver/internal/resource/MergingServletResourceProvider.java [92:121]
private void index(
ConcurrentHashMap<String, Set<String>> tree,
ConcurrentHashMap<String, Map.Entry<ServletResourceProvider, ServiceReference<?>>> providers,
List<Map.Entry<ServletResourceProvider, ServiceReference<?>>> registrations) {
for (Map.Entry<ServletResourceProvider, ServiceReference<?>> reference : registrations) {
for (String path : reference.getKey().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());
}
Map.Entry<ServletResourceProvider, ServiceReference<?>> old = providers.get(path);
if (old == null) {
providers.put(path, reference);
} else {
if (reference.getValue().compareTo(old.getValue()) > 0) {
providers.put(path, reference);
}
}
}
}
}