[IR] Mark IrAnonymousInitializerImpl with an opt-in annotation
KT-59318
This commit is contained in:
committed by
Space Team
parent
22709bcb18
commit
8aacb59aec
+1
-4
@@ -14,11 +14,8 @@ import org.jetbrains.kotlin.backend.jvm.ir.replaceThisByStaticReference
|
|||||||
import org.jetbrains.kotlin.backend.jvm.propertiesPhase
|
import org.jetbrains.kotlin.backend.jvm.propertiesPhase
|
||||||
import org.jetbrains.kotlin.descriptors.DescriptorVisibilities
|
import org.jetbrains.kotlin.descriptors.DescriptorVisibilities
|
||||||
import org.jetbrains.kotlin.ir.builders.declarations.addField
|
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.builders.irCall
|
||||||
import org.jetbrains.kotlin.ir.declarations.*
|
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.*
|
||||||
import org.jetbrains.kotlin.ir.expressions.impl.IrExpressionBodyImpl
|
import org.jetbrains.kotlin.ir.expressions.impl.IrExpressionBodyImpl
|
||||||
import org.jetbrains.kotlin.ir.expressions.impl.IrGetFieldImpl
|
import org.jetbrains.kotlin.ir.expressions.impl.IrGetFieldImpl
|
||||||
@@ -100,7 +97,7 @@ private class MoveOrCopyCompanionObjectFieldsLowering(val context: JvmBackendCon
|
|||||||
with(oldInitializer) {
|
with(oldInitializer) {
|
||||||
val oldParent = parentAsClass
|
val oldParent = parentAsClass
|
||||||
val newSymbol = IrAnonymousInitializerSymbolImpl(newParent.symbol)
|
val newSymbol = IrAnonymousInitializerSymbolImpl(newParent.symbol)
|
||||||
IrAnonymousInitializerImpl(startOffset, endOffset, origin, newSymbol, isStatic = true).apply {
|
factory.createAnonymousInitializer(startOffset, endOffset, origin, newSymbol, isStatic = true).apply {
|
||||||
parent = newParent
|
parent = newParent
|
||||||
body = this@with.body.patchDeclarationParents(newParent)
|
body = this@with.body.patchDeclarationParents(newParent)
|
||||||
replaceThisByStaticReference(context.cachedDeclarations.fieldsForObjectInstances, oldParent, oldParent.thisReceiver!!)
|
replaceThisByStaticReference(context.cachedDeclarations.fieldsForObjectInstances, oldParent, oldParent.thisReceiver!!)
|
||||||
|
|||||||
+1
-1
@@ -1031,7 +1031,7 @@ private inline fun IrClass.addAnonymousInitializer(builder: IrFunctionBuilder.()
|
|||||||
IrFunctionBuilder().run {
|
IrFunctionBuilder().run {
|
||||||
builder()
|
builder()
|
||||||
returnType = defaultType
|
returnType = defaultType
|
||||||
IrAnonymousInitializerImpl(
|
factory.createAnonymousInitializer(
|
||||||
startOffset, endOffset, origin,
|
startOffset, endOffset, origin,
|
||||||
IrAnonymousInitializerSymbolImpl()
|
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
|
||||||
+2
-1
@@ -6,6 +6,7 @@
|
|||||||
package org.jetbrains.kotlin.ir.declarations.impl
|
package org.jetbrains.kotlin.ir.declarations.impl
|
||||||
|
|
||||||
import org.jetbrains.kotlin.descriptors.ClassDescriptor
|
import org.jetbrains.kotlin.descriptors.ClassDescriptor
|
||||||
|
import org.jetbrains.kotlin.ir.IrImplementationDetail
|
||||||
import org.jetbrains.kotlin.ir.ObsoleteDescriptorBasedAPI
|
import org.jetbrains.kotlin.ir.ObsoleteDescriptorBasedAPI
|
||||||
import org.jetbrains.kotlin.ir.declarations.IrAnonymousInitializer
|
import org.jetbrains.kotlin.ir.declarations.IrAnonymousInitializer
|
||||||
import org.jetbrains.kotlin.ir.declarations.IrFactory
|
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.expressions.IrConstructorCall
|
||||||
import org.jetbrains.kotlin.ir.symbols.IrAnonymousInitializerSymbol
|
import org.jetbrains.kotlin.ir.symbols.IrAnonymousInitializerSymbol
|
||||||
|
|
||||||
class IrAnonymousInitializerImpl(
|
class IrAnonymousInitializerImpl @IrImplementationDetail constructor(
|
||||||
override val startOffset: Int,
|
override val startOffset: Int,
|
||||||
override val endOffset: Int,
|
override val endOffset: Int,
|
||||||
override var origin: IrDeclarationOrigin,
|
override var origin: IrDeclarationOrigin,
|
||||||
|
|||||||
@@ -6,7 +6,7 @@
|
|||||||
package org.jetbrains.kotlin.ir.declarations.impl
|
package org.jetbrains.kotlin.ir.declarations.impl
|
||||||
|
|
||||||
import org.jetbrains.kotlin.descriptors.*
|
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.declarations.*
|
||||||
import org.jetbrains.kotlin.ir.expressions.IrBlockBody
|
import org.jetbrains.kotlin.ir.expressions.IrBlockBody
|
||||||
import org.jetbrains.kotlin.ir.expressions.IrExpression
|
import org.jetbrains.kotlin.ir.expressions.IrExpression
|
||||||
@@ -23,6 +23,7 @@ object IrFactoryImpl : AbstractIrFactoryImpl() {
|
|||||||
override val stageController: StageController = StageController()
|
override val stageController: StageController = StageController()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@OptIn(IrImplementationDetail::class)
|
||||||
abstract class AbstractIrFactoryImpl : IrFactory {
|
abstract class AbstractIrFactoryImpl : IrFactory {
|
||||||
|
|
||||||
override fun createAnonymousInitializer(
|
override fun createAnonymousInitializer(
|
||||||
|
|||||||
Reference in New Issue
Block a user