[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 package org.jetbrains.kotlin.ir.generator.model
import com.squareup.kotlinpoet.CodeBlock 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.ElementConfig
import org.jetbrains.kotlin.ir.generator.config.FieldConfig import org.jetbrains.kotlin.ir.generator.config.FieldConfig
import org.jetbrains.kotlin.ir.generator.util.* import org.jetbrains.kotlin.ir.generator.util.*
@@ -25,7 +25,7 @@ class Element(
var visitorParent: ElementRef? = null var visitorParent: ElementRef? = null
var transformerReturnType: Element? = null var transformerReturnType: Element? = null
val targetKind = config.typeKind val targetKind = config.typeKind
var kind: Kind? = null var kind: ImplementationKind? = null
val typeName val typeName
get() = elementName2typeName(name) get() = elementName2typeName(name)
val allParents: List<ClassOrElementRef> val allParents: List<ClassOrElementRef>
@@ -51,15 +51,6 @@ class Element(
override fun toString() = name 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 { companion object {
fun elementName2typeName(name: String) = "Ir" + name.replaceFirstChar(Char::uppercaseChar) fun elementName2typeName(name: String) = "Ir" + name.replaceFirstChar(Char::uppercaseChar)
} }
@@ -5,6 +5,7 @@
package org.jetbrains.kotlin.ir.generator.model 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.tree.TypeKind
import org.jetbrains.kotlin.generators.util.Node import org.jetbrains.kotlin.generators.util.Node
import org.jetbrains.kotlin.generators.util.solveGraphForClassVsInterface 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 val element = nodes[index].element
if (isClass) { if (isClass) {
check(element.targetKind != TypeKind.Interface) { element } check(element.targetKind != TypeKind.Interface) { element }
element.kind = Element.Kind.AbstractClass element.kind = ImplementationKind.AbstractClass
} else { } else {
element.kind = Element.Kind.Interface element.kind = ImplementationKind.Interface
} }
} }
} }
@@ -6,6 +6,7 @@
package org.jetbrains.kotlin.ir.generator.print package org.jetbrains.kotlin.ir.generator.print
import com.squareup.kotlinpoet.* import com.squareup.kotlinpoet.*
import org.jetbrains.kotlin.generators.tree.ImplementationKind
import org.jetbrains.kotlin.generators.tree.TypeKind import org.jetbrains.kotlin.generators.tree.TypeKind
import org.jetbrains.kotlin.ir.generator.BASE_PACKAGE import org.jetbrains.kotlin.ir.generator.BASE_PACKAGE
import org.jetbrains.kotlin.ir.generator.elementTransformerType import org.jetbrains.kotlin.ir.generator.elementTransformerType
@@ -28,11 +29,11 @@ fun printElements(generationPath: File, model: Model) = sequence {
}.apply { }.apply {
addModifiers( addModifiers(
when (element.kind) { when (element.kind) {
Element.Kind.SealedClass -> listOf(KModifier.SEALED) ImplementationKind.SealedClass -> listOf(KModifier.SEALED)
Element.Kind.SealedInterface -> listOf(KModifier.SEALED) ImplementationKind.SealedInterface -> listOf(KModifier.SEALED)
Element.Kind.AbstractClass -> listOf(KModifier.ABSTRACT) ImplementationKind.AbstractClass -> listOf(KModifier.ABSTRACT)
Element.Kind.FinalClass -> listOf(KModifier.FINAL) ImplementationKind.FinalClass -> listOf(KModifier.FINAL)
Element.Kind.OpenClass -> listOf(KModifier.OPEN) ImplementationKind.OpenClass -> listOf(KModifier.OPEN)
else -> emptyList() else -> emptyList()
} }
) )