in intellij-plugin-structure/structure-base/src/main/kotlin/com/jetbrains/plugin/structure/base/utils/trie/Trie.kt [82:113]
fun split(str: CharSequence): List<Pair<Char?, String>> {
if (str.isEmpty()) return emptyList()
val result = ArrayList<Pair<Char?, String>>()
var separator: Char? = null
var i = 0
// trim start separators
while (str[i] == '/' || str[i] == '.' || str[i] == '$') {
i++
}
var startIndex = i
while (i < str.length) {
val c = str[i]
if (c == '/' || c == '.' || c == '$') {
if (startIndex != i) {
result.add(Pair(separator, str.substring(startIndex, i)))
} else if (startIndex != 0) {
i++
continue
}
separator = c
startIndex = i + 1
}
i++
}
if (startIndex < str.length) {
result.add(Pair(separator, str.substring(startIndex, str.length)))
}
if (result.isNotEmpty()) {
assert(result.first().first == null)
}
return result
}