[PL] Don't use trove4j in partial linkage
This commit is contained in:
committed by
Space Team
parent
22ee170f44
commit
4b1f739c89
@@ -13,7 +13,6 @@ dependencies {
|
|||||||
compileOnly(commonDependency("org.jetbrains.kotlin:kotlin-reflect")) { isTransitive = false }
|
compileOnly(commonDependency("org.jetbrains.kotlin:kotlin-reflect")) { isTransitive = false }
|
||||||
|
|
||||||
compileOnly(intellijCore())
|
compileOnly(intellijCore())
|
||||||
compileOnly(commonDependency("org.jetbrains.intellij.deps:trove4j"))
|
|
||||||
}
|
}
|
||||||
|
|
||||||
sourceSets {
|
sourceSets {
|
||||||
|
|||||||
+11
-24
@@ -5,8 +5,6 @@
|
|||||||
|
|
||||||
package org.jetbrains.kotlin.backend.common.serialization.unlinked
|
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.backend.common.serialization.unlinked.UsedClassifierSymbolStatus.*
|
||||||
import org.jetbrains.kotlin.ir.symbols.IrClassSymbol
|
import org.jetbrains.kotlin.ir.symbols.IrClassSymbol
|
||||||
import org.jetbrains.kotlin.ir.symbols.IrClassifierSymbol
|
import org.jetbrains.kotlin.ir.symbols.IrClassifierSymbol
|
||||||
@@ -24,37 +22,26 @@ internal enum class UsedClassifierSymbolStatus(val isUnlinked: Boolean) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
internal class UsedClassifierSymbols {
|
internal class UsedClassifierSymbols {
|
||||||
private val symbols = TObjectByteHashMap<IrClassifierSymbol>()
|
private val symbols = HashMap<IrClassifierSymbol, Boolean>()
|
||||||
private val patchedSymbols = THashSet<IrClassSymbol>() // To avoid re-patching what already has been patched.
|
private val patchedSymbols = HashSet<IrClassSymbol>() // To avoid re-patching what already has been patched.
|
||||||
|
|
||||||
fun forEachClassSymbolToPatch(patchAction: (IrClassSymbol) -> Unit) {
|
fun forEachClassSymbolToPatch(patchAction: (IrClassSymbol) -> Unit) {
|
||||||
symbols.forEachEntry { symbol, code ->
|
symbols.forEach { (symbol, isUnlinked) ->
|
||||||
if (symbol.isBound && code.status == UNLINKED && symbol is IrClassSymbol && patchedSymbols.add(symbol)) {
|
if (isUnlinked && symbol.isBound && symbol is IrClassSymbol && patchedSymbols.add(symbol)) {
|
||||||
patchAction(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 {
|
fun register(symbol: IrClassifierSymbol, status: UsedClassifierSymbolStatus): Boolean {
|
||||||
symbols.put(symbol, status.code)
|
symbols[symbol] = status.isUnlinked
|
||||||
return 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()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user