From 892419c08a0825db2a91155d5794ef27806e5ad5 Mon Sep 17 00:00:00 2001 From: Mikhail Glukhikh Date: Mon, 29 Apr 2019 16:02:56 +0300 Subject: [PATCH] Generate stub java.lang.Class in IR JvmSymbols instead of scope reading Before this commit, java.lang.Class was read via JvmBackendContext, its module descriptor and its package member scope. However, this works only for old FE with descriptors and descriptor-based scopes available. --- .../src/org/jetbrains/kotlin/backend/jvm/JvmSymbols.kt | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/JvmSymbols.kt b/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/JvmSymbols.kt index 03a244de5a0..a7620deb22c 100644 --- a/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/JvmSymbols.kt +++ b/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/JvmSymbols.kt @@ -51,6 +51,7 @@ class JvmSymbols( private val kotlinJvmInternalPackage: IrPackageFragment = createPackage(FqName("kotlin.jvm.internal")) private val kotlinJvmFunctionsPackage: IrPackageFragment = createPackage(FqName("kotlin.jvm.functions")) + private val javaLangPackage: IrPackageFragment = createPackage(FqName("java.lang")) private fun createClass(fqName: FqName, classKind: ClassKind = ClassKind.CLASS, block: (IrClass) -> Unit): IrClass = buildClass { @@ -60,6 +61,7 @@ class JvmSymbols( parent = when (fqName.parent().asString()) { "kotlin.jvm.internal" -> kotlinJvmInternalPackage "kotlin.jvm.functions" -> kotlinJvmFunctionsPackage + "java.lang" -> javaLangPackage else -> error("Other packages are not supported yet: $fqName") } createImplicitParameterDeclarationWithWrappedDescriptor() @@ -93,8 +95,7 @@ class JvmSymbols( override val getContinuation: IrSimpleFunctionSymbol get() = TODO("not implemented") - val javaLangClass: IrClassSymbol = - context.getTopLevelClass(FqName("java.lang.Class")) + val javaLangClass: IrClassSymbol = createClass(FqName("java.lang.Class")) {}.symbol val lambdaClass: IrClassSymbol = createClass(FqName("kotlin.jvm.internal.Lambda")) { klass -> klass.addConstructor().apply {