
org.jetbrains.kotlin.doc.highlighter2.psiUtils.kt Maven / Gradle / Ivy
The newest version!
package org.jetbrains.kotlin.doc.highlighter2
import com.intellij.psi.PsiElement
private fun PsiElement.getTextChildRelativeOffset() =
getTextRange()!!.getStartOffset() - getParent()!!.getTextRange()!!.getStartOffset()
private fun PsiElement.getAllChildren(): List {
val r = arrayListOf()
var child = getFirstChild()
while (child != null) {
r.add(child!!)
child = child!!.getNextSibling()
}
return r
}
private fun splitPsiImpl(psi: PsiElement, listBuilder: MutableList>) {
var lastPos = 0
for (child in psi.getAllChildren()) {
if (child.getTextChildRelativeOffset() > lastPos) {
val text = psi.getText()!!.substring(lastPos, child.getTextChildRelativeOffset())
listBuilder.add(Pair(text, psi))
}
splitPsiImpl(child, listBuilder)
lastPos = child.getTextChildRelativeOffset() + child.getTextRange()!!.getLength()
}
if (lastPos < psi.getTextRange()!!.getLength()) {
val text = psi.getText()!!.substring(lastPos)
listBuilder.add(Pair(text, psi))
}
}
fun splitPsi(psi: PsiElement): List> {
val listBuilder = arrayListOf>()
splitPsiImpl(psi, listBuilder)
return listBuilder
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy