[FIR/IR generator] Make InterfaceAndAbstractClassConfigurator open
This commit is contained in:
committed by
Space Team
parent
d5fa755e63
commit
0465c6d0ee
+2
-2
@@ -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.context.AbstractFirTreeBuilder
|
||||||
import org.jetbrains.kotlin.fir.tree.generator.printer.generateElements
|
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.Model
|
||||||
import org.jetbrains.kotlin.generators.tree.detectBaseTransformerTypes
|
import org.jetbrains.kotlin.generators.tree.detectBaseTransformerTypes
|
||||||
import org.jetbrains.kotlin.generators.tree.addPureAbstractElement
|
import org.jetbrains.kotlin.generators.tree.addPureAbstractElement
|
||||||
@@ -25,7 +25,7 @@ fun main(args: Array<String>) {
|
|||||||
val model = Model(FirTreeBuilder.elements, AbstractFirTreeBuilder.baseFirElement)
|
val model = Model(FirTreeBuilder.elements, AbstractFirTreeBuilder.baseFirElement)
|
||||||
detectBaseTransformerTypes(model)
|
detectBaseTransformerTypes(model)
|
||||||
ImplementationConfigurator.configureImplementations()
|
ImplementationConfigurator.configureImplementations()
|
||||||
configureInterfacesAndAbstractClasses(FirTreeBuilder)
|
FirInterfaceAndAbstractClassConfigurator(FirTreeBuilder).configureInterfacesAndAbstractClasses()
|
||||||
addPureAbstractElement(FirTreeBuilder.elements, pureAbstractElementType)
|
addPureAbstractElement(FirTreeBuilder.elements, pureAbstractElementType)
|
||||||
BuilderConfigurator.configureBuilders()
|
BuilderConfigurator.configureBuilders()
|
||||||
val previouslyGeneratedFiles = collectPreviouslyGeneratedFiles(generationPath)
|
val previouslyGeneratedFiles = collectPreviouslyGeneratedFiles(generationPath)
|
||||||
|
|||||||
+3
-7
@@ -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.ImplementationKindOwner
|
||||||
import org.jetbrains.kotlin.generators.tree.InterfaceAndAbstractClassConfigurator
|
import org.jetbrains.kotlin.generators.tree.InterfaceAndAbstractClassConfigurator
|
||||||
|
|
||||||
private class FirInterfaceAndAbstractClassConfigurator(builder: AbstractFirTreeBuilder) : InterfaceAndAbstractClassConfigurator() {
|
internal class FirInterfaceAndAbstractClassConfigurator(builder: AbstractFirTreeBuilder) : InterfaceAndAbstractClassConfigurator(
|
||||||
|
elements = (builder.elements + builder.elements.flatMap { it.allImplementations })
|
||||||
override val elements: List<ImplementationKindOwner> = (builder.elements + builder.elements.flatMap { it.allImplementations })
|
) {
|
||||||
|
|
||||||
override fun shouldBeFinalClass(element: ImplementationKindOwner, allParents: Set<ImplementationKindOwner>): Boolean =
|
override fun shouldBeFinalClass(element: ImplementationKindOwner, allParents: Set<ImplementationKindOwner>): Boolean =
|
||||||
element is Implementation && element !in allParents
|
element is Implementation && element !in allParents
|
||||||
}
|
}
|
||||||
|
|
||||||
fun configureInterfacesAndAbstractClasses(builder: AbstractFirTreeBuilder) {
|
|
||||||
FirInterfaceAndAbstractClassConfigurator(builder).configureInterfacesAndAbstractClasses()
|
|
||||||
}
|
|
||||||
@@ -5,11 +5,14 @@
|
|||||||
|
|
||||||
package org.jetbrains.kotlin.ir.generator
|
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.tree.addPureAbstractElement
|
||||||
import org.jetbrains.kotlin.generators.util.GeneratorsFileUtil
|
import org.jetbrains.kotlin.generators.util.GeneratorsFileUtil
|
||||||
import org.jetbrains.kotlin.generators.util.GeneratorsFileUtil.collectPreviouslyGeneratedFiles
|
import org.jetbrains.kotlin.generators.util.GeneratorsFileUtil.collectPreviouslyGeneratedFiles
|
||||||
import org.jetbrains.kotlin.generators.util.GeneratorsFileUtil.removeExtraFilesFromPreviousGeneration
|
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 org.jetbrains.kotlin.ir.generator.print.*
|
||||||
import java.io.File
|
import java.io.File
|
||||||
|
|
||||||
@@ -23,7 +26,7 @@ fun main(args: Array<String>) {
|
|||||||
|
|
||||||
val model = IrTree.build()
|
val model = IrTree.build()
|
||||||
|
|
||||||
configureInterfacesAndAbstractClasses(model.elements)
|
InterfaceAndAbstractClassConfigurator(model.elements).configureInterfacesAndAbstractClasses()
|
||||||
addPureAbstractElement(model.elements, elementBaseType)
|
addPureAbstractElement(model.elements, elementBaseType)
|
||||||
markLeaves(model.elements)
|
markLeaves(model.elements)
|
||||||
processFieldOverrides(model.elements)
|
processFieldOverrides(model.elements)
|
||||||
|
|||||||
-16
@@ -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<Element>) {
|
|
||||||
object : InterfaceAndAbstractClassConfigurator() {
|
|
||||||
override val elements: List<ImplementationKindOwner>
|
|
||||||
get() = elements
|
|
||||||
}.configureInterfacesAndAbstractClasses()
|
|
||||||
}
|
|
||||||
+3
-6
@@ -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.
|
* 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<ImplementationKindOwner>) {
|
||||||
|
|
||||||
private inner class NodeImpl(val element: ImplementationKindOwner) : Node {
|
private inner class NodeImpl(val element: ImplementationKindOwner) : Node {
|
||||||
override val parents: List<NodeImpl>
|
override val parents: List<NodeImpl>
|
||||||
@@ -25,11 +27,6 @@ abstract class InterfaceAndAbstractClassConfigurator {
|
|||||||
override fun hashCode(): Int = element.hashCode()
|
override fun hashCode(): Int = element.hashCode()
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* The list of elements of the tree to infer their [ImplementationKind].
|
|
||||||
*/
|
|
||||||
protected abstract val elements: List<ImplementationKindOwner>
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* If [element]'s kind was inferred as abstract class, allows to forcibly make that element a final class instead.
|
* If [element]'s kind was inferred as abstract class, allows to forcibly make that element a final class instead.
|
||||||
*/
|
*/
|
||||||
|
|||||||
Reference in New Issue
Block a user