From 2ed0ffd1232519eca4e8e9b13e3fe73692bdecfe Mon Sep 17 00:00:00 2001 From: Wojciech Litewka Date: Fri, 1 Mar 2024 14:48:51 +0100 Subject: [PATCH] [IR] Autogenerate IrExternalPackageFragmentImpl #KT-65773 In Progress --- .../impl/IrExternalPackageFragmentImpl.kt | 18 +++++----- .../generator/ImplementationConfigurator.kt | 29 +++++++++++++--- ...bstractIrTreeImplementationConfigurator.kt | 9 ++++- .../kotlin/utils/IndentingPrinter.kt | 6 +++- .../src/org/jetbrains/kotlin/utils/Printer.kt | 33 +++++++------------ 5 files changed, 60 insertions(+), 35 deletions(-) diff --git a/compiler/ir/ir.tree/gen/org/jetbrains/kotlin/ir/declarations/impl/IrExternalPackageFragmentImpl.kt b/compiler/ir/ir.tree/gen/org/jetbrains/kotlin/ir/declarations/impl/IrExternalPackageFragmentImpl.kt index 38de5cc74b8..1b19ed1c49d 100644 --- a/compiler/ir/ir.tree/gen/org/jetbrains/kotlin/ir/declarations/impl/IrExternalPackageFragmentImpl.kt +++ b/compiler/ir/ir.tree/gen/org/jetbrains/kotlin/ir/declarations/impl/IrExternalPackageFragmentImpl.kt @@ -3,6 +3,11 @@ * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. */ +// This file was generated automatically. See compiler/ir/ir.tree/tree-generator/ReadMe.md. +// DO NOT MODIFY IT MANUALLY. + +@file:Suppress("DuplicatedCode") + package org.jetbrains.kotlin.ir.declarations.impl import org.jetbrains.kotlin.descriptors.ModuleDescriptor @@ -23,22 +28,19 @@ class IrExternalPackageFragmentImpl( override val endOffset: Int get() = UNDEFINED_OFFSET - init { - symbol.bind(this) - } - @UnsafeDuringIrConstructionAPI override val declarations: MutableList = ArrayList() companion object { @Deprecated( message = "Use org.jetbrains.kotlin.ir.declarations.createEmptyExternalPackageFragment instead", - replaceWith = ReplaceWith( - "createEmptyExternalPackageFragment", - "org.jetbrains.kotlin.ir.declarations.createEmptyExternalPackageFragment" - ) + replaceWith = ReplaceWith("createEmptyExternalPackageFragment", "org.jetbrains.kotlin.ir.declarations.createEmptyExternalPackageFragment") ) fun createEmptyExternalPackageFragment(module: ModuleDescriptor, fqName: FqName): IrExternalPackageFragment = org.jetbrains.kotlin.ir.declarations.createEmptyExternalPackageFragment(module, fqName) } + + init { + symbol.bind(this) + } } diff --git a/compiler/ir/ir.tree/tree-generator/src/org/jetbrains/kotlin/ir/generator/ImplementationConfigurator.kt b/compiler/ir/ir.tree/tree-generator/src/org/jetbrains/kotlin/ir/generator/ImplementationConfigurator.kt index ac2def2447b..c126671ab7e 100644 --- a/compiler/ir/ir.tree/tree-generator/src/org/jetbrains/kotlin/ir/generator/ImplementationConfigurator.kt +++ b/compiler/ir/ir.tree/tree-generator/src/org/jetbrains/kotlin/ir/generator/ImplementationConfigurator.kt @@ -103,9 +103,8 @@ object ImplementationConfigurator : AbstractIrTreeImplementationConfigurator() { impl(moduleFragment) { implementation.putImplementationOptInInConstructor = false - additionalImports(ArbitraryImportable(Packages.tree, "UNDEFINED_OFFSET")) - default("startOffset", "UNDEFINED_OFFSET", withGetter = true) - default("endOffset", "UNDEFINED_OFFSET", withGetter = true) + default("startOffset", undefinedOffset(), withGetter = true) + default("endOffset", undefinedOffset(), withGetter = true) default("name", "descriptor.name", withGetter = true) } @@ -120,7 +119,29 @@ object ImplementationConfigurator : AbstractIrTreeImplementationConfigurator() { } impl(externalPackageFragment) { - implementation.doPrint = false + implementation.putImplementationOptInInConstructor = false + implementation.constructorParameterOrderOverride = listOf("symbol", "packageFqName") + additionalImports( + ArbitraryImportable(Packages.descriptors, "ModuleDescriptor"), + ) + default("startOffset", undefinedOffset(), withGetter = true) + default("endOffset", undefinedOffset(), withGetter = true) + implementation.generationCallback = { + println() + print() + println( + """ + companion object { + @Deprecated( + message = "Use org.jetbrains.kotlin.ir.declarations.createEmptyExternalPackageFragment instead", + replaceWith = ReplaceWith("createEmptyExternalPackageFragment", "org.jetbrains.kotlin.ir.declarations.createEmptyExternalPackageFragment") + ) + fun createEmptyExternalPackageFragment(module: ModuleDescriptor, fqName: FqName): IrExternalPackageFragment = + org.jetbrains.kotlin.ir.declarations.createEmptyExternalPackageFragment(module, fqName) + } + """.replaceIndent(currentIndent) + ) + } } impl(file) { diff --git a/compiler/ir/ir.tree/tree-generator/src/org/jetbrains/kotlin/ir/generator/config/AbstractIrTreeImplementationConfigurator.kt b/compiler/ir/ir.tree/tree-generator/src/org/jetbrains/kotlin/ir/generator/config/AbstractIrTreeImplementationConfigurator.kt index 70451ede64c..662ac4202d3 100644 --- a/compiler/ir/ir.tree/tree-generator/src/org/jetbrains/kotlin/ir/generator/config/AbstractIrTreeImplementationConfigurator.kt +++ b/compiler/ir/ir.tree/tree-generator/src/org/jetbrains/kotlin/ir/generator/config/AbstractIrTreeImplementationConfigurator.kt @@ -1,15 +1,22 @@ /* - * Copyright 2010-2023 JetBrains s.r.o. and Kotlin Programming Language contributors. + * Copyright 2010-2024 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.config +import org.jetbrains.kotlin.generators.tree.ArbitraryImportable import org.jetbrains.kotlin.generators.tree.config.AbstractImplementationConfigurator +import org.jetbrains.kotlin.ir.generator.Packages import org.jetbrains.kotlin.ir.generator.model.Element import org.jetbrains.kotlin.ir.generator.model.Field import org.jetbrains.kotlin.ir.generator.model.Implementation abstract class AbstractIrTreeImplementationConfigurator : AbstractImplementationConfigurator() { override fun createImplementation(element: Element, name: String?) = Implementation(element, name) + + protected fun ImplementationContext.undefinedOffset(): String = + "UNDEFINED_OFFSET".also { + additionalImports(ArbitraryImportable(Packages.tree, it)) + } } \ No newline at end of file diff --git a/core/util.runtime/src/org/jetbrains/kotlin/utils/IndentingPrinter.kt b/core/util.runtime/src/org/jetbrains/kotlin/utils/IndentingPrinter.kt index cad5f27e6f7..600d4c911d1 100644 --- a/core/util.runtime/src/org/jetbrains/kotlin/utils/IndentingPrinter.kt +++ b/core/util.runtime/src/org/jetbrains/kotlin/utils/IndentingPrinter.kt @@ -1,5 +1,5 @@ /* - * Copyright 2010-2023 JetBrains s.r.o. and Kotlin Programming Language contributors. + * Copyright 2010-2024 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. */ @@ -9,6 +9,10 @@ package org.jetbrains.kotlin.utils * A printer that is suitable for printing text with indentation. */ interface IndentingPrinter { + /** + * The current indentation. + */ + val currentIndent: String /** * The current indentation level. Basically, this is the number of [pushIndent] calls that don't yet have a matching [popIndent] call. diff --git a/core/util.runtime/src/org/jetbrains/kotlin/utils/Printer.kt b/core/util.runtime/src/org/jetbrains/kotlin/utils/Printer.kt index 8728b9fdb8a..26e09ee08b9 100644 --- a/core/util.runtime/src/org/jetbrains/kotlin/utils/Printer.kt +++ b/core/util.runtime/src/org/jetbrains/kotlin/utils/Printer.kt @@ -1,17 +1,6 @@ /* - * Copyright 2010-2015 JetBrains s.r.o. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. + * Copyright 2010-2024 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.utils @@ -24,8 +13,10 @@ open class Printer private constructor( private val out: Appendable, private val maxBlankLines: Int, private val indentUnit: String, - private var indent: String + indent: String, ) : IndentingPrinter { + final override var currentIndent = indent + private set private var blankLineCountIncludingCurrent = 0 private var withholdIndentOnce = false private var length = 0 @@ -40,7 +31,7 @@ open class Printer private constructor( indent = "", ) - constructor(out: Appendable, parent: Printer) : this(out, parent.maxBlankLines, parent.indentUnit, parent.indent) + constructor(out: Appendable, parent: Printer) : this(out, parent.maxBlankLines, parent.indentUnit, parent.currentIndent) private fun append(o: Any?) { try { @@ -76,7 +67,7 @@ open class Printer private constructor( } fun printIndent() { - append(indent) + append(currentIndent) } fun printWithNoIndent(vararg objects: Any?): Printer { @@ -99,13 +90,13 @@ open class Printer private constructor( } override fun pushIndent(): Printer { - indent += indentUnit + currentIndent += indentUnit return this } override fun popIndent(): Printer { - check(indent.length >= indentUnit.length) { "No indentation to pop" } - indent = indent.substring(indentUnit.length) + check(currentIndent.length >= indentUnit.length) { "No indentation to pop" } + currentIndent = currentIndent.substring(indentUnit.length) return this } @@ -138,14 +129,14 @@ open class Printer private constructor( } override val currentIndentLengthInUnits: Int - get() = indent.length / indentUnit.length + get() = currentIndent.length / indentUnit.length override val indentUnitLength: Int get() = indentUnit.length companion object { private const val DEFAULT_INDENTATION_UNIT = " " - const val TWO_SPACE_INDENT = " "; + const val TWO_SPACE_INDENT = " " @JvmField val LINE_SEPARATOR: String = System.getProperty("line.separator")