From 0815ed2cbd07ea9fd1e5c85a547ef51da4f2d444 Mon Sep 17 00:00:00 2001 From: Alexander Udalov Date: Wed, 18 Dec 2019 18:30:35 +0100 Subject: [PATCH] JVM IR: do not load KDeclarationContainer from builtins Like other classes declared in the standard library, construct a mock of it in JvmSymbols. This is needed to move classes in kotlin.reflect out from builtins and to the JVM part of the standard library. --- .../org/jetbrains/kotlin/backend/jvm/JvmSymbols.kt | 12 +++++++++--- .../jetbrains/kotlin/ir/descriptors/IrBuiltIns.kt | 1 - .../jetbrains/kotlin/builtins/KotlinBuiltIns.java | 5 ----- 3 files changed, 9 insertions(+), 9 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 be47024ea06..5b2e59f57a0 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 @@ -8,6 +8,7 @@ package org.jetbrains.kotlin.backend.jvm import org.jetbrains.kotlin.backend.common.ir.Symbols import org.jetbrains.kotlin.backend.common.ir.createImplicitParameterDeclarationWithWrappedDescriptor import org.jetbrains.kotlin.backend.jvm.intrinsics.IrIntrinsicMethods +import org.jetbrains.kotlin.builtins.KotlinBuiltIns import org.jetbrains.kotlin.codegen.coroutines.INVOKE_SUSPEND_METHOD_NAME import org.jetbrains.kotlin.codegen.coroutines.SUSPEND_CALL_RESULT_NAME import org.jetbrains.kotlin.codegen.coroutines.SUSPEND_FUNCTION_COMPLETION_PARAMETER_NAME @@ -44,6 +45,7 @@ class JvmSymbols( private val kotlinJvmPackage: IrPackageFragment = createPackage(FqName("kotlin.jvm")) private val kotlinJvmInternalPackage: IrPackageFragment = createPackage(FqName("kotlin.jvm.internal")) private val kotlinJvmFunctionsPackage: IrPackageFragment = createPackage(FqName("kotlin.jvm.functions")) + private val kotlinReflectPackage: IrPackageFragment = createPackage(FqName("kotlin.reflect")) private val javaLangPackage: IrPackageFragment = createPackage(FqName("java.lang")) private val irBuiltIns = context.irBuiltIns @@ -99,6 +101,7 @@ class JvmSymbols( "kotlin.coroutines.jvm.internal" -> kotlinCoroutinesJvmInternalPackage "kotlin.jvm.internal" -> kotlinJvmInternalPackage "kotlin.jvm.functions" -> kotlinJvmFunctionsPackage + "kotlin.reflect" -> kotlinReflectPackage "java.lang" -> javaLangPackage else -> error("Other packages are not supported yet: $fqName") } @@ -189,6 +192,9 @@ class JvmSymbols( override val returnIfSuspended: IrSimpleFunctionSymbol get() = TODO("not implemented") + private val kDeclarationContainer: IrClassSymbol = + createClass(KotlinBuiltIns.FQ_NAMES.kDeclarationContainer.toSafe(), ClassKind.INTERFACE, Modality.ABSTRACT) + val javaLangClass: IrClassSymbol = createClass(FqName("java.lang.Class")) { klass -> klass.addTypeParameter("T", irBuiltIns.anyNType, Variance.INVARIANT) @@ -259,7 +265,7 @@ class JvmSymbols( private fun generateCallableReferenceMethods(klass: IrClass) { klass.addFunction("getSignature", irBuiltIns.stringType, Modality.OPEN) klass.addFunction("getName", irBuiltIns.stringType, Modality.OPEN) - klass.addFunction("getOwner", irBuiltIns.kDeclarationContainerClass.defaultType, Modality.OPEN) + klass.addFunction("getOwner", kDeclarationContainer.defaultType, Modality.OPEN) } val functionReference: IrClassSymbol = createClass(FqName("kotlin.jvm.internal.FunctionReference")) { klass -> @@ -350,7 +356,7 @@ class JvmSymbols( ) { klass -> if (impl) { klass.addConstructor().apply { - addValueParameter("owner", irBuiltIns.kDeclarationContainerClass.defaultType) + addValueParameter("owner", kDeclarationContainer.defaultType) addValueParameter("name", irBuiltIns.stringType) addValueParameter("string", irBuiltIns.stringType) } @@ -409,7 +415,7 @@ class JvmSymbols( val javaLangClassType = javaLangClass.starProjectedType val kClassType = irBuiltIns.kClassClass.starProjectedType - klass.addFunction("getOrCreateKotlinPackage", irBuiltIns.kDeclarationContainerClass.defaultType, isStatic = true).apply { + klass.addFunction("getOrCreateKotlinPackage", kDeclarationContainer.defaultType, isStatic = true).apply { addValueParameter("javaClass", javaLangClassType) addValueParameter("moduleName", irBuiltIns.stringType) } diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/descriptors/IrBuiltIns.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/descriptors/IrBuiltIns.kt index 37bed4c186f..429c9b04df2 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/descriptors/IrBuiltIns.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/descriptors/IrBuiltIns.kt @@ -226,7 +226,6 @@ class IrBuiltIns( val kCallableClass = builtIns.kCallable.toIrSymbol() val kPropertyClass = builtIns.kProperty.toIrSymbol() - val kDeclarationContainerClass = builtIns.kDeclarationContainer.toIrSymbol() val kClassClass = builtIns.kClass.toIrSymbol() private val kProperty0Class = builtIns.kProperty0.toIrSymbol() diff --git a/core/descriptors/src/org/jetbrains/kotlin/builtins/KotlinBuiltIns.java b/core/descriptors/src/org/jetbrains/kotlin/builtins/KotlinBuiltIns.java index 1f429ace633..e2505afeb33 100644 --- a/core/descriptors/src/org/jetbrains/kotlin/builtins/KotlinBuiltIns.java +++ b/core/descriptors/src/org/jetbrains/kotlin/builtins/KotlinBuiltIns.java @@ -493,11 +493,6 @@ public abstract class KotlinBuiltIns { return getBuiltInClassByFqName(FQ_NAMES.kClass.toSafe()); } - @NotNull - public ClassDescriptor getKDeclarationContainer() { - return getBuiltInClassByFqName(FQ_NAMES.kDeclarationContainer.toSafe()); - } - @NotNull public ClassDescriptor getKCallable() { return getBuiltInClassByFqName(FQ_NAMES.kCallable.toSafe());