[IR generator] Use ImplementationKind instead of Element.Kind

This is a step towards commonizing the code generator between
FIR and IR: KT-61970
This commit is contained in:
Sergej Jaskiewicz
2023-09-08 15:20:46 +02:00
committed by Space Team
parent af5a93f5ff
commit 00fa09dbf3
3 changed files with 11 additions and 18 deletions
@@ -6,7 +6,7 @@
package org.jetbrains.kotlin.ir.generator.model
import com.squareup.kotlinpoet.CodeBlock
import org.jetbrains.kotlin.generators.tree.TypeKind
import org.jetbrains.kotlin.generators.tree.ImplementationKind
import org.jetbrains.kotlin.ir.generator.config.ElementConfig
import org.jetbrains.kotlin.ir.generator.config.FieldConfig
import org.jetbrains.kotlin.ir.generator.util.*
@@ -25,7 +25,7 @@ class Element(
var visitorParent: ElementRef? = null
var transformerReturnType: Element? = null
val targetKind = config.typeKind
var kind: Kind? = null
var kind: ImplementationKind? = null
val typeName
get() = elementName2typeName(name)
val allParents: List<ClassOrElementRef>
@@ -51,15 +51,6 @@ class Element(
override fun toString() = name
enum class Kind(val typeKind: TypeKind) {
FinalClass(TypeKind.Class),
OpenClass(TypeKind.Class),
AbstractClass(TypeKind.Class),
SealedClass(TypeKind.Class),
Interface(TypeKind.Interface),
SealedInterface(TypeKind.Interface),
}
companion object {
fun elementName2typeName(name: String) = "Ir" + name.replaceFirstChar(Char::uppercaseChar)
}
@@ -5,6 +5,7 @@
package org.jetbrains.kotlin.ir.generator.model
import org.jetbrains.kotlin.generators.tree.ImplementationKind
import org.jetbrains.kotlin.generators.tree.TypeKind
import org.jetbrains.kotlin.generators.util.Node
import org.jetbrains.kotlin.generators.util.solveGraphForClassVsInterface
@@ -39,9 +40,9 @@ private fun updateKinds(nodes: List<NodeImpl>, solution: List<Boolean>) {
val element = nodes[index].element
if (isClass) {
check(element.targetKind != TypeKind.Interface) { element }
element.kind = Element.Kind.AbstractClass
element.kind = ImplementationKind.AbstractClass
} else {
element.kind = Element.Kind.Interface
element.kind = ImplementationKind.Interface
}
}
}
@@ -6,6 +6,7 @@
package org.jetbrains.kotlin.ir.generator.print
import com.squareup.kotlinpoet.*
import org.jetbrains.kotlin.generators.tree.ImplementationKind
import org.jetbrains.kotlin.generators.tree.TypeKind
import org.jetbrains.kotlin.ir.generator.BASE_PACKAGE
import org.jetbrains.kotlin.ir.generator.elementTransformerType
@@ -28,11 +29,11 @@ fun printElements(generationPath: File, model: Model) = sequence {
}.apply {
addModifiers(
when (element.kind) {
Element.Kind.SealedClass -> listOf(KModifier.SEALED)
Element.Kind.SealedInterface -> listOf(KModifier.SEALED)
Element.Kind.AbstractClass -> listOf(KModifier.ABSTRACT)
Element.Kind.FinalClass -> listOf(KModifier.FINAL)
Element.Kind.OpenClass -> listOf(KModifier.OPEN)
ImplementationKind.SealedClass -> listOf(KModifier.SEALED)
ImplementationKind.SealedInterface -> listOf(KModifier.SEALED)
ImplementationKind.AbstractClass -> listOf(KModifier.ABSTRACT)
ImplementationKind.FinalClass -> listOf(KModifier.FINAL)
ImplementationKind.OpenClass -> listOf(KModifier.OPEN)
else -> emptyList()
}
)