[PL] Don't use trove4j in partial linkage

This commit is contained in:
Dmitriy Dolovov
2023-02-22 14:19:22 +01:00
committed by Space Team
parent 22ee170f44
commit 4b1f739c89
2 changed files with 11 additions and 25 deletions
@@ -13,7 +13,6 @@ dependencies {
compileOnly(commonDependency("org.jetbrains.kotlin:kotlin-reflect")) { isTransitive = false }
compileOnly(intellijCore())
compileOnly(commonDependency("org.jetbrains.intellij.deps:trove4j"))
}
sourceSets {
@@ -5,8 +5,6 @@
package org.jetbrains.kotlin.backend.common.serialization.unlinked
import gnu.trove.THashSet
import gnu.trove.TObjectByteHashMap
import org.jetbrains.kotlin.backend.common.serialization.unlinked.UsedClassifierSymbolStatus.*
import org.jetbrains.kotlin.ir.symbols.IrClassSymbol
import org.jetbrains.kotlin.ir.symbols.IrClassifierSymbol
@@ -24,37 +22,26 @@ internal enum class UsedClassifierSymbolStatus(val isUnlinked: Boolean) {
}
internal class UsedClassifierSymbols {
private val symbols = TObjectByteHashMap<IrClassifierSymbol>()
private val patchedSymbols = THashSet<IrClassSymbol>() // To avoid re-patching what already has been patched.
private val symbols = HashMap<IrClassifierSymbol, Boolean>()
private val patchedSymbols = HashSet<IrClassSymbol>() // To avoid re-patching what already has been patched.
fun forEachClassSymbolToPatch(patchAction: (IrClassSymbol) -> Unit) {
symbols.forEachEntry { symbol, code ->
if (symbol.isBound && code.status == UNLINKED && symbol is IrClassSymbol && patchedSymbols.add(symbol)) {
symbols.forEach { (symbol, isUnlinked) ->
if (isUnlinked && symbol.isBound && symbol is IrClassSymbol && patchedSymbols.add(symbol)) {
patchAction(symbol)
}
true
}
}
operator fun get(symbol: IrClassifierSymbol): UsedClassifierSymbolStatus? = symbols[symbol].status
operator fun get(symbol: IrClassifierSymbol): UsedClassifierSymbolStatus? =
when (symbols[symbol]) {
true -> UNLINKED
false -> LINKED
null -> null
}
fun register(symbol: IrClassifierSymbol, status: UsedClassifierSymbolStatus): Boolean {
symbols.put(symbol, status.code)
symbols[symbol] = status.isUnlinked
return status.isUnlinked
}
companion object {
private inline val Byte.status: UsedClassifierSymbolStatus?
get() = when (this) {
1.toByte() -> UNLINKED
2.toByte() -> LINKED
else -> null
}
private inline val UsedClassifierSymbolStatus.code: Byte
get() = when (this) {
UNLINKED -> 1.toByte()
LINKED -> 2.toByte()
}
}
}