From 8aacb59aec9796826975078a7b2b791b9974db8b Mon Sep 17 00:00:00 2001 From: Sergej Jaskiewicz Date: Thu, 7 Dec 2023 15:45:10 +0100 Subject: [PATCH] [IR] Mark IrAnonymousInitializerImpl with an opt-in annotation KT-59318 --- .../lower/MoveCompanionObjectFieldsLowering.kt | 5 +---- .../kotlin/backend/jvm/lower/ScriptLowering.kt | 2 +- .../kotlin/ir/IrImplementationDetail.kt | 17 +++++++++++++++++ .../impl/IrAnonymousInitializerImpl.kt | 3 ++- .../ir/declarations/impl/IrFactoryImpl.kt | 3 ++- 5 files changed, 23 insertions(+), 7 deletions(-) create mode 100644 compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/IrImplementationDetail.kt diff --git a/compiler/ir/backend.jvm/lower/src/org/jetbrains/kotlin/backend/jvm/lower/MoveCompanionObjectFieldsLowering.kt b/compiler/ir/backend.jvm/lower/src/org/jetbrains/kotlin/backend/jvm/lower/MoveCompanionObjectFieldsLowering.kt index 96fa55d6ede..f1c86decf99 100644 --- a/compiler/ir/backend.jvm/lower/src/org/jetbrains/kotlin/backend/jvm/lower/MoveCompanionObjectFieldsLowering.kt +++ b/compiler/ir/backend.jvm/lower/src/org/jetbrains/kotlin/backend/jvm/lower/MoveCompanionObjectFieldsLowering.kt @@ -14,11 +14,8 @@ import org.jetbrains.kotlin.backend.jvm.ir.replaceThisByStaticReference import org.jetbrains.kotlin.backend.jvm.propertiesPhase import org.jetbrains.kotlin.descriptors.DescriptorVisibilities import org.jetbrains.kotlin.ir.builders.declarations.addField -import org.jetbrains.kotlin.ir.builders.declarations.addProperty -import org.jetbrains.kotlin.ir.builders.declarations.buildField import org.jetbrains.kotlin.ir.builders.irCall import org.jetbrains.kotlin.ir.declarations.* -import org.jetbrains.kotlin.ir.declarations.impl.IrAnonymousInitializerImpl import org.jetbrains.kotlin.ir.expressions.* import org.jetbrains.kotlin.ir.expressions.impl.IrExpressionBodyImpl import org.jetbrains.kotlin.ir.expressions.impl.IrGetFieldImpl @@ -100,7 +97,7 @@ private class MoveOrCopyCompanionObjectFieldsLowering(val context: JvmBackendCon with(oldInitializer) { val oldParent = parentAsClass val newSymbol = IrAnonymousInitializerSymbolImpl(newParent.symbol) - IrAnonymousInitializerImpl(startOffset, endOffset, origin, newSymbol, isStatic = true).apply { + factory.createAnonymousInitializer(startOffset, endOffset, origin, newSymbol, isStatic = true).apply { parent = newParent body = this@with.body.patchDeclarationParents(newParent) replaceThisByStaticReference(context.cachedDeclarations.fieldsForObjectInstances, oldParent, oldParent.thisReceiver!!) diff --git a/compiler/ir/backend.jvm/lower/src/org/jetbrains/kotlin/backend/jvm/lower/ScriptLowering.kt b/compiler/ir/backend.jvm/lower/src/org/jetbrains/kotlin/backend/jvm/lower/ScriptLowering.kt index a5d586ae858..cfb10b74726 100644 --- a/compiler/ir/backend.jvm/lower/src/org/jetbrains/kotlin/backend/jvm/lower/ScriptLowering.kt +++ b/compiler/ir/backend.jvm/lower/src/org/jetbrains/kotlin/backend/jvm/lower/ScriptLowering.kt @@ -1031,7 +1031,7 @@ private inline fun IrClass.addAnonymousInitializer(builder: IrFunctionBuilder.() IrFunctionBuilder().run { builder() returnType = defaultType - IrAnonymousInitializerImpl( + factory.createAnonymousInitializer( startOffset, endOffset, origin, IrAnonymousInitializerSymbolImpl() ) diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/IrImplementationDetail.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/IrImplementationDetail.kt new file mode 100644 index 00000000000..2f99c13b379 --- /dev/null +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/IrImplementationDetail.kt @@ -0,0 +1,17 @@ +/* + * 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.ir + +import org.jetbrains.kotlin.ir.declarations.IrFactory + +/** + * IR implementation classes annotated with this annotation are not expected to be used directly. + * + * [IrFactory] should be the preferred way to create instances of such classes. + */ +@RequiresOptIn("Use IrFactory instead of creating IR nodes directly", level = RequiresOptIn.Level.ERROR) +@Target(AnnotationTarget.CONSTRUCTOR) +annotation class IrImplementationDetail diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/impl/IrAnonymousInitializerImpl.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/impl/IrAnonymousInitializerImpl.kt index d4f05bcefdd..cc4b0cf99aa 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/impl/IrAnonymousInitializerImpl.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/impl/IrAnonymousInitializerImpl.kt @@ -6,6 +6,7 @@ package org.jetbrains.kotlin.ir.declarations.impl import org.jetbrains.kotlin.descriptors.ClassDescriptor +import org.jetbrains.kotlin.ir.IrImplementationDetail import org.jetbrains.kotlin.ir.ObsoleteDescriptorBasedAPI import org.jetbrains.kotlin.ir.declarations.IrAnonymousInitializer import org.jetbrains.kotlin.ir.declarations.IrFactory @@ -15,7 +16,7 @@ import org.jetbrains.kotlin.ir.expressions.IrBlockBody import org.jetbrains.kotlin.ir.expressions.IrConstructorCall import org.jetbrains.kotlin.ir.symbols.IrAnonymousInitializerSymbol -class IrAnonymousInitializerImpl( +class IrAnonymousInitializerImpl @IrImplementationDetail constructor( override val startOffset: Int, override val endOffset: Int, override var origin: IrDeclarationOrigin, diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/impl/IrFactoryImpl.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/impl/IrFactoryImpl.kt index b8244f691be..e9dc11773c3 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/impl/IrFactoryImpl.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/impl/IrFactoryImpl.kt @@ -6,7 +6,7 @@ package org.jetbrains.kotlin.ir.declarations.impl import org.jetbrains.kotlin.descriptors.* -import org.jetbrains.kotlin.ir.IrStatement +import org.jetbrains.kotlin.ir.IrImplementationDetail import org.jetbrains.kotlin.ir.declarations.* import org.jetbrains.kotlin.ir.expressions.IrBlockBody import org.jetbrains.kotlin.ir.expressions.IrExpression @@ -23,6 +23,7 @@ object IrFactoryImpl : AbstractIrFactoryImpl() { override val stageController: StageController = StageController() } +@OptIn(IrImplementationDetail::class) abstract class AbstractIrFactoryImpl : IrFactory { override fun createAnonymousInitializer(