[IR generator] Use Element#typeName i/o Element#name where needed
This slightly reduces repetition.
This commit is contained in:
committed by
Space Team
parent
6ac4cd5973
commit
8ba42a7ff2
@@ -16,8 +16,9 @@ import org.jetbrains.kotlin.generators.tree.printer.printFunctionWithBlockBody
|
||||
import org.jetbrains.kotlin.ir.generator.config.AbstractTreeBuilder
|
||||
import org.jetbrains.kotlin.ir.generator.model.Element
|
||||
import org.jetbrains.kotlin.ir.generator.model.Element.Category.*
|
||||
import org.jetbrains.kotlin.ir.generator.model.Element.Companion.elementName2typeName
|
||||
import org.jetbrains.kotlin.ir.generator.model.ListField.Mutability.*
|
||||
import org.jetbrains.kotlin.ir.generator.model.ListField.Mutability.Array
|
||||
import org.jetbrains.kotlin.ir.generator.model.ListField.Mutability.List
|
||||
import org.jetbrains.kotlin.ir.generator.model.SingleField
|
||||
import org.jetbrains.kotlin.name.FqName
|
||||
import org.jetbrains.kotlin.name.Name
|
||||
@@ -141,11 +142,11 @@ object IrTree : AbstractTreeBuilder() {
|
||||
kDoc = """
|
||||
The arbitrary metadata associated with this IR node.
|
||||
|
||||
@see ${elementName2typeName(this@element.name)}
|
||||
@see $typeName
|
||||
""".trimIndent()
|
||||
}
|
||||
kDoc = """
|
||||
An [${elementName2typeName(rootElement.name)}] capable of holding something which backends can use to write
|
||||
An [${rootElement.typeName}] capable of holding something which backends can use to write
|
||||
as the metadata for the declaration.
|
||||
|
||||
Technically, it can even be ± an array of bytes, but right now it's usually the frontend representation of the declaration,
|
||||
@@ -224,7 +225,7 @@ object IrTree : AbstractTreeBuilder() {
|
||||
fun foo(defined: Int, ${'$'}extra: String) { /* ... */ }
|
||||
```
|
||||
|
||||
If a compiler plugin adds parameters to an [${elementName2typeName(function.name)}],
|
||||
If a compiler plugin adds parameters to an [${function.typeName}],
|
||||
the representations of the function in the frontend and in the backend may diverge, potentially causing signature mismatch and
|
||||
linkage errors (see [KT-40980](https://youtrack.jetbrains.com/issue/KT-40980)).
|
||||
We wouldn't want IR plugins to affect the frontend representation, since in an IDE you'd want to be able to see those
|
||||
@@ -299,7 +300,7 @@ object IrTree : AbstractTreeBuilder() {
|
||||
If this is a sealed class or interface, this list contains symbols of all its immediate subclasses.
|
||||
Otherwise, this is an empty list.
|
||||
|
||||
NOTE: If this [${elementName2typeName(this@element.name)}] was deserialized from a klib, this list will always be empty!
|
||||
NOTE: If this [$typeName] was deserialized from a klib, this list will always be empty!
|
||||
See [KT-54028](https://youtrack.jetbrains.com/issue/KT-54028).
|
||||
""".trimIndent()
|
||||
}
|
||||
|
||||
+1
-5
@@ -68,7 +68,7 @@ class Element(
|
||||
override var kind: ImplementationKind? = null
|
||||
|
||||
override val typeName
|
||||
get() = elementName2typeName(name)
|
||||
get() = "Ir" + name.replaceFirstChar(Char::uppercaseChar)
|
||||
|
||||
/**
|
||||
* Whether this element is semantically a leaf element in the hierarchy.
|
||||
@@ -113,10 +113,6 @@ class Element(
|
||||
|
||||
override fun toString() = name
|
||||
|
||||
companion object {
|
||||
fun elementName2typeName(name: String) = "Ir" + name.replaceFirstChar(Char::uppercaseChar)
|
||||
}
|
||||
|
||||
fun elementParentsRecursively(): List<ElementRef> {
|
||||
val linkedSet = buildSet {
|
||||
fun recurse(element: Element) {
|
||||
|
||||
+5
-5
@@ -133,7 +133,7 @@ private class TransformerVoidPrinter(
|
||||
|
||||
// IrPackageFragment is treated as transformByChildren in IrElementTransformerVoid for historical reasons.
|
||||
private val Element.isPackageFragment: Boolean
|
||||
get() = name == IrTree.packageFragment.name
|
||||
get() = this == IrTree.packageFragment
|
||||
|
||||
// Despite IrFile and IrExternalPackageFragment being transformByChildren, we treat them differently in IrElementTransformerVoid
|
||||
// than in IrElementTransformer for historical reasons. We want to preserve the historical semantics here.
|
||||
@@ -325,11 +325,11 @@ private class TypeTransformerPrinter(
|
||||
}
|
||||
|
||||
printBlock {
|
||||
when (element.name) {
|
||||
IrTree.memberAccessExpression.name -> {
|
||||
when (element) {
|
||||
IrTree.memberAccessExpression -> {
|
||||
if (irTypeFields.singleOrNull()?.name != "typeArguments") {
|
||||
error(
|
||||
"""`Ir${IrTree.memberAccessExpression.name.capitalizeAsciiOnly()}` has unexpected fields with `IrType` type.
|
||||
"""`${IrTree.memberAccessExpression.typeName}` has unexpected fields with `IrType` type.
|
||||
|Please adjust logic of `${visitorType.simpleName}`'s generation.""".trimMargin()
|
||||
)
|
||||
}
|
||||
@@ -348,7 +348,7 @@ private class TypeTransformerPrinter(
|
||||
}
|
||||
println("}")
|
||||
}
|
||||
IrTree.`class`.name -> {
|
||||
IrTree.`class` -> {
|
||||
println(visitorParam, ".valueClassRepresentation?.mapUnderlyingType {")
|
||||
withIndent {
|
||||
println("transformType(", visitorParam, ", it, data)")
|
||||
|
||||
Reference in New Issue
Block a user