diff --git a/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/symbols/Fir2IrBindableSymbol.kt b/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/symbols/Fir2IrBindableSymbol.kt index b6bbf3969ae..375fc95c964 100644 --- a/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/symbols/Fir2IrBindableSymbol.kt +++ b/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/symbols/Fir2IrBindableSymbol.kt @@ -32,8 +32,6 @@ abstract class Fir2IrBindableSymbol, B : IrSymbolOwner, override val descriptor: D get() = delegate.descriptor override val isBound: Boolean get() = delegate.isBound - override val isPublicApi: Boolean - get() = delegate.isPublicApi - override val signature: IdSignature + override val signature: IdSignature? get() = delegate.signature override fun bind(owner: B) = delegate.bind(owner) diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/symbols/IrSymbol.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/symbols/IrSymbol.kt index e8c814cec5f..ab78f3ece97 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/symbols/IrSymbol.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/symbols/IrSymbol.kt @@ -32,9 +32,10 @@ interface IrSymbol { val isBound: Boolean - val signature: IdSignature + val signature: IdSignature? val isPublicApi: Boolean + get() = signature != null } interface IrBindableSymbol : IrSymbol { diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/symbols/impl/DescriptorlessExternalPackageFragmentSymbol.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/symbols/impl/DescriptorlessExternalPackageFragmentSymbol.kt index f436a6e7202..4cdd6225e3c 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/symbols/impl/DescriptorlessExternalPackageFragmentSymbol.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/symbols/impl/DescriptorlessExternalPackageFragmentSymbol.kt @@ -22,7 +22,7 @@ class DescriptorlessExternalPackageFragmentSymbol : IrExternalPackageFragmentSym override val isPublicApi: Boolean get() = TODO("Not yet implemented") - override val signature: IdSignature + override val signature: IdSignature? get() = TODO("Not yet implemented") override val isBound get() = _owner != null diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/symbols/impl/IrPrivateSymbolBase.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/symbols/impl/IrPrivateSymbolBase.kt index 75cae5a451d..1edb264ed7e 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/symbols/impl/IrPrivateSymbolBase.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/symbols/impl/IrPrivateSymbolBase.kt @@ -69,10 +69,8 @@ abstract class IrBindableSymbolBase) - findDescriptorBySignature(symbol.signature) + findDescriptorBySignature( + symbol.signature + ?: error("Symbol is not public API. Expected signature for symbol: ${symbol.descriptor}") + ) else symbol.descriptor if (descriptor == null) return null 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 66d89e8e664..c9dd441c13e 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 @@ -216,9 +216,9 @@ class SymbolTable( } override fun set(d: D, s: S) { - if (s.isPublicApi) { - idSigToSymbol[s.signature] = s - } else { + s.signature?.let { + idSigToSymbol[it] = s + } ?: run { descriptorToSymbol[d] = s } } @@ -264,10 +264,10 @@ class SymbolTable( fun getLocal(d: D) = descriptorToSymbol[d] operator fun set(d: D, s: S) { - if (s.isPublicApi) { + s.signature?.let { require(d is TypeParameterDescriptor) - idSigToSymbol[s.signature] = s - } else { + idSigToSymbol[it] = s + } ?: run { descriptorToSymbol[d] = s } } diff --git a/compiler/ir/serialization.common/src/org/jetbrains/kotlin/backend/common/serialization/DeclarationTable.kt b/compiler/ir/serialization.common/src/org/jetbrains/kotlin/backend/common/serialization/DeclarationTable.kt index 85902a42361..0681c6f8fbf 100644 --- a/compiler/ir/serialization.common/src/org/jetbrains/kotlin/backend/common/serialization/DeclarationTable.kt +++ b/compiler/ir/serialization.common/src/org/jetbrains/kotlin/backend/common/serialization/DeclarationTable.kt @@ -36,7 +36,7 @@ abstract class GlobalDeclarationTable( protected fun loadKnownBuiltins(builtIns: IrBuiltIns) { builtIns.knownBuiltins.forEach { val symbol = (it as IrSymbolOwner).symbol - table[it] = symbol.signature.also { id -> clashTracker.commit(it, id) } + table[it] = symbol.signature!!.also { id -> clashTracker.commit(it, id) } } } diff --git a/compiler/ir/serialization.common/src/org/jetbrains/kotlin/backend/common/serialization/IncrementalCompilationSupport.kt b/compiler/ir/serialization.common/src/org/jetbrains/kotlin/backend/common/serialization/IncrementalCompilationSupport.kt index e81e0c2893e..65f286ae02a 100644 --- a/compiler/ir/serialization.common/src/org/jetbrains/kotlin/backend/common/serialization/IncrementalCompilationSupport.kt +++ b/compiler/ir/serialization.common/src/org/jetbrains/kotlin/backend/common/serialization/IncrementalCompilationSupport.kt @@ -119,7 +119,7 @@ class CurrentModuleWithICDeserializer( symbolTable.forEachPublicSymbol { if (it.descriptor.isDirtyDescriptor()) { // public && non-deserialized should be dirty symbol if (it !in knownBuiltIns) { - dirtyDeclarations[it.signature] = it + dirtyDeclarations[it.signature!!] = it } } } diff --git a/compiler/ir/serialization.common/src/org/jetbrains/kotlin/backend/common/serialization/IrModuleDeserializer.kt b/compiler/ir/serialization.common/src/org/jetbrains/kotlin/backend/common/serialization/IrModuleDeserializer.kt index d1b4b24e174..5a562f3a091 100644 --- a/compiler/ir/serialization.common/src/org/jetbrains/kotlin/backend/common/serialization/IrModuleDeserializer.kt +++ b/compiler/ir/serialization.common/src/org/jetbrains/kotlin/backend/common/serialization/IrModuleDeserializer.kt @@ -37,9 +37,10 @@ abstract class IrModuleDeserializer(val moduleDescriptor: ModuleDescriptor) { abstract fun deserializeIrSymbol(idSig: IdSignature, symbolKind: BinarySymbolData.SymbolKind): IrSymbol open fun declareIrSymbol(symbol: IrSymbol) { - assert(symbol.isPublicApi) { "Symbol is not public API: ${symbol.descriptor}" } + val signature = symbol.signature + require(signature != null) { "Symbol is not public API: ${symbol.descriptor}" } assert(symbol.descriptor !is WrappedDeclarationDescriptor<*>) - deserializeIrSymbol(symbol.signature, symbol.kind()) + deserializeIrSymbol(signature, symbol.kind()) } open val klib: IrLibrary get() = error("Unsupported operation") @@ -166,8 +167,9 @@ class IrModuleDeserializerWithBuiltIns( } override fun declareIrSymbol(symbol: IrSymbol) { - if (symbol.isPublicApi && checkIsFunctionInterface(symbol.signature)) - resolveFunctionalInterface(symbol.signature, symbol.kind()) + val signature = symbol.signature + if (signature != null && checkIsFunctionInterface(signature)) + resolveFunctionalInterface(signature, symbol.kind()) else delegate.declareIrSymbol(symbol) }