From 0465c6d0ee4ab3c455734b19222395e1aa7abcb9 Mon Sep 17 00:00:00 2001 From: Sergej Jaskiewicz Date: Tue, 14 Nov 2023 17:52:27 +0100 Subject: [PATCH] [FIR/IR generator] Make `InterfaceAndAbstractClassConfigurator` open --- .../jetbrains/kotlin/fir/tree/generator/Main.kt | 4 ++-- ... FirInterfaceAndAbstractClassConfigurator.kt} | 10 +++------- .../org/jetbrains/kotlin/ir/generator/Main.kt | 7 +++++-- .../configureInterfacesAndAbstractClasses.kt | 16 ---------------- .../InterfaceAndAbstractClassConfigurator.kt | 9 +++------ 5 files changed, 13 insertions(+), 33 deletions(-) rename compiler/fir/tree/tree-generator/src/org/jetbrains/kotlin/fir/tree/generator/util/{configureInterfacesAndAbstractClasses.kt => FirInterfaceAndAbstractClassConfigurator.kt} (63%) delete mode 100644 compiler/ir/ir.tree/tree-generator/src/org/jetbrains/kotlin/ir/generator/model/configureInterfacesAndAbstractClasses.kt diff --git a/compiler/fir/tree/tree-generator/src/org/jetbrains/kotlin/fir/tree/generator/Main.kt b/compiler/fir/tree/tree-generator/src/org/jetbrains/kotlin/fir/tree/generator/Main.kt index 076286507ff..ca35a2a9a62 100644 --- a/compiler/fir/tree/tree-generator/src/org/jetbrains/kotlin/fir/tree/generator/Main.kt +++ b/compiler/fir/tree/tree-generator/src/org/jetbrains/kotlin/fir/tree/generator/Main.kt @@ -7,7 +7,7 @@ package org.jetbrains.kotlin.fir.tree.generator import org.jetbrains.kotlin.fir.tree.generator.context.AbstractFirTreeBuilder import org.jetbrains.kotlin.fir.tree.generator.printer.generateElements -import org.jetbrains.kotlin.fir.tree.generator.util.configureInterfacesAndAbstractClasses +import org.jetbrains.kotlin.fir.tree.generator.util.FirInterfaceAndAbstractClassConfigurator import org.jetbrains.kotlin.generators.tree.Model import org.jetbrains.kotlin.generators.tree.detectBaseTransformerTypes import org.jetbrains.kotlin.generators.tree.addPureAbstractElement @@ -25,7 +25,7 @@ fun main(args: Array) { val model = Model(FirTreeBuilder.elements, AbstractFirTreeBuilder.baseFirElement) detectBaseTransformerTypes(model) ImplementationConfigurator.configureImplementations() - configureInterfacesAndAbstractClasses(FirTreeBuilder) + FirInterfaceAndAbstractClassConfigurator(FirTreeBuilder).configureInterfacesAndAbstractClasses() addPureAbstractElement(FirTreeBuilder.elements, pureAbstractElementType) BuilderConfigurator.configureBuilders() val previouslyGeneratedFiles = collectPreviouslyGeneratedFiles(generationPath) diff --git a/compiler/fir/tree/tree-generator/src/org/jetbrains/kotlin/fir/tree/generator/util/configureInterfacesAndAbstractClasses.kt b/compiler/fir/tree/tree-generator/src/org/jetbrains/kotlin/fir/tree/generator/util/FirInterfaceAndAbstractClassConfigurator.kt similarity index 63% rename from compiler/fir/tree/tree-generator/src/org/jetbrains/kotlin/fir/tree/generator/util/configureInterfacesAndAbstractClasses.kt rename to compiler/fir/tree/tree-generator/src/org/jetbrains/kotlin/fir/tree/generator/util/FirInterfaceAndAbstractClassConfigurator.kt index f84a1e1e395..62b4b30ff57 100644 --- a/compiler/fir/tree/tree-generator/src/org/jetbrains/kotlin/fir/tree/generator/util/configureInterfacesAndAbstractClasses.kt +++ b/compiler/fir/tree/tree-generator/src/org/jetbrains/kotlin/fir/tree/generator/util/FirInterfaceAndAbstractClassConfigurator.kt @@ -10,14 +10,10 @@ import org.jetbrains.kotlin.fir.tree.generator.model.Implementation import org.jetbrains.kotlin.generators.tree.ImplementationKindOwner import org.jetbrains.kotlin.generators.tree.InterfaceAndAbstractClassConfigurator -private class FirInterfaceAndAbstractClassConfigurator(builder: AbstractFirTreeBuilder) : InterfaceAndAbstractClassConfigurator() { - - override val elements: List = (builder.elements + builder.elements.flatMap { it.allImplementations }) - +internal class FirInterfaceAndAbstractClassConfigurator(builder: AbstractFirTreeBuilder) : InterfaceAndAbstractClassConfigurator( + elements = (builder.elements + builder.elements.flatMap { it.allImplementations }) +) { override fun shouldBeFinalClass(element: ImplementationKindOwner, allParents: Set): Boolean = element is Implementation && element !in allParents } -fun configureInterfacesAndAbstractClasses(builder: AbstractFirTreeBuilder) { - FirInterfaceAndAbstractClassConfigurator(builder).configureInterfacesAndAbstractClasses() -} diff --git a/compiler/ir/ir.tree/tree-generator/src/org/jetbrains/kotlin/ir/generator/Main.kt b/compiler/ir/ir.tree/tree-generator/src/org/jetbrains/kotlin/ir/generator/Main.kt index 0347d909b86..8c2e92918e0 100644 --- a/compiler/ir/ir.tree/tree-generator/src/org/jetbrains/kotlin/ir/generator/Main.kt +++ b/compiler/ir/ir.tree/tree-generator/src/org/jetbrains/kotlin/ir/generator/Main.kt @@ -5,11 +5,14 @@ package org.jetbrains.kotlin.ir.generator +import org.jetbrains.kotlin.generators.tree.InterfaceAndAbstractClassConfigurator import org.jetbrains.kotlin.generators.tree.addPureAbstractElement import org.jetbrains.kotlin.generators.util.GeneratorsFileUtil import org.jetbrains.kotlin.generators.util.GeneratorsFileUtil.collectPreviouslyGeneratedFiles import org.jetbrains.kotlin.generators.util.GeneratorsFileUtil.removeExtraFilesFromPreviousGeneration -import org.jetbrains.kotlin.ir.generator.model.* +import org.jetbrains.kotlin.ir.generator.model.addWalkableChildren +import org.jetbrains.kotlin.ir.generator.model.markLeaves +import org.jetbrains.kotlin.ir.generator.model.processFieldOverrides import org.jetbrains.kotlin.ir.generator.print.* import java.io.File @@ -23,7 +26,7 @@ fun main(args: Array) { val model = IrTree.build() - configureInterfacesAndAbstractClasses(model.elements) + InterfaceAndAbstractClassConfigurator(model.elements).configureInterfacesAndAbstractClasses() addPureAbstractElement(model.elements, elementBaseType) markLeaves(model.elements) processFieldOverrides(model.elements) diff --git a/compiler/ir/ir.tree/tree-generator/src/org/jetbrains/kotlin/ir/generator/model/configureInterfacesAndAbstractClasses.kt b/compiler/ir/ir.tree/tree-generator/src/org/jetbrains/kotlin/ir/generator/model/configureInterfacesAndAbstractClasses.kt deleted file mode 100644 index 490a5743959..00000000000 --- a/compiler/ir/ir.tree/tree-generator/src/org/jetbrains/kotlin/ir/generator/model/configureInterfacesAndAbstractClasses.kt +++ /dev/null @@ -1,16 +0,0 @@ -/* - * Copyright 2010-2021 JetBrains s.r.o. and Kotlin Programming Language contributors. - * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. - */ - -package org.jetbrains.kotlin.ir.generator.model - -import org.jetbrains.kotlin.generators.tree.ImplementationKindOwner -import org.jetbrains.kotlin.generators.tree.InterfaceAndAbstractClassConfigurator - -fun configureInterfacesAndAbstractClasses(elements: List) { - object : InterfaceAndAbstractClassConfigurator() { - override val elements: List - get() = elements - }.configureInterfacesAndAbstractClasses() -} diff --git a/generators/tree-generator-common/src/org/jetbrains/kotlin/generators/tree/InterfaceAndAbstractClassConfigurator.kt b/generators/tree-generator-common/src/org/jetbrains/kotlin/generators/tree/InterfaceAndAbstractClassConfigurator.kt index 241b3fac0f0..55750350a70 100644 --- a/generators/tree-generator-common/src/org/jetbrains/kotlin/generators/tree/InterfaceAndAbstractClassConfigurator.kt +++ b/generators/tree-generator-common/src/org/jetbrains/kotlin/generators/tree/InterfaceAndAbstractClassConfigurator.kt @@ -10,8 +10,10 @@ import org.jetbrains.kotlin.generators.util.solveGraphForClassVsInterface /** * Decides which element in the tree must be an (abstract) class, and which must be an interface. + * + * @property elements The list of elements of the tree to infer their [ImplementationKind]. */ -abstract class InterfaceAndAbstractClassConfigurator { +open class InterfaceAndAbstractClassConfigurator(val elements: List) { private inner class NodeImpl(val element: ImplementationKindOwner) : Node { override val parents: List @@ -25,11 +27,6 @@ abstract class InterfaceAndAbstractClassConfigurator { override fun hashCode(): Int = element.hashCode() } - /** - * The list of elements of the tree to infer their [ImplementationKind]. - */ - protected abstract val elements: List - /** * If [element]'s kind was inferred as abstract class, allows to forcibly make that element a final class instead. */