From 7a6bffaabb506db95a4fd43584f7a14292a3b4df Mon Sep 17 00:00:00 2001 From: Sergej Jaskiewicz Date: Mon, 4 Sep 2023 19:34:21 +0200 Subject: [PATCH] [FIR generator] Move `Importable` interface to common module This is a step towards commonizing the code generator between FIR and IR: KT-61970 --- .space/CODEOWNERS | 1 + compiler/fir/tree/tree-generator/build.gradle.kts | 1 + .../context/AbstractBuilderConfigurator.kt | 1 + .../context/AbstractFieldConfigurator.kt | 1 + .../AbstractFirTreeImplementationConfigurator.kt | 1 + .../kotlin/fir/tree/generator/model/Builder.kt | 2 ++ .../kotlin/fir/tree/generator/model/Element.kt | 1 + .../fir/tree/generator/model/ElementUtils.kt | 1 + .../kotlin/fir/tree/generator/model/Field.kt | 1 + .../fir/tree/generator/model/Implementation.kt | 2 ++ .../kotlin/fir/tree/generator/model/Type.kt | 2 ++ .../kotlin/fir/tree/generator/printer/element.kt | 2 +- .../fir/tree/generator/printer/implementation.kt | 1 + .../kotlin/fir/tree/generator/printer/utils.kt | 1 + .../ir/ir.tree/tree-generator/build.gradle.kts | 1 + generators/tree-generator-common/ReadMe.md | 4 ++++ generators/tree-generator-common/build.gradle.kts | 15 +++++++++++++++ .../kotlin/generators/tree}/Importable.kt | 2 +- settings.gradle | 1 + 19 files changed, 39 insertions(+), 2 deletions(-) create mode 100644 generators/tree-generator-common/ReadMe.md create mode 100644 generators/tree-generator-common/build.gradle.kts rename {compiler/fir/tree/tree-generator/src/org/jetbrains/kotlin/fir/tree/generator/model => generators/tree-generator-common/src/org/jetbrains/kotlin/generators/tree}/Importable.kt (87%) diff --git a/.space/CODEOWNERS b/.space/CODEOWNERS index bbea8c0ac49..c0e3aa043f2 100644 --- a/.space/CODEOWNERS +++ b/.space/CODEOWNERS @@ -242,6 +242,7 @@ # UNKNOWN: /generators/protobufCompare/ /generators/test-generator/ "Kotlin Compiler Core" "Kotlin JVM" "Kotlin JS" "Kotlin Native" "Kotlin Wasm" /generators/tests/ "Kotlin Compiler Core" "Kotlin JVM" "Kotlin JS" "Kotlin Native" "Kotlin Wasm" +/generators/tree-generator-common/ "Kotlin Compiler Core" "Kotlin JVM" "Kotlin JS" "Kotlin Native" "Kotlin Wasm" /generators/wasm/ "Kotlin Wasm" /gradle/ "Kotlin Build Infrastructure" diff --git a/compiler/fir/tree/tree-generator/build.gradle.kts b/compiler/fir/tree/tree-generator/build.gradle.kts index bbc6e8f03c5..221bc7bc1f1 100644 --- a/compiler/fir/tree/tree-generator/build.gradle.kts +++ b/compiler/fir/tree/tree-generator/build.gradle.kts @@ -10,6 +10,7 @@ runtimeOnly.extendsFrom(compileOnly) dependencies { implementation(project(":generators")) + implementation(project(":generators:tree-generator-common")) implementation(project(":core:compiler.common")) implementation(project(":compiler:frontend.common")) implementation(project(":compiler:fir:cones")) diff --git a/compiler/fir/tree/tree-generator/src/org/jetbrains/kotlin/fir/tree/generator/context/AbstractBuilderConfigurator.kt b/compiler/fir/tree/tree-generator/src/org/jetbrains/kotlin/fir/tree/generator/context/AbstractBuilderConfigurator.kt index b9fa13b81fc..e7465c2b981 100644 --- a/compiler/fir/tree/tree-generator/src/org/jetbrains/kotlin/fir/tree/generator/context/AbstractBuilderConfigurator.kt +++ b/compiler/fir/tree/tree-generator/src/org/jetbrains/kotlin/fir/tree/generator/context/AbstractBuilderConfigurator.kt @@ -7,6 +7,7 @@ package org.jetbrains.kotlin.fir.tree.generator.context import org.jetbrains.kotlin.fir.tree.generator.model.* import org.jetbrains.kotlin.utils.DummyDelegate +import org.jetbrains.kotlin.generators.tree.Importable import kotlin.properties.ReadOnlyProperty import kotlin.reflect.KProperty diff --git a/compiler/fir/tree/tree-generator/src/org/jetbrains/kotlin/fir/tree/generator/context/AbstractFieldConfigurator.kt b/compiler/fir/tree/tree-generator/src/org/jetbrains/kotlin/fir/tree/generator/context/AbstractFieldConfigurator.kt index c83d354e0b9..ab9bd8c6631 100644 --- a/compiler/fir/tree/tree-generator/src/org/jetbrains/kotlin/fir/tree/generator/context/AbstractFieldConfigurator.kt +++ b/compiler/fir/tree/tree-generator/src/org/jetbrains/kotlin/fir/tree/generator/context/AbstractFieldConfigurator.kt @@ -6,6 +6,7 @@ package org.jetbrains.kotlin.fir.tree.generator.context import org.jetbrains.kotlin.fir.tree.generator.model.* +import org.jetbrains.kotlin.generators.tree.Importable abstract class AbstractFieldConfigurator(private val builder: T) { inner class ConfigureContext(val element: Element) { diff --git a/compiler/fir/tree/tree-generator/src/org/jetbrains/kotlin/fir/tree/generator/context/AbstractFirTreeImplementationConfigurator.kt b/compiler/fir/tree/tree-generator/src/org/jetbrains/kotlin/fir/tree/generator/context/AbstractFirTreeImplementationConfigurator.kt index 10cfd540e1e..f58a39c96fb 100644 --- a/compiler/fir/tree/tree-generator/src/org/jetbrains/kotlin/fir/tree/generator/context/AbstractFirTreeImplementationConfigurator.kt +++ b/compiler/fir/tree/tree-generator/src/org/jetbrains/kotlin/fir/tree/generator/context/AbstractFirTreeImplementationConfigurator.kt @@ -9,6 +9,7 @@ import org.jetbrains.kotlin.fir.tree.generator.constructClassLikeTypeImport import org.jetbrains.kotlin.fir.tree.generator.model.* import org.jetbrains.kotlin.fir.tree.generator.printer.call import org.jetbrains.kotlin.fir.tree.generator.standardClassIdsType +import org.jetbrains.kotlin.generators.tree.Importable abstract class AbstractFirTreeImplementationConfigurator { private val elementsWithImpl = mutableSetOf() diff --git a/compiler/fir/tree/tree-generator/src/org/jetbrains/kotlin/fir/tree/generator/model/Builder.kt b/compiler/fir/tree/tree-generator/src/org/jetbrains/kotlin/fir/tree/generator/model/Builder.kt index 02f6304c109..9e9c6b5a0a1 100644 --- a/compiler/fir/tree/tree-generator/src/org/jetbrains/kotlin/fir/tree/generator/model/Builder.kt +++ b/compiler/fir/tree/tree-generator/src/org/jetbrains/kotlin/fir/tree/generator/model/Builder.kt @@ -5,6 +5,8 @@ package org.jetbrains.kotlin.fir.tree.generator.model +import org.jetbrains.kotlin.generators.tree.Importable + private const val DEFAULT_BUILDER_PACKAGE = "org.jetbrains.kotlin.fir.tree.builder" sealed class Builder : FieldContainer, Importable { diff --git a/compiler/fir/tree/tree-generator/src/org/jetbrains/kotlin/fir/tree/generator/model/Element.kt b/compiler/fir/tree/tree-generator/src/org/jetbrains/kotlin/fir/tree/generator/model/Element.kt index 6c56a8c5936..742cf67ee12 100644 --- a/compiler/fir/tree/tree-generator/src/org/jetbrains/kotlin/fir/tree/generator/model/Element.kt +++ b/compiler/fir/tree/tree-generator/src/org/jetbrains/kotlin/fir/tree/generator/model/Element.kt @@ -8,6 +8,7 @@ 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.typeWithArguments import org.jetbrains.kotlin.fir.tree.generator.util.set +import org.jetbrains.kotlin.generators.tree.Importable interface KindOwner : Importable { var kind: Implementation.Kind? diff --git a/compiler/fir/tree/tree-generator/src/org/jetbrains/kotlin/fir/tree/generator/model/ElementUtils.kt b/compiler/fir/tree/tree-generator/src/org/jetbrains/kotlin/fir/tree/generator/model/ElementUtils.kt index 9254e6eccb6..7d78e58d6e9 100644 --- a/compiler/fir/tree/tree-generator/src/org/jetbrains/kotlin/fir/tree/generator/model/ElementUtils.kt +++ b/compiler/fir/tree/tree-generator/src/org/jetbrains/kotlin/fir/tree/generator/model/ElementUtils.kt @@ -8,6 +8,7 @@ package org.jetbrains.kotlin.fir.tree.generator.model import org.jetbrains.kotlin.fir.tree.generator.context.AbstractFirTreeBuilder import org.jetbrains.kotlin.fir.tree.generator.context.type import org.jetbrains.kotlin.fir.tree.generator.printer.typeWithArguments +import org.jetbrains.kotlin.generators.tree.Importable // ----------- Simple field ----------- diff --git a/compiler/fir/tree/tree-generator/src/org/jetbrains/kotlin/fir/tree/generator/model/Field.kt b/compiler/fir/tree/tree-generator/src/org/jetbrains/kotlin/fir/tree/generator/model/Field.kt index d685415263d..a09451b0c07 100644 --- a/compiler/fir/tree/tree-generator/src/org/jetbrains/kotlin/fir/tree/generator/model/Field.kt +++ b/compiler/fir/tree/tree-generator/src/org/jetbrains/kotlin/fir/tree/generator/model/Field.kt @@ -6,6 +6,7 @@ package org.jetbrains.kotlin.fir.tree.generator.model import org.jetbrains.kotlin.fir.tree.generator.printer.typeWithArguments +import org.jetbrains.kotlin.generators.tree.Importable sealed class Field : Importable { abstract val name: String diff --git a/compiler/fir/tree/tree-generator/src/org/jetbrains/kotlin/fir/tree/generator/model/Implementation.kt b/compiler/fir/tree/tree-generator/src/org/jetbrains/kotlin/fir/tree/generator/model/Implementation.kt index d6bc0c3a3b1..f5e79fe65e7 100644 --- a/compiler/fir/tree/tree-generator/src/org/jetbrains/kotlin/fir/tree/generator/model/Implementation.kt +++ b/compiler/fir/tree/tree-generator/src/org/jetbrains/kotlin/fir/tree/generator/model/Implementation.kt @@ -5,6 +5,8 @@ package org.jetbrains.kotlin.fir.tree.generator.model +import org.jetbrains.kotlin.generators.tree.Importable + class ImplementationWithArg( val implementation: Implementation, val argument: Importable? diff --git a/compiler/fir/tree/tree-generator/src/org/jetbrains/kotlin/fir/tree/generator/model/Type.kt b/compiler/fir/tree/tree-generator/src/org/jetbrains/kotlin/fir/tree/generator/model/Type.kt index da2256321eb..11ab9a12829 100644 --- a/compiler/fir/tree/tree-generator/src/org/jetbrains/kotlin/fir/tree/generator/model/Type.kt +++ b/compiler/fir/tree/tree-generator/src/org/jetbrains/kotlin/fir/tree/generator/model/Type.kt @@ -5,6 +5,8 @@ package org.jetbrains.kotlin.fir.tree.generator.model +import org.jetbrains.kotlin.generators.tree.Importable + data class Type(override val packageName: String?, override val type: String, val firType: Boolean = false) : Importable { val arguments = mutableListOf() } diff --git a/compiler/fir/tree/tree-generator/src/org/jetbrains/kotlin/fir/tree/generator/printer/element.kt b/compiler/fir/tree/tree-generator/src/org/jetbrains/kotlin/fir/tree/generator/printer/element.kt index e2d81b48db6..7f408538215 100644 --- a/compiler/fir/tree/tree-generator/src/org/jetbrains/kotlin/fir/tree/generator/printer/element.kt +++ b/compiler/fir/tree/tree-generator/src/org/jetbrains/kotlin/fir/tree/generator/printer/element.kt @@ -9,7 +9,7 @@ import org.jetbrains.kotlin.fir.tree.generator.context.AbstractFirTreeBuilder import org.jetbrains.kotlin.fir.tree.generator.model.Element import org.jetbrains.kotlin.fir.tree.generator.model.Field import org.jetbrains.kotlin.fir.tree.generator.model.Implementation.Kind -import org.jetbrains.kotlin.fir.tree.generator.model.Importable +import org.jetbrains.kotlin.generators.tree.Importable import org.jetbrains.kotlin.fir.tree.generator.pureAbstractElementType import org.jetbrains.kotlin.fir.tree.generator.util.get import org.jetbrains.kotlin.utils.SmartPrinter diff --git a/compiler/fir/tree/tree-generator/src/org/jetbrains/kotlin/fir/tree/generator/printer/implementation.kt b/compiler/fir/tree/tree-generator/src/org/jetbrains/kotlin/fir/tree/generator/printer/implementation.kt index cc79c946e34..8a858aef677 100644 --- a/compiler/fir/tree/tree-generator/src/org/jetbrains/kotlin/fir/tree/generator/printer/implementation.kt +++ b/compiler/fir/tree/tree-generator/src/org/jetbrains/kotlin/fir/tree/generator/printer/implementation.kt @@ -8,6 +8,7 @@ package org.jetbrains.kotlin.fir.tree.generator.printer import org.jetbrains.kotlin.fir.tree.generator.model.* import org.jetbrains.kotlin.fir.tree.generator.model.Implementation.Kind import org.jetbrains.kotlin.fir.tree.generator.pureAbstractElementType +import org.jetbrains.kotlin.generators.tree.Importable import org.jetbrains.kotlin.utils.SmartPrinter import org.jetbrains.kotlin.utils.addToStdlib.ifNotEmpty import org.jetbrains.kotlin.utils.withIndent diff --git a/compiler/fir/tree/tree-generator/src/org/jetbrains/kotlin/fir/tree/generator/printer/utils.kt b/compiler/fir/tree/tree-generator/src/org/jetbrains/kotlin/fir/tree/generator/printer/utils.kt index 10c94f315a5..4c23e2a27db 100644 --- a/compiler/fir/tree/tree-generator/src/org/jetbrains/kotlin/fir/tree/generator/printer/utils.kt +++ b/compiler/fir/tree/tree-generator/src/org/jetbrains/kotlin/fir/tree/generator/printer/utils.kt @@ -10,6 +10,7 @@ import org.jetbrains.kotlin.fir.tree.generator.firImplementationDetailType import org.jetbrains.kotlin.fir.tree.generator.model.* import org.jetbrains.kotlin.fir.tree.generator.model.Implementation.Kind import org.jetbrains.kotlin.fir.tree.generator.pureAbstractElementType +import org.jetbrains.kotlin.generators.tree.Importable import java.io.File import org.jetbrains.kotlin.utils.addToStdlib.ifNotEmpty diff --git a/compiler/ir/ir.tree/tree-generator/build.gradle.kts b/compiler/ir/ir.tree/tree-generator/build.gradle.kts index b6199b11e3f..834a5d7b580 100644 --- a/compiler/ir/ir.tree/tree-generator/build.gradle.kts +++ b/compiler/ir/ir.tree/tree-generator/build.gradle.kts @@ -10,6 +10,7 @@ runtimeOnly.extendsFrom(compileOnly) dependencies { implementation(project(":generators")) + implementation(project(":generators:tree-generator-common")) implementation(project(":core:compiler.common")) implementation(project(":compiler:util")) implementation("com.squareup:kotlinpoet:1.11.0") diff --git a/generators/tree-generator-common/ReadMe.md b/generators/tree-generator-common/ReadMe.md new file mode 100644 index 00000000000..98b89fd918c --- /dev/null +++ b/generators/tree-generator-common/ReadMe.md @@ -0,0 +1,4 @@ +## Common code for the FIR and IR tree generators + +The [FIR](../../compiler/fir/tree/tree-generator) and [IR](../../compiler/ir/ir.tree/tree-generator) tree generators, although quite +different, share some common logic. This logic is stored here in this module. \ No newline at end of file diff --git a/generators/tree-generator-common/build.gradle.kts b/generators/tree-generator-common/build.gradle.kts new file mode 100644 index 00000000000..470e3786b5b --- /dev/null +++ b/generators/tree-generator-common/build.gradle.kts @@ -0,0 +1,15 @@ +plugins { + kotlin("jvm") + id("jps-compatible") +} + +dependencies { + implementation(project(":core:compiler.common")) +} + +sourceSets { + "main" { + projectDefault() + } + "test" {} +} diff --git a/compiler/fir/tree/tree-generator/src/org/jetbrains/kotlin/fir/tree/generator/model/Importable.kt b/generators/tree-generator-common/src/org/jetbrains/kotlin/generators/tree/Importable.kt similarity index 87% rename from compiler/fir/tree/tree-generator/src/org/jetbrains/kotlin/fir/tree/generator/model/Importable.kt rename to generators/tree-generator-common/src/org/jetbrains/kotlin/generators/tree/Importable.kt index fa2279bccc0..11c8018d9de 100644 --- a/compiler/fir/tree/tree-generator/src/org/jetbrains/kotlin/fir/tree/generator/model/Importable.kt +++ b/generators/tree-generator-common/src/org/jetbrains/kotlin/generators/tree/Importable.kt @@ -3,7 +3,7 @@ * 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.fir.tree.generator.model +package org.jetbrains.kotlin.generators.tree interface Importable { val type: String diff --git a/settings.gradle b/settings.gradle index ca68c870709..96cb58026fa 100644 --- a/settings.gradle +++ b/settings.gradle @@ -191,6 +191,7 @@ include ":kotlin-imports-dumper-compiler-plugin", ":generators", ":generators:ide-iml-to-gradle-generator", ":generators:test-generator", + ":generators:tree-generator-common", ":tools:kotlinp", ":kotlin-build-tools-enum-compat", ":kotlin-gradle-compiler-types",