diff --git a/compiler/fir/tree/tree-generator/src/org/jetbrains/kotlin/fir/tree/generator/model/Element.kt b/compiler/fir/tree/tree-generator/src/org/jetbrains/kotlin/fir/tree/generator/model/Element.kt index e8d171c9d88..4d496bb9165 100644 --- a/compiler/fir/tree/tree-generator/src/org/jetbrains/kotlin/fir/tree/generator/model/Element.kt +++ b/compiler/fir/tree/tree-generator/src/org/jetbrains/kotlin/fir/tree/generator/model/Element.kt @@ -12,7 +12,7 @@ import org.jetbrains.kotlin.generators.tree.* import org.jetbrains.kotlin.generators.tree.ElementOrRef as GenericElementOrRef import org.jetbrains.kotlin.generators.tree.ElementRef as GenericElementRef -class Element(override val name: String, override val propertyName: String, kind: Kind) : AbstractElement() { +class Element(name: String, override val propertyName: String, kind: Kind) : AbstractElement(name) { companion object { private val allowedKinds = setOf( ImplementationKind.Interface, @@ -79,9 +79,6 @@ class Element(override val name: String, override val propertyName: String, kind var baseTransformerType: Element? = null val transformerClass: Element get() = baseTransformerType ?: this - override val visitFunctionName: String - get() = "visit$name" - override val visitorParameterName: String get() = safeDecapitalizedName diff --git a/compiler/ir/ir.tree/tree-generator/src/org/jetbrains/kotlin/ir/generator/IrTree.kt b/compiler/ir/ir.tree/tree-generator/src/org/jetbrains/kotlin/ir/generator/IrTree.kt index 4a4e6e985b6..d8a6ba5e7a5 100644 --- a/compiler/ir/ir.tree/tree-generator/src/org/jetbrains/kotlin/ir/generator/IrTree.kt +++ b/compiler/ir/ir.tree/tree-generator/src/org/jetbrains/kotlin/ir/generator/IrTree.kt @@ -71,7 +71,7 @@ object IrTree : AbstractTreeBuilder() { skipInIrFactory() } - override val rootElement: Element by element(Other, name = "element") { + override val rootElement: Element by element(Other, name = "Element") { hasAcceptMethod = true hasTransformMethod = true transformByChildren = true @@ -111,7 +111,7 @@ object IrTree : AbstractTreeBuilder() { transformByChildren = true transformerReturnType = statement parentInVisitor = rootElement - visitorName = "declaration" + nameInVisitorMethod = "Declaration" parent(declaration) } @@ -731,7 +731,7 @@ object IrTree : AbstractTreeBuilder() { } val memberAccessExpression: Element by element(Expression) { parentInVisitor = declarationReference - visitorName = "memberAccess" + nameInVisitorMethod = "MemberAccess" transformerReturnType = rootElement val s = +param("S", symbolType) @@ -813,7 +813,7 @@ object IrTree : AbstractTreeBuilder() { } val functionAccessExpression: Element by element(Expression) { parentInVisitor = memberAccessExpression - visitorName = "functionAccess" + nameInVisitorMethod = "FunctionAccess" transformerReturnType = rootElement parent(memberAccessExpression.withArgs("S" to functionSymbolType)) @@ -834,7 +834,7 @@ object IrTree : AbstractTreeBuilder() { } val getSingletonValue: Element by element(Expression) { parentInVisitor = declarationReference - visitorName = "SingletonReference" + nameInVisitorMethod = "SingletonReference" parent(declarationReference) } @@ -1092,7 +1092,7 @@ object IrTree : AbstractTreeBuilder() { } val fieldAccessExpression: Element by element(Expression) { parentInVisitor = declarationReference - visitorName = "fieldAccess" + nameInVisitorMethod = "FieldAccess" ownsChildren = false parent(declarationReference) @@ -1228,7 +1228,7 @@ object IrTree : AbstractTreeBuilder() { } val typeOperatorCall: Element by element(Expression) { parentInVisitor = expression - visitorName = "typeOperator" + nameInVisitorMethod = "TypeOperator" parent(expression) @@ -1238,7 +1238,7 @@ object IrTree : AbstractTreeBuilder() { } val valueAccessExpression: Element by element(Expression) { parentInVisitor = declarationReference - visitorName = "valueAccess" + nameInVisitorMethod = "ValueAccess" parent(declarationReference) diff --git a/compiler/ir/ir.tree/tree-generator/src/org/jetbrains/kotlin/ir/generator/config/AbstractTreeBuilder.kt b/compiler/ir/ir.tree/tree-generator/src/org/jetbrains/kotlin/ir/generator/config/AbstractTreeBuilder.kt index 252f2d45d28..fcfeeec4959 100644 --- a/compiler/ir/ir.tree/tree-generator/src/org/jetbrains/kotlin/ir/generator/config/AbstractTreeBuilder.kt +++ b/compiler/ir/ir.tree/tree-generator/src/org/jetbrains/kotlin/ir/generator/config/AbstractTreeBuilder.kt @@ -122,7 +122,7 @@ class ElementDelegate( override fun provideDelegate(thisRef: AbstractTreeBuilder, property: KProperty<*>): ElementDelegate { val path = thisRef.javaClass.name + "." + property.name - element = Element(name ?: property.name, path, category) + element = Element(name ?: property.name.replaceFirstChar(Char::uppercaseChar), path, category) return this } } diff --git a/compiler/ir/ir.tree/tree-generator/src/org/jetbrains/kotlin/ir/generator/model/Model.kt b/compiler/ir/ir.tree/tree-generator/src/org/jetbrains/kotlin/ir/generator/model/Model.kt index e05ae23ed4c..72f0d011486 100644 --- a/compiler/ir/ir.tree/tree-generator/src/org/jetbrains/kotlin/ir/generator/model/Model.kt +++ b/compiler/ir/ir.tree/tree-generator/src/org/jetbrains/kotlin/ir/generator/model/Model.kt @@ -13,10 +13,10 @@ import org.jetbrains.kotlin.generators.tree.ElementOrRef as GenericElementOrRef import org.jetbrains.kotlin.generators.tree.ElementRef as GenericElementRef class Element( - override val name: String, + name: String, override val propertyName: String, category: Category, -) : AbstractElement() { +) : AbstractElement(name) { enum class Category(private val packageDir: String, val defaultVisitorParam: String) { Expression("expressions", "expression"), @@ -67,8 +67,7 @@ class Element( override var kind: ImplementationKind? = null - override val typeName - get() = "Ir" + name.replaceFirstChar(Char::uppercaseChar) + override val typeName = "Ir$name" /** * Whether this element is semantically a leaf element in the hierarchy. @@ -85,11 +84,6 @@ class Element( override var walkableChildren: List = emptyList() override val transformableChildren get() = walkableChildren.filter { it.transformable } - var visitorName: String? = null - - override val visitFunctionName: String - get() = "visit" + (visitorName ?: name).replaceFirstChar(Char::uppercaseChar) - override var visitorParameterName = category.defaultVisitorParam override var hasAcceptMethod = false // By default, accept is generated only for leaves. diff --git a/generators/tree-generator-common/src/org/jetbrains/kotlin/generators/tree/AbstractElement.kt b/generators/tree-generator-common/src/org/jetbrains/kotlin/generators/tree/AbstractElement.kt index ba342c830d1..4eb27e8761e 100644 --- a/generators/tree-generator-common/src/org/jetbrains/kotlin/generators/tree/AbstractElement.kt +++ b/generators/tree-generator-common/src/org/jetbrains/kotlin/generators/tree/AbstractElement.kt @@ -8,12 +8,12 @@ package org.jetbrains.kotlin.generators.tree /** * A class representing a FIR or IR tree element. */ -abstract class AbstractElement : ElementOrRef, FieldContainer, ImplementationKindOwner +abstract class AbstractElement( + val name: String, +) : ElementOrRef, FieldContainer, ImplementationKindOwner where Element : AbstractElement, Field : AbstractField { - abstract val name: String - /** * The fully-qualified name of the property in the tree generator that is used to configure this element. */ @@ -38,10 +38,18 @@ abstract class AbstractElement : ElementOrRef, F open val isSealed: Boolean get() = false + /** + * The value of this property will be used to name a `visit*` method for this element in visitor classes. + * + * In `visit*`, the `*` will be replaced with the value of this property. + */ + var nameInVisitorMethod: String = name + /** * The name of the method in visitors used to visit this element. */ - abstract val visitFunctionName: String + val visitFunctionName: String + get() = "visit$nameInVisitorMethod" /** * The name of the parameter representing this element in the visitor method used to visit this element.