[FIR generator] Factor out AbstractElement to common module
This is a step towards commonizing the code generator between FIR and IR: KT-61970
This commit is contained in:
committed by
Space Team
parent
977e316489
commit
d5394db185
+1
-1
@@ -5,9 +5,9 @@
|
|||||||
|
|
||||||
package org.jetbrains.kotlin.fir.tree.generator.model
|
package org.jetbrains.kotlin.fir.tree.generator.model
|
||||||
|
|
||||||
import org.jetbrains.kotlin.fir.tree.generator.printer.generics
|
|
||||||
import org.jetbrains.kotlin.generators.tree.FieldContainer
|
import org.jetbrains.kotlin.generators.tree.FieldContainer
|
||||||
import org.jetbrains.kotlin.generators.tree.Importable
|
import org.jetbrains.kotlin.generators.tree.Importable
|
||||||
|
import org.jetbrains.kotlin.generators.tree.generics
|
||||||
|
|
||||||
private const val DEFAULT_BUILDER_PACKAGE = "org.jetbrains.kotlin.fir.tree.builder"
|
private const val DEFAULT_BUILDER_PACKAGE = "org.jetbrains.kotlin.fir.tree.builder"
|
||||||
|
|
||||||
|
|||||||
+3
-18
@@ -6,21 +6,14 @@
|
|||||||
package org.jetbrains.kotlin.fir.tree.generator.model
|
package org.jetbrains.kotlin.fir.tree.generator.model
|
||||||
|
|
||||||
import org.jetbrains.kotlin.fir.tree.generator.printer.BASE_PACKAGE
|
import org.jetbrains.kotlin.fir.tree.generator.printer.BASE_PACKAGE
|
||||||
import org.jetbrains.kotlin.fir.tree.generator.printer.generics
|
|
||||||
import org.jetbrains.kotlin.generators.tree.typeWithArguments
|
|
||||||
import org.jetbrains.kotlin.fir.tree.generator.util.set
|
import org.jetbrains.kotlin.fir.tree.generator.util.set
|
||||||
import org.jetbrains.kotlin.generators.tree.FieldContainer
|
|
||||||
import org.jetbrains.kotlin.generators.tree.ImplementationKind
|
import org.jetbrains.kotlin.generators.tree.ImplementationKind
|
||||||
import org.jetbrains.kotlin.generators.tree.Importable
|
import org.jetbrains.kotlin.generators.tree.Importable
|
||||||
import org.jetbrains.kotlin.generators.tree.TypeArgument
|
import org.jetbrains.kotlin.generators.tree.TypeArgument
|
||||||
import org.jetbrains.kotlin.generators.tree.ImplementationKindOwner
|
import org.jetbrains.kotlin.generators.tree.typeWithArguments
|
||||||
|
import org.jetbrains.kotlin.generators.tree.AbstractElement as CommonAbstractElement
|
||||||
|
|
||||||
interface AbstractElement : FieldContainer, ImplementationKindOwner {
|
interface AbstractElement : CommonAbstractElement<AbstractElement, Field> {
|
||||||
val name: String
|
|
||||||
val fields: Set<Field>
|
|
||||||
val parents: List<AbstractElement>
|
|
||||||
val typeArguments: List<TypeArgument>
|
|
||||||
val parentsArguments: Map<AbstractElement, Map<Importable, Importable>>
|
|
||||||
val baseTransformerType: AbstractElement?
|
val baseTransformerType: AbstractElement?
|
||||||
val transformerType: AbstractElement
|
val transformerType: AbstractElement
|
||||||
val doesNotNeedImplementation: Boolean
|
val doesNotNeedImplementation: Boolean
|
||||||
@@ -29,15 +22,7 @@ interface AbstractElement : FieldContainer, ImplementationKindOwner {
|
|||||||
val allFirFields: List<Field>
|
val allFirFields: List<Field>
|
||||||
val defaultImplementation: Implementation?
|
val defaultImplementation: Implementation?
|
||||||
val customImplementations: List<Implementation>
|
val customImplementations: List<Implementation>
|
||||||
val overridenFields: Map<Field, Map<Importable, Boolean>>
|
|
||||||
val useNullableForReplace: Set<Field>
|
val useNullableForReplace: Set<Field>
|
||||||
|
|
||||||
val isSealed: Boolean
|
|
||||||
get() = false
|
|
||||||
|
|
||||||
override val allParents: List<ImplementationKindOwner> get() = parents
|
|
||||||
|
|
||||||
override fun getTypeWithArguments(notNull: Boolean): String = type + generics
|
|
||||||
}
|
}
|
||||||
|
|
||||||
class Element(override val name: String, kind: Kind) : AbstractElement {
|
class Element(override val name: String, kind: Kind) : AbstractElement {
|
||||||
|
|||||||
-5
@@ -169,11 +169,6 @@ val Element.safeDecapitalizedName: String get() = if (name == "Class") "klass" e
|
|||||||
val ImplementationWithArg.generics: String
|
val ImplementationWithArg.generics: String
|
||||||
get() = argument?.let { "<${it.type}>" } ?: ""
|
get() = argument?.let { "<${it.type}>" } ?: ""
|
||||||
|
|
||||||
val AbstractElement.generics: String
|
|
||||||
get() = typeArguments.takeIf { it.isNotEmpty() }
|
|
||||||
?.let { it.joinToString(", ", "<", ">") { it.name } }
|
|
||||||
?: ""
|
|
||||||
|
|
||||||
val Field.generics: String
|
val Field.generics: String
|
||||||
get() = arguments.takeIf { it.isNotEmpty() }
|
get() = arguments.takeIf { it.isNotEmpty() }
|
||||||
?.let { it.joinToString(", ", "<", ">") { it.typeWithArguments } }
|
?.let { it.joinToString(", ", "<", ">") { it.typeWithArguments } }
|
||||||
|
|||||||
+37
@@ -0,0 +1,37 @@
|
|||||||
|
/*
|
||||||
|
* Copyright 2010-2023 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.generators.tree
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A common interface representing a FIR or IR tree element.
|
||||||
|
*/
|
||||||
|
interface AbstractElement<Element : AbstractElement<Element, Field>, Field : AbstractField> : FieldContainer, ImplementationKindOwner {
|
||||||
|
|
||||||
|
val name: String
|
||||||
|
|
||||||
|
val fields: Set<Field>
|
||||||
|
|
||||||
|
val parents: List<Element>
|
||||||
|
|
||||||
|
val typeArguments: List<TypeArgument>
|
||||||
|
|
||||||
|
val parentsArguments: Map<Element, Map<Importable, Importable>>
|
||||||
|
|
||||||
|
val overridenFields: Map<Field, Map<Importable, Boolean>>
|
||||||
|
|
||||||
|
val isSealed: Boolean
|
||||||
|
get() = false
|
||||||
|
|
||||||
|
override val allParents: List<ImplementationKindOwner>
|
||||||
|
get() = parents
|
||||||
|
|
||||||
|
override fun getTypeWithArguments(notNull: Boolean): String = type + generics
|
||||||
|
}
|
||||||
|
|
||||||
|
val AbstractElement<*, *>.generics: String
|
||||||
|
get() = typeArguments.takeIf { it.isNotEmpty() }
|
||||||
|
?.let { it.joinToString(", ", "<", ">") { it.name } }
|
||||||
|
?: ""
|
||||||
Reference in New Issue
Block a user