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.
This commit is contained in:
Alexander Udalov
2019-12-18 18:30:35 +01:00
committed by Ilya Gorbunov
parent ea95aabbb0
commit 0815ed2cbd
3 changed files with 9 additions and 9 deletions
@@ -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.Symbols
import org.jetbrains.kotlin.backend.common.ir.createImplicitParameterDeclarationWithWrappedDescriptor import org.jetbrains.kotlin.backend.common.ir.createImplicitParameterDeclarationWithWrappedDescriptor
import org.jetbrains.kotlin.backend.jvm.intrinsics.IrIntrinsicMethods 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.INVOKE_SUSPEND_METHOD_NAME
import org.jetbrains.kotlin.codegen.coroutines.SUSPEND_CALL_RESULT_NAME import org.jetbrains.kotlin.codegen.coroutines.SUSPEND_CALL_RESULT_NAME
import org.jetbrains.kotlin.codegen.coroutines.SUSPEND_FUNCTION_COMPLETION_PARAMETER_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 kotlinJvmPackage: IrPackageFragment = createPackage(FqName("kotlin.jvm"))
private val kotlinJvmInternalPackage: IrPackageFragment = createPackage(FqName("kotlin.jvm.internal")) private val kotlinJvmInternalPackage: IrPackageFragment = createPackage(FqName("kotlin.jvm.internal"))
private val kotlinJvmFunctionsPackage: IrPackageFragment = createPackage(FqName("kotlin.jvm.functions")) 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 javaLangPackage: IrPackageFragment = createPackage(FqName("java.lang"))
private val irBuiltIns = context.irBuiltIns private val irBuiltIns = context.irBuiltIns
@@ -99,6 +101,7 @@ class JvmSymbols(
"kotlin.coroutines.jvm.internal" -> kotlinCoroutinesJvmInternalPackage "kotlin.coroutines.jvm.internal" -> kotlinCoroutinesJvmInternalPackage
"kotlin.jvm.internal" -> kotlinJvmInternalPackage "kotlin.jvm.internal" -> kotlinJvmInternalPackage
"kotlin.jvm.functions" -> kotlinJvmFunctionsPackage "kotlin.jvm.functions" -> kotlinJvmFunctionsPackage
"kotlin.reflect" -> kotlinReflectPackage
"java.lang" -> javaLangPackage "java.lang" -> javaLangPackage
else -> error("Other packages are not supported yet: $fqName") else -> error("Other packages are not supported yet: $fqName")
} }
@@ -189,6 +192,9 @@ class JvmSymbols(
override val returnIfSuspended: IrSimpleFunctionSymbol override val returnIfSuspended: IrSimpleFunctionSymbol
get() = TODO("not implemented") get() = TODO("not implemented")
private val kDeclarationContainer: IrClassSymbol =
createClass(KotlinBuiltIns.FQ_NAMES.kDeclarationContainer.toSafe(), ClassKind.INTERFACE, Modality.ABSTRACT)
val javaLangClass: IrClassSymbol = val javaLangClass: IrClassSymbol =
createClass(FqName("java.lang.Class")) { klass -> createClass(FqName("java.lang.Class")) { klass ->
klass.addTypeParameter("T", irBuiltIns.anyNType, Variance.INVARIANT) klass.addTypeParameter("T", irBuiltIns.anyNType, Variance.INVARIANT)
@@ -259,7 +265,7 @@ class JvmSymbols(
private fun generateCallableReferenceMethods(klass: IrClass) { private fun generateCallableReferenceMethods(klass: IrClass) {
klass.addFunction("getSignature", irBuiltIns.stringType, Modality.OPEN) klass.addFunction("getSignature", irBuiltIns.stringType, Modality.OPEN)
klass.addFunction("getName", 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 -> val functionReference: IrClassSymbol = createClass(FqName("kotlin.jvm.internal.FunctionReference")) { klass ->
@@ -350,7 +356,7 @@ class JvmSymbols(
) { klass -> ) { klass ->
if (impl) { if (impl) {
klass.addConstructor().apply { klass.addConstructor().apply {
addValueParameter("owner", irBuiltIns.kDeclarationContainerClass.defaultType) addValueParameter("owner", kDeclarationContainer.defaultType)
addValueParameter("name", irBuiltIns.stringType) addValueParameter("name", irBuiltIns.stringType)
addValueParameter("string", irBuiltIns.stringType) addValueParameter("string", irBuiltIns.stringType)
} }
@@ -409,7 +415,7 @@ class JvmSymbols(
val javaLangClassType = javaLangClass.starProjectedType val javaLangClassType = javaLangClass.starProjectedType
val kClassType = irBuiltIns.kClassClass.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("javaClass", javaLangClassType)
addValueParameter("moduleName", irBuiltIns.stringType) addValueParameter("moduleName", irBuiltIns.stringType)
} }
@@ -226,7 +226,6 @@ class IrBuiltIns(
val kCallableClass = builtIns.kCallable.toIrSymbol() val kCallableClass = builtIns.kCallable.toIrSymbol()
val kPropertyClass = builtIns.kProperty.toIrSymbol() val kPropertyClass = builtIns.kProperty.toIrSymbol()
val kDeclarationContainerClass = builtIns.kDeclarationContainer.toIrSymbol()
val kClassClass = builtIns.kClass.toIrSymbol() val kClassClass = builtIns.kClass.toIrSymbol()
private val kProperty0Class = builtIns.kProperty0.toIrSymbol() private val kProperty0Class = builtIns.kProperty0.toIrSymbol()
@@ -493,11 +493,6 @@ public abstract class KotlinBuiltIns {
return getBuiltInClassByFqName(FQ_NAMES.kClass.toSafe()); return getBuiltInClassByFqName(FQ_NAMES.kClass.toSafe());
} }
@NotNull
public ClassDescriptor getKDeclarationContainer() {
return getBuiltInClassByFqName(FQ_NAMES.kDeclarationContainer.toSafe());
}
@NotNull @NotNull
public ClassDescriptor getKCallable() { public ClassDescriptor getKCallable() {
return getBuiltInClassByFqName(FQ_NAMES.kCallable.toSafe()); return getBuiltInClassByFqName(FQ_NAMES.kCallable.toSafe());