[FIR generator] Extract BaseTransformerTypeFinder into the common module
We want to use it in other tree generators.
This commit is contained in:
committed by
Space Team
parent
7787b53b4a
commit
62d32471e1
+2
-1
@@ -8,6 +8,7 @@ package org.jetbrains.kotlin.ir.generator.config
|
||||
import org.jetbrains.kotlin.generators.tree.*
|
||||
import org.jetbrains.kotlin.ir.generator.model.*
|
||||
import org.jetbrains.kotlin.ir.generator.model.ElementRef
|
||||
import org.jetbrains.kotlin.ir.generator.model.ListField
|
||||
import org.jetbrains.kotlin.ir.generator.model.Model
|
||||
import org.jetbrains.kotlin.types.Variance
|
||||
import kotlin.properties.PropertyDelegateProvider
|
||||
@@ -81,7 +82,7 @@ abstract class AbstractTreeBuilder {
|
||||
}
|
||||
return ListField(
|
||||
name = name,
|
||||
elementType = elementType ?: InferredOverriddenType,
|
||||
baseType = elementType ?: InferredOverriddenType,
|
||||
listType = listType,
|
||||
isNullable = nullable,
|
||||
mutable = mutability == ListField.Mutability.Var,
|
||||
|
||||
+6
-6
@@ -6,6 +6,7 @@
|
||||
package org.jetbrains.kotlin.ir.generator.model
|
||||
|
||||
import org.jetbrains.kotlin.generators.tree.*
|
||||
import org.jetbrains.kotlin.generators.tree.ListField as AbstractListField
|
||||
import org.jetbrains.kotlin.ir.generator.BASE_PACKAGE
|
||||
import org.jetbrains.kotlin.utils.SmartPrinter
|
||||
import org.jetbrains.kotlin.utils.topologicalSort
|
||||
@@ -53,7 +54,6 @@ class Element(
|
||||
get() = emptyMap()
|
||||
|
||||
override var parentInVisitor: Element? = null
|
||||
var transformerReturnType: Element? = null
|
||||
|
||||
var typeKind: TypeKind? = null
|
||||
set(value) {
|
||||
@@ -197,16 +197,16 @@ class SingleField(
|
||||
|
||||
class ListField(
|
||||
name: String,
|
||||
var elementType: TypeRef,
|
||||
override var baseType: TypeRef,
|
||||
private val isNullable: Boolean,
|
||||
private val listType: ClassRef<PositionTypeParameterRef>,
|
||||
override val listType: ClassRef<PositionTypeParameterRef>,
|
||||
mutable: Boolean,
|
||||
isChild: Boolean,
|
||||
override val transformable: Boolean,
|
||||
) : Field(name, mutable, isChild) {
|
||||
) : Field(name, mutable, isChild), AbstractListField {
|
||||
|
||||
override val typeRef: TypeRefWithNullability
|
||||
get() = listType.withArgs(elementType).copy(isNullable)
|
||||
override val typeRef: ClassRef<PositionTypeParameterRef>
|
||||
get() = listType.withArgs(baseType).copy(isNullable)
|
||||
|
||||
enum class Mutability {
|
||||
Immutable,
|
||||
|
||||
+1
-1
@@ -61,7 +61,7 @@ internal fun processFieldOverrides(elements: List<Element>) {
|
||||
transformInferredType(field.typeRef, (overriddenField as SingleField).typeRef) as TypeRefWithNullability
|
||||
}
|
||||
is ListField -> {
|
||||
field.elementType = transformInferredType(field.elementType, (overriddenField as ListField).elementType)
|
||||
field.baseType = transformInferredType(field.baseType, (overriddenField as ListField).baseType)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
+2
-1
@@ -12,6 +12,7 @@ import org.jetbrains.kotlin.ir.generator.TREE_GENERATOR_README
|
||||
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.ir.generator.model.ListField
|
||||
import org.jetbrains.kotlin.ir.generator.model.Model
|
||||
import org.jetbrains.kotlin.utils.SmartPrinter
|
||||
import org.jetbrains.kotlin.utils.withIndent
|
||||
@@ -71,7 +72,7 @@ private class ElementPrinter(printer: SmartPrinter) : AbstractElementPrinter<Ele
|
||||
is SingleField -> println(".accept(visitor, data)")
|
||||
is ListField -> {
|
||||
print(".forEach { it")
|
||||
if (child.elementType.nullable) {
|
||||
if (child.baseType.nullable) {
|
||||
print("?")
|
||||
}
|
||||
println(".accept(visitor, data) }")
|
||||
|
||||
+2
-1
@@ -10,6 +10,7 @@ import org.jetbrains.kotlin.generators.tree.*
|
||||
import org.jetbrains.kotlin.generators.tree.printer.*
|
||||
import org.jetbrains.kotlin.ir.generator.*
|
||||
import org.jetbrains.kotlin.ir.generator.model.*
|
||||
import org.jetbrains.kotlin.ir.generator.model.ListField
|
||||
import org.jetbrains.kotlin.ir.generator.model.Model
|
||||
import org.jetbrains.kotlin.util.capitalizeDecapitalize.capitalizeAsciiOnly
|
||||
import org.jetbrains.kotlin.utils.SmartPrinter
|
||||
@@ -270,7 +271,7 @@ private class TypeTransformerPrinter(
|
||||
.filter {
|
||||
val type = when (it) {
|
||||
is SingleField -> it.typeRef
|
||||
is ListField -> it.elementType
|
||||
is ListField -> it.baseType
|
||||
}
|
||||
type.toString() == irTypeType.toString()
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user