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:
committed by
Ilya Gorbunov
parent
ea95aabbb0
commit
0815ed2cbd
@@ -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());
|
||||||
|
|||||||
Reference in New Issue
Block a user