[K/N] Remove unused default dependencies from klib

^KT-55603
This commit is contained in:
Pavel Kunyavskiy
2023-04-02 12:22:17 +02:00
committed by Space Team
parent f662908440
commit 95541da9a1
5 changed files with 51 additions and 20 deletions
@@ -1147,23 +1147,28 @@ open class SymbolTable(
throw IllegalArgumentException("Unexpected value descriptor: $value")
}
private inline fun <D : DeclarationDescriptor, IR : IrSymbolOwner, S : IrBindableSymbol<D, IR>> FlatSymbolTable<D, IR, S>.forEachPublicSymbolImpl(
private inline fun <D : DeclarationDescriptor, IR : IrSymbolOwner, S : IrBindableSymbol<D, IR>> FlatSymbolTable<D, IR, S>.forEachSymbolImpl(
block: (IrSymbol) -> Unit
) {
idSigToSymbol.forEach { (_, sym) ->
assert(sym.isPublicApi)
block(sym)
}
}
fun forEachPublicSymbol(block: (IrSymbol) -> Unit) {
classSymbolTable.forEachPublicSymbolImpl { block(it) }
constructorSymbolTable.forEachPublicSymbolImpl { block(it) }
simpleFunctionSymbolTable.forEachPublicSymbolImpl { block(it) }
propertySymbolTable.forEachPublicSymbolImpl { block(it) }
enumEntrySymbolTable.forEachPublicSymbolImpl { block(it) }
typeAliasSymbolTable.forEachPublicSymbolImpl { block(it) }
fieldSymbolTable.forEachPublicSymbolImpl { block(it) }
/**
* This function is quite messy and doesn't have good contract of what exactly is traversed.
* Basic idea is it traverse symbols which can be reasonable referered from other module
*
* Be careful when using it, and avoid it, except really need.
*/
fun forEachDeclarationSymbol(block: (IrSymbol) -> Unit) {
classSymbolTable.forEachSymbolImpl { block(it) }
constructorSymbolTable.forEachSymbolImpl { block(it) }
simpleFunctionSymbolTable.forEachSymbolImpl { block(it) }
propertySymbolTable.forEachSymbolImpl { block(it) }
enumEntrySymbolTable.forEachSymbolImpl { block(it) }
typeAliasSymbolTable.forEachSymbolImpl { block(it) }
fieldSymbolTable.forEachSymbolImpl { block(it) }
}
}
@@ -14,6 +14,7 @@ import org.jetbrains.kotlin.ir.IrBuiltIns
import org.jetbrains.kotlin.ir.declarations.IrModuleFragment
import org.jetbrains.kotlin.ir.declarations.IrSymbolOwner
import org.jetbrains.kotlin.ir.symbols.IrSymbol
import org.jetbrains.kotlin.ir.symbols.isPublicApi
import org.jetbrains.kotlin.ir.util.IdSignature
import org.jetbrains.kotlin.ir.util.SymbolTable
import org.jetbrains.kotlin.library.IrLibrary
@@ -144,7 +145,8 @@ class CurrentModuleWithICDeserializer(
override fun init(delegate: IrModuleDeserializer) {
val knownBuiltIns = irBuiltIns.knownBuiltins.map { (it as IrSymbolOwner).symbol }.toSet()
symbolTable.forEachPublicSymbol {
symbolTable.forEachDeclarationSymbol {
assert(it.isPublicApi)
if (it.descriptor.isDirtyDescriptor()) { // public && non-deserialized should be dirty symbol
if (it !in knownBuiltIns) {
dirtyDeclarations[it.signature!!] = it