IR: Allow references to script constructor in module

aso add test checking (somewhat confusing) semantic of
script nested classes.
This commit is contained in:
Ilya Chernikov
2021-08-13 19:18:34 +02:00
committed by TeamCityServer
parent e7cbc9a0fb
commit 47ea5330ff
12 changed files with 124 additions and 40 deletions
@@ -38,4 +38,6 @@ abstract class IrScript :
abstract var earlierScripts: List<IrScriptSymbol>?
abstract var targetClass: IrClassSymbol?
abstract var constructor: IrConstructor?
}
@@ -56,6 +56,7 @@ class IrScriptImpl(
override var earlierScriptsParameter: IrValueParameter? = null
override var earlierScripts: List<IrScriptSymbol>? = null
override var targetClass: IrClassSymbol? = null
override var constructor: IrConstructor? = null
@ObsoleteDescriptorBasedAPI
override val descriptor: ScriptDescriptor
@@ -14,6 +14,7 @@ import org.jetbrains.kotlin.ir.declarations.IrTypeParametersContainer
import org.jetbrains.kotlin.ir.expressions.IrConstructorCall
import org.jetbrains.kotlin.ir.symbols.IrClassSymbol
import org.jetbrains.kotlin.ir.symbols.IrClassifierSymbol
import org.jetbrains.kotlin.ir.symbols.IrScriptSymbol
import org.jetbrains.kotlin.ir.symbols.IrTypeParameterSymbol
import org.jetbrains.kotlin.ir.types.impl.*
import org.jetbrains.kotlin.ir.util.defaultType
@@ -77,7 +78,12 @@ val IrType.classifierOrNull: IrClassifierSymbol?
get() = safeAs<IrSimpleType>()?.classifier
val IrType.classOrNull: IrClassSymbol?
get() = classifierOrNull as? IrClassSymbol
get() =
when (val classifier = classifierOrNull) {
is IrClassSymbol -> classifier
is IrScriptSymbol -> classifier.owner.targetClass
else -> null
}
val IrType.classFqName: FqName?
get() = classOrNull?.owner?.fqNameWhenAvailable