[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
@@ -23,7 +23,7 @@ class Element(
val additionalFactoryMethodParameters: MutableList<Field>,
) : AbstractElement<Element, Field>() {
override var elementParents: List<ElementRef> = emptyList()
override var otherParents: List<ClassRef<*>> = emptyList()
override var otherParents: MutableList<ClassRef<*>> = mutableListOf()
override val allFields: List<Field>
get() = fields.toList()
@@ -44,7 +44,7 @@ fun config2model(config: Config): Model {
val rootElement = replaceElementRefs(config, ec2el)
configureInterfacesAndAbstractClasses(elements)
addAbstractElement(elements)
addPureAbstractElement(elements, elementBaseType)
markLeaves(elements)
configureDescriptorApiAnnotation(elements)
processFieldOverrides(elements)
@@ -120,7 +120,7 @@ private fun replaceElementRefs(config: Config, mapping: Map<ElementConfig, Eleme
.map { transform(it) }
.partitionIsInstance<TypeRef, ElementRef>()
el.elementParents = elParents.takeIf { it.isNotEmpty() || el == rootEl.element } ?: listOf(rootEl)
el.otherParents = otherParents.castAll<ClassRef<*>>().toList()
el.otherParents = otherParents.castAll<ClassRef<*>>().toMutableList()
el.visitorParent = ec.visitorParent?.let(::transform) as GenericElementRef<Element, Field>?
el.transformerReturnType = (ec.transformerReturnType?.let(::transform) as GenericElementRef<Element, Field>?)?.element
@@ -158,14 +158,6 @@ private fun markLeaves(elements: List<Element>) {
}
}
private fun addAbstractElement(elements: List<Element>) {
for (el in elements) {
if (el.needPureAbstractElement) {
el.otherParents += elementBaseType
}
}
}
private fun configureDescriptorApiAnnotation(elements: List<Element>) {
for (el in elements) {
for (field in el.fields) {
@@ -13,6 +13,7 @@ import org.jetbrains.kotlin.ir.generator.elementTransformerType
import org.jetbrains.kotlin.ir.generator.elementVisitorType
import org.jetbrains.kotlin.ir.generator.model.*
import org.jetbrains.kotlin.generators.tree.TypeRefWithNullability
import org.jetbrains.kotlin.generators.tree.typeKind
import org.jetbrains.kotlin.ir.generator.util.tryParameterizedBy
import java.io.File
import org.jetbrains.kotlin.generators.tree.ElementRef as GenericElementRef
@@ -13,7 +13,6 @@ import org.jetbrains.kotlin.ir.generator.model.Element.Companion.elementName2typ
import org.jetbrains.kotlin.ir.generator.util.*
import org.jetbrains.kotlin.types.Variance
import org.jetbrains.kotlin.generators.tree.ElementRef as GenericElementRef
import org.jetbrains.kotlin.generators.tree.ElementOrRef as GenericElementOrRef
fun Element.toPoet() = ClassName(packageName, typeName)
fun Element.toPoetSelfParameterized() = toPoet().parameterizedByIfAny(poetTypeVariables)
@@ -67,8 +66,3 @@ fun TypeVariable.toPoet() = TypeVariableName(
}
)
val ClassOrElementRef.typeKind: TypeKind
get() = when (this) {
is GenericElementOrRef<*, *> -> element.kind!!.typeKind
is ClassRef<*> -> kind
}