К сожалению, kotlin, похоже, не предоставляет свой собственный синтаксический анализатор, что означает, что простого ответа не будет, и вам придется заниматься языковыми обновлениями в дальнейшем. Возможно, вы также захотите убедиться, что проанализированная структура позволяет сохранить пробелы, чтобы сохранить форматирование без изменений.
ktlint может быть интересной отправной точкой. Он использует элементы PSI от IntelliJ, а также повторно использует синтаксический анализатор IntelliJ.
val normalizedText = text.replace("\r\n", "\n").replace("\r", "\n")
val positionByOffset = calculateLineColByOffset(normalizedText)
val fileName = if (script) "file.kts" else "file.kt"
val psiFile = psiFileFactory.createFileFromText(fileName, KotlinLanguage.INSTANCE, normalizedText) as KtFile
val errorElement = psiFile.findErrorElement()
if (errorElement != null) {
val (line, col) = positionByOffset(errorElement.textOffset)
throw ParseException(line, col, errorElement.errorDescription)
}
val rootNode = psiFile.node
// use visitor pattern on rootNode
Честно говоря, если это не принесет большую пользу вашему проекту, я постараюсь найти другое решение. Может быть, вы можете прочитать значения в вашем build.gradle.kts
из легко разбираемого источника, такого как json файл?
Надеюсь, это поможет.