diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/util/SymbolTable.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/util/SymbolTable.kt index bb06b2d9686..fcd85ca1386 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/util/SymbolTable.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/util/SymbolTable.kt @@ -12,6 +12,9 @@ import org.jetbrains.kotlin.ir.declarations.lazy.IrLazySymbolTable import org.jetbrains.kotlin.ir.symbols.* import org.jetbrains.kotlin.ir.symbols.impl.* +private fun > IdSignatureSymbolTableSlice(lock: IrLock) = + SymbolTableSlice.Flat(lock) { it.signature != null } + @OptIn(SymbolTableInternals::class) open class SymbolTable( val signaturer: IdSignatureComposer, @@ -20,15 +23,15 @@ open class SymbolTable( ) : ReferenceSymbolTable { val lock: IrLock = IrLock() - private val scriptSlice: SymbolTableSlice.Flat = SymbolTableSlice.Flat(lock) - private val classSlice: SymbolTableSlice.Flat = SymbolTableSlice.Flat(lock) - private val constructorSlice: SymbolTableSlice.Flat = SymbolTableSlice.Flat(lock) - private val enumEntrySlice: SymbolTableSlice.Flat = SymbolTableSlice.Flat(lock) - private val fieldSlice: SymbolTableSlice.Flat = SymbolTableSlice.Flat(lock) - private val functionSlice: SymbolTableSlice.Flat = SymbolTableSlice.Flat(lock) - private val propertySlice: SymbolTableSlice.Flat = SymbolTableSlice.Flat(lock) - private val typeAliasSlice: SymbolTableSlice.Flat = SymbolTableSlice.Flat(lock) - private val globalTypeParameterSlice: SymbolTableSlice.Flat = SymbolTableSlice.Flat(lock) + private val scriptSlice = IdSignatureSymbolTableSlice(lock) + private val classSlice = IdSignatureSymbolTableSlice(lock) + private val constructorSlice = IdSignatureSymbolTableSlice(lock) + private val enumEntrySlice = IdSignatureSymbolTableSlice(lock) + private val fieldSlice = IdSignatureSymbolTableSlice(lock) + private val functionSlice = IdSignatureSymbolTableSlice(lock) + private val propertySlice = IdSignatureSymbolTableSlice(lock) + private val typeAliasSlice = IdSignatureSymbolTableSlice(lock) + private val globalTypeParameterSlice = IdSignatureSymbolTableSlice(lock) @Suppress("LeakingThis") val lazyWrapper = IrLazySymbolTable(this) diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/util/SymbolTableSlice.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/util/SymbolTableSlice.kt index c33d1f33feb..1f026899cca 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/util/SymbolTableSlice.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/util/SymbolTableSlice.kt @@ -91,7 +91,7 @@ abstract class SymbolTableSlice(val lock: IrLock) return owner } - class Flat(lock: IrLock) : SymbolTableSlice(lock) + class Flat(lock: IrLock, val symbolFilter: (Symbol) -> Boolean = { true }) : SymbolTableSlice(lock) where SymbolOwner : IrSymbolOwner, Symbol : IrBindableSymbol<*, SymbolOwner> { private val signatureToSymbol = hashMapOf() @@ -100,7 +100,9 @@ abstract class SymbolTableSlice(val lock: IrLock) } override fun set(key: Key, symbol: Symbol) { - signatureToSymbol[key] = symbol + if (symbolFilter(symbol)) { + signatureToSymbol[key] = symbol + } } @SymbolTableInternals