void split(int pathSplitPos) {
            checkArgument(pathSplitPos > 0 && pathSplitPos < path.length(),
                          "Invalid split index of the path: %s", pathSplitPos);

            // Would be split as:
            //  - AS-IS: /abc/     (me)
            //                d    (child 1)
            //                e    (child 2)
            //  - TO-BE: /ab       (me: split)
            //              c/     (child: split)
            //                d    (grandchild 1)
            //                e    (grandchild 2)

            final String parentPath = path.substring(0, pathSplitPos);
            final String childPath = path.substring(pathSplitPos);

            final NodeBuilder<V> child = new NodeBuilder<>(type, this, childPath);

            // Move the values which belongs to this node to the new child.
            child.valuesWithHighPrecedence = valuesWithHighPrecedence;
            child.valuesWithLowPrecedence = valuesWithLowPrecedence;
            child.children = children;
            if (child.children != null) {
                child.children.values().forEach(c -> c.parent = child);
            }

            // Clear the values and update the path and children.
            children = null;
            valuesWithHighPrecedence = null;
            valuesWithLowPrecedence = null;

            updatePath(parentPath);
            addChild(child);
        }
Splits this {@link RoutingTrie.Node} into two by the given index of the path.
core/src/main/java/com/linecorp/armeria/server/RoutingTrieBuilder.java