[FIR/IR generator] Factor out adding pure abstract element as parent

This commit is contained in:
Sergej Jaskiewicz
2023-09-19 13:14:25 +02:00
committed by Space Team
parent 5798021e4b
commit 04c5ac0eb6
13 changed files with 49 additions and 44 deletions
@@ -8,6 +8,7 @@ package org.jetbrains.kotlin.fir.tree.generator
import org.jetbrains.kotlin.fir.tree.generator.printer.generateElements
import org.jetbrains.kotlin.fir.tree.generator.util.configureInterfacesAndAbstractClasses
import org.jetbrains.kotlin.fir.tree.generator.util.detectBaseTransformerTypes
import org.jetbrains.kotlin.generators.tree.addPureAbstractElement
import org.jetbrains.kotlin.generators.util.GeneratorsFileUtil
import org.jetbrains.kotlin.generators.util.GeneratorsFileUtil.collectPreviouslyGeneratedFiles
import org.jetbrains.kotlin.generators.util.GeneratorsFileUtil.removeExtraFilesFromPreviousGeneration
@@ -22,6 +23,7 @@ fun main(args: Array<String>) {
detectBaseTransformerTypes(FirTreeBuilder)
ImplementationConfigurator.configureImplementations()
configureInterfacesAndAbstractClasses(FirTreeBuilder)
addPureAbstractElement(FirTreeBuilder.elements, pureAbstractElementType)
BuilderConfigurator.configureBuilders()
val previouslyGeneratedFiles = collectPreviouslyGeneratedFiles(generationPath)
val generatedFiles = generateElements(FirTreeBuilder, generationPath)
@@ -7,7 +7,6 @@ package org.jetbrains.kotlin.fir.tree.generator.printer
import org.jetbrains.kotlin.fir.tree.generator.model.Element
import org.jetbrains.kotlin.fir.tree.generator.model.Field
import org.jetbrains.kotlin.fir.tree.generator.pureAbstractElementType
import org.jetbrains.kotlin.fir.tree.generator.util.get
import org.jetbrains.kotlin.generators.tree.*
import org.jetbrains.kotlin.generators.tree.printer.*
@@ -42,25 +41,13 @@ fun SmartPrinter.printElement(element: Element) {
print("${kind!!.title} $type")
print(typeParameters())
val needPureAbstractElement = this.needPureAbstractElement
val superTypesStrings = elementParents.map {
// TODO: Factor out
var result = it.element.type
if (it.args.isNotEmpty()) {
result += it.args.values.joinToString(", ", "<", ">") { it.typeWithArguments }
}
result + it.element.kind.braces()
} + otherParents.map { it.type }
if (superTypesStrings.isNotEmpty() || needPureAbstractElement) {
print(" : ")
if (needPureAbstractElement) {
print("${pureAbstractElementType.type}()")
if (superTypesStrings.isNotEmpty()) {
print(", ")
val parentRefs = element.parentRefs
if (parentRefs.isNotEmpty()) {
print(
parentRefs.sortedBy { it.typeKind }.joinToString(prefix = " : ") { parent ->
parent.typeWithArguments + parent.inheritanceClauseParenthesis()
}
}
print(superTypesStrings.joinToString(", "),)
)
}
print(multipleUpperBoundsList())
println(" {")