private void index()

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);
                    }
                }
            }
        }
    }