[api] IJPL-188257: Allow parsing API to a list of structured strings

GitOrigin-RevId: d148335af9ae4a68f94db5042f73b4f8cad73f00
This commit is contained in:
Konstantin Nisht
2025-05-22 12:30:58 +02:00
committed by intellij-monorepo-bot
parent 90aa6ee6b3
commit 887a783716

View File

@@ -7,10 +7,27 @@ import java.io.PrintWriter
import java.io.StringWriter import java.io.StringWriter
fun dumpApi(classSignatures: List<ApiClass>): String { fun dumpApi(classSignatures: List<ApiClass>): String {
return StringWriter().use { return reifyToString { dumpApi(classSignatures) }
PrintWriter(it).use { printer ->
printer.dumpApi(classSignatures)
} }
typealias ClassName = String
typealias ClassMembers = List<String>
fun dumpApiAndGroupByClasses(classSignatures: List<ApiClass>): Map<ClassName, ClassMembers> {
val collectingMap = mutableMapOf<ClassName, ClassMembers>()
for (signature in classSignatures) {
val header = reifyToString { printClassHeader(signature.className, signature.flags) }
val list = ArrayList<String>(signature.supers.size + signature.members.size)
signature.supers.mapTo(list) { `super` -> reifyToString { printSuper(`super`) } }
signature.members.mapTo(list) { member -> reifyToString { printMember(member) } }
collectingMap[header] = list
}
return collectingMap
}
private fun reifyToString(action: PrintWriter.() -> Unit): String {
return StringWriter().use {
PrintWriter(it).use { printer -> printer.action() }
it.buffer.toString() it.buffer.toString()
} }
} }
@@ -18,8 +35,15 @@ fun dumpApi(classSignatures: List<ApiClass>): String {
fun PrintWriter.dumpApi(classSignatures: List<ApiClass>) { fun PrintWriter.dumpApi(classSignatures: List<ApiClass>) {
for (classData in classSignatures) { for (classData in classSignatures) {
printClassHeader(classData.className, classData.flags) printClassHeader(classData.className, classData.flags)
printSupers(classData.supers) printNewLine()
printMembers(classData.members) for (`super` in classData.supers) {
printSuper(`super`)
printNewLine()
}
for (member in classData.members) {
printMember(member)
printNewLine()
}
} }
} }
@@ -28,19 +52,14 @@ private fun PrintWriter.printClassHeader(className: String, flags: ApiFlags) {
print(":") print(":")
} }
print(className.dottedClassName()) print(className.dottedClassName())
printNewLine()
} }
private fun PrintWriter.printSupers(supers: List<String>) { private fun PrintWriter.printSuper(`super`: String) {
for (`super` in supers) {
print("- ") print("- ")
print(`super`.dottedClassName()) print(`super`.dottedClassName())
printNewLine()
}
} }
private fun PrintWriter.printMembers(members: List<ApiMember>) { private fun PrintWriter.printMember(member: ApiMember) {
for (member in members) {
print("- ") print("- ")
if (printFlags(member.flags, false)) { if (printFlags(member.flags, false)) {
print(":") print(":")
@@ -56,8 +75,6 @@ private fun PrintWriter.printMembers(members: List<ApiMember>) {
print(':') print(':')
print(type.typeString()) print(type.typeString())
} }
printNewLine()
}
} }
private fun PrintWriter.printNewLine() { private fun PrintWriter.printNewLine() {