All Downloads are FREE. Search and download functionalities are using the official Maven repository.

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