JVM IR: rename JvmBackendContext.getClass and return symbol instead of descriptor
This commit is contained in:
@@ -18,6 +18,7 @@ import org.jetbrains.kotlin.ir.declarations.IrFile
|
|||||||
import org.jetbrains.kotlin.ir.declarations.IrModuleFragment
|
import org.jetbrains.kotlin.ir.declarations.IrModuleFragment
|
||||||
import org.jetbrains.kotlin.ir.descriptors.IrBuiltIns
|
import org.jetbrains.kotlin.ir.descriptors.IrBuiltIns
|
||||||
import org.jetbrains.kotlin.ir.symbols.IrClassSymbol
|
import org.jetbrains.kotlin.ir.symbols.IrClassSymbol
|
||||||
|
import org.jetbrains.kotlin.ir.util.ReferenceSymbolTable
|
||||||
import org.jetbrains.kotlin.ir.util.SymbolTable
|
import org.jetbrains.kotlin.ir.util.SymbolTable
|
||||||
import org.jetbrains.kotlin.name.FqName
|
import org.jetbrains.kotlin.name.FqName
|
||||||
import org.jetbrains.kotlin.psi2ir.PsiSourceManager
|
import org.jetbrains.kotlin.psi2ir.PsiSourceManager
|
||||||
@@ -34,16 +35,18 @@ class JvmBackendContext(
|
|||||||
override val declarationFactory: JvmDeclarationFactory = JvmDeclarationFactory(state)
|
override val declarationFactory: JvmDeclarationFactory = JvmDeclarationFactory(state)
|
||||||
override val sharedVariablesManager = JvmSharedVariablesManager(state.module, builtIns, irBuiltIns)
|
override val sharedVariablesManager = JvmSharedVariablesManager(state.module, builtIns, irBuiltIns)
|
||||||
|
|
||||||
override val ir = JvmIr(irModuleFragment, symbolTable)
|
private val symbolTable = symbolTable.lazyWrapper
|
||||||
|
override val ir = JvmIr(irModuleFragment, this.symbolTable)
|
||||||
|
|
||||||
override var inVerbosePhase: Boolean = false
|
override var inVerbosePhase: Boolean = false
|
||||||
|
|
||||||
override val configuration get() = state.configuration
|
override val configuration get() = state.configuration
|
||||||
|
|
||||||
internal fun getClass(fqName: FqName): ClassDescriptor {
|
internal fun getTopLevelClass(fqName: FqName): IrClassSymbol {
|
||||||
return state.module.getPackage(fqName.parent()).memberScope.getContributedClassifier(
|
val descriptor = state.module.getPackage(fqName.parent()).memberScope.getContributedClassifier(
|
||||||
fqName.shortName(), NoLookupLocation.FROM_BACKEND
|
fqName.shortName(), NoLookupLocation.FROM_BACKEND
|
||||||
) as ClassDescriptor? ?: error("Class is not found: $fqName")
|
) as ClassDescriptor? ?: error("Class is not found: $fqName")
|
||||||
|
return symbolTable.referenceClass(descriptor)
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun log(message: () -> String) {
|
override fun log(message: () -> String) {
|
||||||
@@ -58,8 +61,11 @@ class JvmBackendContext(
|
|||||||
print(message)
|
print(message)
|
||||||
}
|
}
|
||||||
|
|
||||||
inner class JvmIr(irModuleFragment: IrModuleFragment, symbolTable: SymbolTable) : Ir<JvmBackendContext>(this, irModuleFragment) {
|
inner class JvmIr(
|
||||||
override val symbols = JvmSymbols(this@JvmBackendContext, symbolTable.lazyWrapper)
|
irModuleFragment: IrModuleFragment,
|
||||||
|
symbolTable: ReferenceSymbolTable
|
||||||
|
) : Ir<JvmBackendContext>(this, irModuleFragment) {
|
||||||
|
override val symbols = JvmSymbols(this@JvmBackendContext, symbolTable)
|
||||||
|
|
||||||
override fun shouldGenerateHandlerParameterForDefaultBodyFun() = true
|
override fun shouldGenerateHandlerParameterForDefaultBodyFun() = true
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -76,7 +76,7 @@ class JvmSymbols(
|
|||||||
intrinsicsClass.functions.single { it.owner.name.asString() == "throwUninitializedPropertyAccessException" }
|
intrinsicsClass.functions.single { it.owner.name.asString() == "throwUninitializedPropertyAccessException" }
|
||||||
|
|
||||||
override val stringBuilder: IrClassSymbol
|
override val stringBuilder: IrClassSymbol
|
||||||
get() = symbolTable.referenceClass(context.getClass(FqName("java.lang.StringBuilder")))
|
get() = context.getTopLevelClass(FqName("java.lang.StringBuilder"))
|
||||||
|
|
||||||
override val defaultConstructorMarker: IrClassSymbol =
|
override val defaultConstructorMarker: IrClassSymbol =
|
||||||
createClass(FqName("kotlin.jvm.internal.DefaultConstructorMarker")) { }.symbol
|
createClass(FqName("kotlin.jvm.internal.DefaultConstructorMarker")) { }.symbol
|
||||||
@@ -91,7 +91,7 @@ class JvmSymbols(
|
|||||||
get() = TODO("not implemented")
|
get() = TODO("not implemented")
|
||||||
|
|
||||||
val javaLangClass: IrClassSymbol =
|
val javaLangClass: IrClassSymbol =
|
||||||
symbolTable.referenceClass(context.getClass(FqName("java.lang.Class")))
|
context.getTopLevelClass(FqName("java.lang.Class"))
|
||||||
|
|
||||||
val lambdaClass: IrClassSymbol = createClass(FqName("kotlin.jvm.internal.Lambda")) { klass ->
|
val lambdaClass: IrClassSymbol = createClass(FqName("kotlin.jvm.internal.Lambda")) { klass ->
|
||||||
klass.addConstructor().apply {
|
klass.addConstructor().apply {
|
||||||
|
|||||||
+1
-2
@@ -211,8 +211,7 @@ internal class CallableReferenceLowering(val context: JvmBackendContext) : FileL
|
|||||||
lastParameterType.classOrNull?.owner?.fqNameWhenAvailable?.asString() == "kotlin.coroutines.experimental.Continuation"
|
lastParameterType.classOrNull?.owner?.fqNameWhenAvailable?.asString() == "kotlin.coroutines.experimental.Continuation"
|
||||||
) {
|
) {
|
||||||
// If the last parameter is Continuation<> inherit from SuspendFunction.
|
// If the last parameter is Continuation<> inherit from SuspendFunction.
|
||||||
val suspendFunctionDescriptor = context.getClass(FqName("kotlin.coroutines.SuspendFunction${numberOfParameters - 1}"))
|
suspendFunctionClass = context.getTopLevelClass(FqName("kotlin.coroutines.SuspendFunction${numberOfParameters - 1}")).owner
|
||||||
suspendFunctionClass = context.ir.symbols.externalSymbolTable.referenceClass(suspendFunctionDescriptor).owner
|
|
||||||
val suspendFunctionClassTypeParameters = functionParameterTypes.dropLast(1) +
|
val suspendFunctionClassTypeParameters = functionParameterTypes.dropLast(1) +
|
||||||
(lastParameterType.arguments.single() as IrTypeProjection).type
|
(lastParameterType.arguments.single() as IrTypeProjection).type
|
||||||
functionReferenceClassSuperTypes += IrSimpleTypeImpl(
|
functionReferenceClassSuperTypes += IrSimpleTypeImpl(
|
||||||
|
|||||||
Reference in New Issue
Block a user