[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 reifyToString { 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 { return StringWriter().use {
PrintWriter(it).use { printer -> PrintWriter(it).use { printer -> printer.action() }
printer.dumpApi(classSignatures)
}
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,35 +52,28 @@ 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.printMember(member: ApiMember) {
print("- ")
if (printFlags(member.flags, false)) {
print(":")
} }
} print(member.ref.name)
val type = Type.getType(member.ref.descriptor)
private fun PrintWriter.printMembers(members: List<ApiMember>) { if (type.sort == Type.METHOD) {
for (member in members) { print(type.argumentTypes.joinToString(prefix = "(", separator = ",", postfix = ")", transform = Type::typeString))
print("- ") print(':')
if (printFlags(member.flags, false)) { print(type.returnType.typeString())
print(":") }
} else {
print(member.ref.name) print(':')
val type = Type.getType(member.ref.descriptor) print(type.typeString())
if (type.sort == Type.METHOD) {
print(type.argumentTypes.joinToString(prefix = "(", separator = ",", postfix = ")", transform = Type::typeString))
print(':')
print(type.returnType.typeString())
}
else {
print(':')
print(type.typeString())
}
printNewLine()
} }
} }