[KLIB] Add a reliable mechanism to check if KLIB has IR inside
^KT-62341
This commit is contained in:
committed by
Space Team
parent
4b2776e126
commit
f276fe6506
+1
@@ -26,6 +26,7 @@ import org.jetbrains.kotlin.library.impl.*
|
|||||||
class ICData(val icData: List<SerializedIrFile>, val containsErrorCode: Boolean)
|
class ICData(val icData: List<SerializedIrFile>, val containsErrorCode: Boolean)
|
||||||
|
|
||||||
class ICKotlinLibrary(private val icData: List<SerializedIrFile>) : IrLibrary {
|
class ICKotlinLibrary(private val icData: List<SerializedIrFile>) : IrLibrary {
|
||||||
|
override val hasIr get() = true
|
||||||
override val dataFlowGraph: ByteArray? = null
|
override val dataFlowGraph: ByteArray? = null
|
||||||
|
|
||||||
private inline fun <K, R : IrTableReader<K>> Array<R?>.itemBytes(fileIndex: Int, key: K, factory: () -> R): ByteArray {
|
private inline fun <K, R : IrTableReader<K>> Array<R?>.itemBytes(fileIndex: Int, key: K, factory: () -> R): ByteArray {
|
||||||
|
|||||||
@@ -75,6 +75,7 @@ interface MetadataLibrary {
|
|||||||
}
|
}
|
||||||
|
|
||||||
interface IrLibrary {
|
interface IrLibrary {
|
||||||
|
val hasIr: Boolean
|
||||||
val dataFlowGraph: ByteArray?
|
val dataFlowGraph: ByteArray?
|
||||||
fun irDeclaration(index: Int, fileIndex: Int): ByteArray
|
fun irDeclaration(index: Int, fileIndex: Int): ByteArray
|
||||||
fun type(index: Int, fileIndex: Int): ByteArray
|
fun type(index: Int, fileIndex: Int): ByteArray
|
||||||
|
|||||||
@@ -89,6 +89,12 @@ class MetadataLibraryImpl(
|
|||||||
abstract class IrLibraryImpl(
|
abstract class IrLibraryImpl(
|
||||||
val access: IrLibraryAccess<IrKotlinLibraryLayout>
|
val access: IrLibraryAccess<IrKotlinLibraryLayout>
|
||||||
) : IrLibrary {
|
) : IrLibrary {
|
||||||
|
override val hasIr by lazy {
|
||||||
|
access.inPlace { it: IrKotlinLibraryLayout ->
|
||||||
|
it.irDir.exists
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
override val dataFlowGraph by lazy {
|
override val dataFlowGraph by lazy {
|
||||||
access.inPlace { it: IrKotlinLibraryLayout ->
|
access.inPlace { it: IrKotlinLibraryLayout ->
|
||||||
it.dataFlowGraphFile.let { if (it.exists) it.readBytes() else null }
|
it.dataFlowGraphFile.let { if (it.exists) it.readBytes() else null }
|
||||||
|
|||||||
Reference in New Issue
Block a user