[IR generator] Simplify configuration of visitor parents

Don't specify a visitor parent manually for each IR node,
use an algorithm instead.
This commit is contained in:
Sergej Jaskiewicz
2023-11-14 15:56:57 +01:00
committed by Space Team
parent 62d32471e1
commit a5b5492b2d
14 changed files with 116 additions and 152 deletions
@@ -56,10 +56,16 @@ abstract class AbstractElement<Element, Field>(
*/
abstract val visitorParameterName: String
/**
* @see parentInVisitor
*/
var customParentInVisitor: Element? = null
/**
* The default element to visit if the method for visiting this element is not overridden.
*/
abstract val parentInVisitor: Element?
open val parentInVisitor: Element?
get() = customParentInVisitor ?: elementParents.singleOrNull()?.element?.takeIf { !it.isRootElement }
override val allParents: List<Element>
get() = elementParents.map { it.element }
@@ -92,7 +98,7 @@ abstract class AbstractElement<Element, Field>(
/**
* The return type of the corresponding transformer method for this element.
*
* By default, computed using [org.jetbrains.kotlin.generators.tree.detectBaseTransformerTypes], but can be customizaed via
* By default, computed using [org.jetbrains.kotlin.generators.tree.detectBaseTransformerTypes], but can be customized via
* [transformerReturnType]
*/
val transformerClass: Element
@@ -11,7 +11,7 @@ fun <Element : AbstractElement<Element, *>> Element.traverseParents(block: (Elem
}
/**
* For each tree element, sets its [AbstractElement.baseTransformerType] to one of it parents if that parent type is used at least once as
* For each tree element, sets its [AbstractElement.baseTransformerType] to one of its parents if that parent type is used at least once as
* a type of a field, except when that field is explicitly opted out of it via
* [AbstractField.useInBaseTransformerDetection].
*/