[FIR2IR] Temporary fix of createIrEnumEntry

Check if a bound entry with the same signature is already exist
This commit is contained in:
Ivan Kochurkin
2023-01-12 16:48:05 +01:00
committed by Space Team
parent ecc81098a6
commit c9a8f433fb
2 changed files with 9 additions and 0 deletions
@@ -535,6 +535,11 @@ class Fir2IrClassifierStorage(
): IrEnumEntry {
return enumEntry.convertWithOffsets { startOffset, endOffset ->
val signature = signatureComposer.composeSignature(enumEntry, forceTopLevelPrivate = forceTopLevelPrivate)
if (signature != null) {
// Compilation of kotlinx-serialization-protobuf fails with "already bound" exception if this check is removed
// TODO: get rid of this check
symbolTable.referenceEnumEntryIfAny(signature)?.let { if (it.isBound) return@convertWithOffsets it.owner }
}
val result = declareIrEnumEntry(signature) { symbol ->
val origin = enumEntry.computeIrOrigin(predefinedOrigin)
irFactory.createEnumEntry(
@@ -664,6 +664,10 @@ open class SymbolTable(
else IrEnumEntrySymbolImpl()
}
fun referenceEnumEntryIfAny(sig: IdSignature): IrEnumEntrySymbol? {
return enumEntrySymbolTable.get(sig)
}
val unboundEnumEntries: Set<IrEnumEntrySymbol> get() = enumEntrySymbolTable.unboundSymbols
private fun createFieldSymbol(descriptor: PropertyDescriptor, signature: IdSignature?): IrFieldSymbol =