[IR] Mark IrAnonymousInitializerImpl with an opt-in annotation

KT-59318
This commit is contained in:
Sergej Jaskiewicz
2023-12-07 15:45:10 +01:00
committed by Space Team
parent 22709bcb18
commit 8aacb59aec
5 changed files with 23 additions and 7 deletions
@@ -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!!)
@@ -1031,7 +1031,7 @@ private inline fun IrClass.addAnonymousInitializer(builder: IrFunctionBuilder.()
IrFunctionBuilder().run {
builder()
returnType = defaultType
IrAnonymousInitializerImpl(
factory.createAnonymousInitializer(
startOffset, endOffset, origin,
IrAnonymousInitializerSymbolImpl()
)
@@ -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
@@ -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,
@@ -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(