From 9a4c28498cb7688c93b180e41c57db0c0215fc88 Mon Sep 17 00:00:00 2001 From: Sergej Jaskiewicz Date: Mon, 18 Sep 2023 19:29:03 +0200 Subject: [PATCH] [FIR generator] Deduplicate the logic of `needPureAbstractElement` --- .../kotlin/fir/tree/generator/printer/implementation.kt | 2 +- .../jetbrains/kotlin/fir/tree/generator/printer/utils.kt | 4 ---- .../jetbrains/kotlin/ir/generator/model/Transformations.kt | 2 +- .../kotlin/generators/tree/ImplementationKindOwner.kt | 6 +++++- 4 files changed, 7 insertions(+), 7 deletions(-) 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 0bc65055f11..f29a08d707c 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 @@ -98,7 +98,7 @@ fun SmartPrinter.printImplementation(implementation: Implementation) { } print(" : ") - if (!isInterface && !allParents.any { it.kind == ImplementationKind.AbstractClass || it.kind == ImplementationKind.SealedClass }) { + if (needPureAbstractElement) { print("${pureAbstractElementType.type}(), ") } print(allParents.joinToString { "${it.typeWithArguments}${it.kind.braces()}" }) 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 b0296ce3066..08d61e59402 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 @@ -113,10 +113,6 @@ private fun List.filterRedundantImports( } -val ImplementationKindOwner.needPureAbstractElement: Boolean - get() = (kind != ImplementationKind.Interface && kind != ImplementationKind.SealedInterface) && !allParents.any { it.kind == ImplementationKind.AbstractClass || it.kind == ImplementationKind.SealedClass } - - val Field.isVal: Boolean get() = (this is FieldList && !isMutableOrEmpty) || (this is FieldWithDefault && origin is FieldList && !origin.isMutableOrEmpty) || !isMutable diff --git a/compiler/ir/ir.tree/tree-generator/src/org/jetbrains/kotlin/ir/generator/model/Transformations.kt b/compiler/ir/ir.tree/tree-generator/src/org/jetbrains/kotlin/ir/generator/model/Transformations.kt index d067053d7a5..329e3673388 100644 --- a/compiler/ir/ir.tree/tree-generator/src/org/jetbrains/kotlin/ir/generator/model/Transformations.kt +++ b/compiler/ir/ir.tree/tree-generator/src/org/jetbrains/kotlin/ir/generator/model/Transformations.kt @@ -160,7 +160,7 @@ private fun markLeaves(elements: List) { private fun addAbstractElement(elements: List) { for (el in elements) { - if (el.kind!!.typeKind == TypeKind.Class && el.elementParents.none { it.element.kind!!.typeKind == TypeKind.Class }) { + if (el.needPureAbstractElement) { el.otherParents += elementBaseType } } diff --git a/generators/tree-generator-common/src/org/jetbrains/kotlin/generators/tree/ImplementationKindOwner.kt b/generators/tree-generator-common/src/org/jetbrains/kotlin/generators/tree/ImplementationKindOwner.kt index f0ead581d9e..87f2a5631af 100644 --- a/generators/tree-generator-common/src/org/jetbrains/kotlin/generators/tree/ImplementationKindOwner.kt +++ b/generators/tree-generator-common/src/org/jetbrains/kotlin/generators/tree/ImplementationKindOwner.kt @@ -8,4 +8,8 @@ package org.jetbrains.kotlin.generators.tree interface ImplementationKindOwner : Importable { var kind: ImplementationKind? val allParents: List -} \ No newline at end of file +} + +val ImplementationKindOwner.needPureAbstractElement: Boolean + get() = !(kind?.isInterface ?: false) && + allParents.none { it.kind == ImplementationKind.AbstractClass || it.kind == ImplementationKind.SealedClass } \ No newline at end of file