[FIR/IR generator] Introduce ImportCollector
This class enables printing the import list in generated files in a smarter way. Also, refactor `Importable` interface hierarchy, namely, don't inherit `TypeRef` from `Importable`, since we have types like `TypeRef.Star` which are not really importable. Replace the `Importable#typeWithArguments` property with the `TypeRef#render` method to utilize `ImportCollector` while rendering types.
This commit is contained in:
committed by
Space Team
parent
bec6d38490
commit
7b7bcb8ffa
+8
-11
@@ -10,7 +10,6 @@ import com.squareup.kotlinpoet.PropertySpec
|
||||
import com.squareup.kotlinpoet.TypeSpec
|
||||
import org.jetbrains.kotlin.generators.tree.*
|
||||
import org.jetbrains.kotlin.ir.generator.BASE_PACKAGE
|
||||
import org.jetbrains.kotlin.ir.generator.model.Element
|
||||
import org.jetbrains.kotlin.ir.generator.util.*
|
||||
|
||||
class Config(
|
||||
@@ -74,11 +73,10 @@ class ElementConfig(
|
||||
|
||||
override fun toString() = element.name
|
||||
|
||||
override val packageName: String
|
||||
get() = category.packageName
|
||||
|
||||
override val type: String
|
||||
get() = Element.elementName2typeName(name)
|
||||
context(ImportCollector)
|
||||
override fun renderTo(appendable: Appendable) {
|
||||
renderingIsNotSupported()
|
||||
}
|
||||
|
||||
enum class Category(private val packageDir: String, val defaultVisitorParam: String) {
|
||||
Expression("expressions", "expression"),
|
||||
@@ -103,11 +101,10 @@ class ElementConfigRef(
|
||||
|
||||
override fun toString() = element.name
|
||||
|
||||
override val type: String
|
||||
get() = element.type
|
||||
|
||||
override val packageName: String
|
||||
get() = element.packageName
|
||||
context(ImportCollector)
|
||||
override fun renderTo(appendable: Appendable) {
|
||||
renderingIsNotSupported()
|
||||
}
|
||||
}
|
||||
|
||||
sealed class UseFieldAsParameterInIrFactoryStrategy {
|
||||
|
||||
+1
-4
@@ -46,12 +46,9 @@ class Element(
|
||||
null -> null
|
||||
}
|
||||
|
||||
val typeName
|
||||
override val typeName
|
||||
get() = elementName2typeName(name)
|
||||
|
||||
override val type: String
|
||||
get() = typeName
|
||||
|
||||
var isLeaf = config.isForcedLeaf
|
||||
val childrenOrderOverride: List<String>? = config.childrenOrderOverride
|
||||
override var walkableChildren: List<Field> = emptyList()
|
||||
|
||||
+4
-6
@@ -14,13 +14,11 @@ import org.jetbrains.kotlin.utils.addToStdlib.partitionIsInstance
|
||||
import org.jetbrains.kotlin.generators.tree.ElementRef as GenericElementRef
|
||||
|
||||
private object InferredOverriddenType : TypeRefWithNullability {
|
||||
override val type: String
|
||||
get() = error("not supported")
|
||||
override val packageName: String?
|
||||
get() = null
|
||||
|
||||
override val typeWithArguments: String
|
||||
get() = error("not supported")
|
||||
context(ImportCollector)
|
||||
override fun renderTo(appendable: Appendable) {
|
||||
renderingIsNotSupported()
|
||||
}
|
||||
|
||||
override fun substitute(map: TypeParameterSubstitutionMap) = this
|
||||
|
||||
|
||||
+2
-2
@@ -14,14 +14,14 @@ import org.jetbrains.kotlin.ir.generator.util.*
|
||||
import org.jetbrains.kotlin.types.Variance
|
||||
import org.jetbrains.kotlin.generators.tree.ElementRef as GenericElementRef
|
||||
|
||||
fun Element.toPoet() = ClassName(packageName, typeName)
|
||||
fun Element.toPoet() = ClassName(packageName, this.typeName)
|
||||
fun Element.toPoetSelfParameterized() = toPoet().parameterizedByIfAny(poetTypeVariables)
|
||||
fun Element.toPoetStarParameterized() = toPoet().parameterizedByIfAny(List(params.size) { STAR })
|
||||
val Element.poetTypeVariables get() = params.map { TypeVariableName(it.name) }
|
||||
|
||||
fun TypeRef.toPoet(): TypeName {
|
||||
return when (this) {
|
||||
is GenericElementRef<*, *> -> ClassName(element.packageName!!, element.type).parameterizedByIfAny(typeArgsToPoet())
|
||||
is GenericElementRef<*, *> -> ClassName(element.packageName, element.typeName).parameterizedByIfAny(typeArgsToPoet())
|
||||
is ClassRef<*> -> ClassName(packageName, simpleNames).parameterizedByIfAny(typeArgsToPoet())
|
||||
is NamedTypeParameterRef -> TypeVariableName(name)
|
||||
is ElementConfigOrRef -> ClassName(this.element.category.packageName, elementName2typeName(element.name)).parameterizedByIfAny(
|
||||
|
||||
Reference in New Issue
Block a user