mirror of
https://gitflic.ru/project/openide/openide.git
synced 2025-12-15 02:59:33 +07:00
[api] IJPL-188257: Allow parsing API to a list of structured strings
GitOrigin-RevId: d148335af9ae4a68f94db5042f73b4f8cad73f00
This commit is contained in:
committed by
intellij-monorepo-bot
parent
90aa6ee6b3
commit
887a783716
@@ -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()
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user