New J2K: Render list of implemented correctly
This commit is contained in:
committed by
Ilya Kirillov
parent
b8bbd85bc7
commit
ac20e9ba83
@@ -96,6 +96,20 @@ class NewCodeBuilder {
|
||||
)
|
||||
}
|
||||
|
||||
override fun visitInheritanceInfo(inheritanceInfo: JKInheritanceInfo) {
|
||||
renderList(inheritanceInfo.inherit) { it.accept(this) }
|
||||
}
|
||||
|
||||
|
||||
private inline fun <T> renderList(list: List<T>, separator: String = ", ", renderElement: (T) -> Unit) {
|
||||
val (head, tail) = list.headTail()
|
||||
head?.let(renderElement) ?: return
|
||||
tail?.forEach {
|
||||
builder.append(separator)
|
||||
renderElement(it)
|
||||
}
|
||||
}
|
||||
|
||||
override fun visitClass(klass: JKClass) {
|
||||
klass.modifierList.accept(this)
|
||||
builder.append(" ")
|
||||
@@ -104,7 +118,7 @@ class NewCodeBuilder {
|
||||
printer.printWithNoIndent(klass.name.value)
|
||||
if (klass.inheritance.inherit.isNotEmpty()) {
|
||||
printer.printWithNoIndent(" : ")
|
||||
klass.inheritance.inherit.forEach { it.accept(this) }
|
||||
klass.inheritance.accept(this)
|
||||
}
|
||||
|
||||
if (klass.declarationList.isNotEmpty()) {
|
||||
@@ -377,4 +391,10 @@ class NewCodeBuilder {
|
||||
Visitor().also { root.accept(it) }
|
||||
return builder.toString()
|
||||
}
|
||||
}
|
||||
|
||||
private inline fun <T> List<T>.headTail(): Pair<T?, List<T>?> {
|
||||
val head = this.firstOrNull()
|
||||
val tail = if (size <= 1) null else subList(1, size)
|
||||
return head to tail
|
||||
}
|
||||
@@ -325,4 +325,6 @@ class JKLambdaExpressionImpl(parameters: List<JKParameter>, returnType: JKTypeEl
|
||||
|
||||
class JKInheritanceInfoImpl(implements: List<JKTypeElement>) : JKInheritanceInfo, JKBranchElementBase() {
|
||||
override val inherit: List<JKTypeElement> by children(implements)
|
||||
|
||||
override fun <R, D> accept(visitor: JKVisitor<R, D>, data: D): R = visitor.visitInheritanceInfo(this, data)
|
||||
}
|
||||
@@ -7,6 +7,7 @@ interface JKVisitor<out R, in D> {
|
||||
fun visitDeclaration(declaration: JKDeclaration, data: D): R = visitTreeElement(declaration, data)
|
||||
fun visitFile(file: JKFile, data: D): R = visitTreeElement(file, data)
|
||||
fun visitClass(klass: JKClass, data: D): R = visitDeclaration(klass, data)
|
||||
fun visitInheritanceInfo(inheritanceInfo: JKInheritanceInfo, data: D): R = visitTreeElement(inheritanceInfo, data)
|
||||
fun visitMethod(method: JKMethod, data: D): R = visitDeclaration(method, data)
|
||||
fun visitField(field: JKField, data: D): R = visitDeclaration(field, data)
|
||||
fun visitLocalVariable(localVariable: JKLocalVariable, data: D): R = visitField(localVariable, data)
|
||||
|
||||
@@ -11,6 +11,8 @@ interface JKVisitorVoid : JKVisitor<Unit, Nothing?> {
|
||||
override fun visitFile(file: JKFile, data: Nothing?) = visitFile(file)
|
||||
fun visitClass(klass: JKClass) = visitDeclaration(klass, null)
|
||||
override fun visitClass(klass: JKClass, data: Nothing?) = visitClass(klass)
|
||||
fun visitInheritanceInfo(inheritanceInfo: JKInheritanceInfo) = visitTreeElement(inheritanceInfo, null)
|
||||
override fun visitInheritanceInfo(inheritanceInfo: JKInheritanceInfo, data: Nothing?) = visitInheritanceInfo(inheritanceInfo)
|
||||
fun visitMethod(method: JKMethod) = visitDeclaration(method, null)
|
||||
override fun visitMethod(method: JKMethod, data: Nothing?) = visitMethod(method)
|
||||
fun visitField(field: JKField) = visitDeclaration(field, null)
|
||||
|
||||
Reference in New Issue
Block a user