Make sure the class hierarchy is available for IrLazyClasses in interop modules
This commit is contained in:
committed by
alexander-gorshenev
parent
40602d47ec
commit
33f9f9b917
+15
@@ -33,10 +33,12 @@ import org.jetbrains.kotlin.ir.declarations.*
|
|||||||
import org.jetbrains.kotlin.ir.declarations.impl.IrClassImpl
|
import org.jetbrains.kotlin.ir.declarations.impl.IrClassImpl
|
||||||
import org.jetbrains.kotlin.ir.declarations.impl.IrFileImpl
|
import org.jetbrains.kotlin.ir.declarations.impl.IrFileImpl
|
||||||
import org.jetbrains.kotlin.ir.declarations.impl.IrModuleFragmentImpl
|
import org.jetbrains.kotlin.ir.declarations.impl.IrModuleFragmentImpl
|
||||||
|
import org.jetbrains.kotlin.ir.declarations.lazy.IrLazyClass
|
||||||
import org.jetbrains.kotlin.ir.descriptors.IrAbstractFunctionFactory
|
import org.jetbrains.kotlin.ir.descriptors.IrAbstractFunctionFactory
|
||||||
import org.jetbrains.kotlin.ir.descriptors.IrBuiltIns
|
import org.jetbrains.kotlin.ir.descriptors.IrBuiltIns
|
||||||
import org.jetbrains.kotlin.ir.symbols.IrSymbol
|
import org.jetbrains.kotlin.ir.symbols.IrSymbol
|
||||||
import org.jetbrains.kotlin.ir.symbols.impl.IrFileSymbolImpl
|
import org.jetbrains.kotlin.ir.symbols.impl.IrFileSymbolImpl
|
||||||
|
import org.jetbrains.kotlin.ir.types.classOrNull
|
||||||
import org.jetbrains.kotlin.ir.util.*
|
import org.jetbrains.kotlin.ir.util.*
|
||||||
import org.jetbrains.kotlin.library.IrLibrary
|
import org.jetbrains.kotlin.library.IrLibrary
|
||||||
import org.jetbrains.kotlin.library.KotlinLibrary
|
import org.jetbrains.kotlin.library.KotlinLibrary
|
||||||
@@ -136,6 +138,19 @@ internal class KonanIrLinker(
|
|||||||
|
|
||||||
val symbolOwner = stubGenerator.generateMemberStub(descriptor) as IrSymbolOwner
|
val symbolOwner = stubGenerator.generateMemberStub(descriptor) as IrSymbolOwner
|
||||||
|
|
||||||
|
// Make sure all class hierarchy is available, otherwise we won't be able
|
||||||
|
// to build fake overrides.
|
||||||
|
// TODO: we actually only need it to tell if class .isObjCClass
|
||||||
|
// So if we could come up with a way to tell without looking at class hierarchy
|
||||||
|
// this hack could be erased.
|
||||||
|
if (symbolOwner is IrLazyClass) {
|
||||||
|
symbolOwner.superTypes.forEach {
|
||||||
|
it.classOrNull?.let {
|
||||||
|
symbolTable.referenceClassFromLinker(it.descriptor, it.signature)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return symbolOwner.symbol
|
return symbolOwner.symbol
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user