diff --git a/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/lower/LateinitLowering.kt b/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/lower/LateinitLowering.kt index 2028ae41565..44d9a049a12 100644 --- a/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/lower/LateinitLowering.kt +++ b/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/lower/LateinitLowering.kt @@ -132,5 +132,5 @@ class LateinitLowering(val context: CommonBackendContext) : FileLoweringPass { ) } - private val throwErrorFunction = context.ir.symbols.ThrowUninitializedPropertyAccessException.owner + private val throwErrorFunction by lazy { context.ir.symbols.ThrowUninitializedPropertyAccessException.owner } } \ No newline at end of file diff --git a/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/JsIrBackendContext.kt b/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/JsIrBackendContext.kt index d3ce9dd4244..d368014f2fb 100644 --- a/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/JsIrBackendContext.kt +++ b/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/JsIrBackendContext.kt @@ -168,12 +168,14 @@ class JsIrBackendContext( return numbers + listOf(Name.identifier("String")) } - val primitiveCompanionObjects = primitivesWithImplicitCompanionObject() - .associate { - it to symbolTable.lazyWrapper.referenceClass( - getClass(JS_INTERNAL_PACKAGE_FQNAME.child(Name.identifier("${it.identifier}CompanionObject"))) - ) - } + val primitiveCompanionObjects by lazy { + primitivesWithImplicitCompanionObject() + .associate { + it to symbolTable.lazyWrapper.referenceClass( + getClass(JS_INTERNAL_PACKAGE_FQNAME.child(Name.identifier("${it.identifier}CompanionObject"))) + ) + } + } val suspendFunctions = (0..22).map { symbolTable.referenceClass(builtIns.getSuspendFunction(it)) } @@ -237,29 +239,35 @@ class JsIrBackendContext( override fun shouldGenerateHandlerParameterForDefaultBodyFun() = true } - val throwISEymbol = getFunctions(kotlinPackageFqn.child(Name.identifier("THROW_CCE"))).singleOrNull()?.let { - symbolTable.referenceSimpleFunction(it) } ?: irBuiltIns.throwIseSymbol + val throwISEymbol by lazy { getFunctions(kotlinPackageFqn.child(Name.identifier("THROW_CCE"))).singleOrNull()?.let { + symbolTable.referenceSimpleFunction(it) } ?: irBuiltIns.throwIseSymbol } val coroutineImplLabelProperty by lazy { ir.symbols.coroutineImpl.getPropertyDeclaration("state")!! } val coroutineImplResultSymbol by lazy { ir.symbols.coroutineImpl.getPropertyDeclaration("result")!! } val coroutineImplExceptionProperty by lazy { ir.symbols.coroutineImpl.getPropertyDeclaration("exception")!! } val coroutineImplExceptionStateProperty by lazy { ir.symbols.coroutineImpl.getPropertyDeclaration("exceptionState")!! } - val primitiveClassesObject = symbolTable.referenceClass( - getClass(FqName.fromSegments(listOf("kotlin", "reflect", "js", "internal", "PrimitiveClasses"))) - ).owner + val primitiveClassesObject by lazy { + symbolTable.referenceClass( + getClass(FqName.fromSegments(listOf("kotlin", "reflect", "js", "internal", "PrimitiveClasses"))) + ).owner + } - val primitiveClassProperties = primitiveClassesObject.declarations.filterIsInstance() - val primitiveClassFunctionClass = primitiveClassesObject.declarations - .filterIsInstance() - .find { it.name == Name.identifier("functionClass") }!! + val primitiveClassProperties by lazy { primitiveClassesObject.declarations.filterIsInstance() } + val primitiveClassFunctionClass by lazy { + primitiveClassesObject.declarations + .filterIsInstance() + .find { it.name == Name.identifier("functionClass") }!! + } - val throwableClass = symbolTable.referenceClass( - getClass(JsIrBackendContext.KOTLIN_PACKAGE_FQN.child(Name.identifier("Throwable"))) - ).owner - val throwableConstructors = throwableClass.declarations.filterIsInstance() + val throwableClass by lazy { + symbolTable.referenceClass( + getClass(JsIrBackendContext.KOTLIN_PACKAGE_FQN.child(Name.identifier("Throwable"))) + ).owner + } + val throwableConstructors by lazy { throwableClass.declarations.filterIsInstance() } - val defaultThrowableCtor = throwableConstructors.single { it.valueParameters.size == 0 } + val defaultThrowableCtor by lazy { throwableConstructors.single { it.valueParameters.size == 0 } } private fun referenceOperators() = OperatorNames.ALL.map { name -> // TODO to replace KotlinType with IrType we need right equals on IrType diff --git a/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/lower/ClassReferenceLowering.kt b/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/lower/ClassReferenceLowering.kt index 97e09ac11a8..1e8510e7f16 100644 --- a/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/lower/ClassReferenceLowering.kt +++ b/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/lower/ClassReferenceLowering.kt @@ -23,44 +23,47 @@ import org.jetbrains.kotlin.ir.visitors.transformChildrenVoid import org.jetbrains.kotlin.name.Name class ClassReferenceLowering(val context: JsIrBackendContext) : FileLoweringPass { - private val intrinsics = context.intrinsics + private val intrinsics by lazy { context.intrinsics } - private val primitiveClassesObject = context.primitiveClassesObject + private val primitiveClassesObject by lazy { context.primitiveClassesObject } - private val primitiveClassProperties = context.primitiveClassProperties + private val primitiveClassProperties by lazy { context.primitiveClassProperties } private fun primitiveClassProperty(name: String) = primitiveClassProperties.single { it.name == Name.identifier(name) } - - private val finalPrimitiveClasses = mapOf( - IrType::isBoolean to "booleanClass", - IrType::isByte to "byteClass", - IrType::isShort to "shortClass", - IrType::isInt to "intClass", - IrType::isFloat to "floatClass", - IrType::isDouble to "doubleClass", - IrType::isArray to "arrayClass", - IrType::isString to "stringClass", - IrType::isThrowable to "throwableClass", - IrType::isBooleanArray to "booleanArrayClass", - IrType::isCharArray to "charArrayClass", - IrType::isByteArray to "byteArrayClass", - IrType::isShortArray to "shortArrayClass", - IrType::isIntArray to "intArrayClass", - IrType::isLongArray to "longArrayClass", - IrType::isFloatArray to "floatArrayClass", - IrType::isDoubleArray to "doubleArrayClass" - ).mapValues { - primitiveClassProperty(it.value).getter!! + private val finalPrimitiveClasses by lazy { + mapOf( + IrType::isBoolean to "booleanClass", + IrType::isByte to "byteClass", + IrType::isShort to "shortClass", + IrType::isInt to "intClass", + IrType::isFloat to "floatClass", + IrType::isDouble to "doubleClass", + IrType::isArray to "arrayClass", + IrType::isString to "stringClass", + IrType::isThrowable to "throwableClass", + IrType::isBooleanArray to "booleanArrayClass", + IrType::isCharArray to "charArrayClass", + IrType::isByteArray to "byteArrayClass", + IrType::isShortArray to "shortArrayClass", + IrType::isIntArray to "intArrayClass", + IrType::isLongArray to "longArrayClass", + IrType::isFloatArray to "floatArrayClass", + IrType::isDoubleArray to "doubleArrayClass" + ).mapValues { + primitiveClassProperty(it.value).getter!! + } } - private val openPrimitiveClasses = mapOf( - IrType::isAny to "anyClass", - IrType::isNumber to "numberClass", - IrType::isNothing to "nothingClass" - ).mapValues { - primitiveClassProperty(it.value).getter!! + private val openPrimitiveClasses by lazy { + mapOf( + IrType::isAny to "anyClass", + IrType::isNumber to "numberClass", + IrType::isNothing to "nothingClass" + ).mapValues { + primitiveClassProperty(it.value).getter!! + } } private fun callGetKClassFromExpression(returnType: IrType, typeArgument: IrType, argument: IrExpression): IrExpression {