[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:
committed by
Space Team
parent
62d32471e1
commit
a5b5492b2d
+8
-2
@@ -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].
|
||||
*/
|
||||
|
||||
Reference in New Issue
Block a user