From 33cd7e982c62765546a3e308d00517653088d293 Mon Sep 17 00:00:00 2001 From: Anton Bannykh Date: Wed, 24 Nov 2021 23:13:54 +0300 Subject: [PATCH] [IR] support storing signatures for non-public symbols --- .../fir/symbols/Fir2IrBindableSymbol.kt | 3 + .../kotlin/ir/symbols/IrDelegatingSymbol.kt | 3 + .../jetbrains/kotlin/ir/symbols/IrSymbol.kt | 5 +- ...riptorlessExternalPackageFragmentSymbol.kt | 3 + .../ir/symbols/impl/IrPrivateSymbolBase.kt | 74 +++++++++---------- .../ir/symbols/impl/IrPublicSymbolBase.kt | 3 + 6 files changed, 51 insertions(+), 40 deletions(-) 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 23fcb956733..c5bf20854ec 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 @@ -48,6 +48,9 @@ abstract class Fir2IrBindableSymbol, B : IrSymbolOwner, if (delegate === other) return true return false } + + override val isPublicApi: Boolean + get() = delegate.isPublicApi } class IrDelegatingClassSymbolImpl(delegate: IrClassSymbol) : 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 39e1f5de9b1..f809f4d3b6f 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 @@ -36,10 +36,9 @@ interface IrSymbol { val isBound: Boolean val signature: IdSignature? -} -val IrSymbol.isPublicApi: Boolean - get() = signature != null + val isPublicApi: Boolean +} interface IrBindableSymbol : IrSymbol { override val owner: B 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 1467239cce1..6fb7ae52609 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 @@ -30,4 +30,7 @@ class DescriptorlessExternalPackageFragmentSymbol : IrExternalPackageFragmentSym override fun bind(owner: IrExternalPackageFragment) { _owner = owner } + + override val isPublicApi: Boolean + get() = TODO("Not yet implemented") } 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 46c47a11e84..70d3b5c22cc 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 @@ -33,7 +33,7 @@ abstract class IrSymbolBase( } } -abstract class IrBindableSymbolBase(descriptor: D?) : +abstract class IrBindableSymbolBase(descriptor: D?, override val signature: IdSignature?) : IrBindableSymbol, IrSymbolBase(descriptor) { init { @@ -65,75 +65,75 @@ abstract class IrBindableSymbolBase(descriptor), +class IrFileSymbolImpl(descriptor: PackageFragmentDescriptor? = null, signature: IdSignature? = null) : + IrBindableSymbolBase(descriptor, signature), IrFileSymbol -class IrExternalPackageFragmentSymbolImpl(descriptor: PackageFragmentDescriptor? = null) : - IrBindableSymbolBase(descriptor), +class IrExternalPackageFragmentSymbolImpl(descriptor: PackageFragmentDescriptor? = null, signature: IdSignature? = null) : + IrBindableSymbolBase(descriptor, signature), IrExternalPackageFragmentSymbol @OptIn(ObsoleteDescriptorBasedAPI::class) -class IrAnonymousInitializerSymbolImpl(descriptor: ClassDescriptor? = null) : - IrBindableSymbolBase(descriptor), +class IrAnonymousInitializerSymbolImpl(descriptor: ClassDescriptor? = null, signature: IdSignature? = null) : + IrBindableSymbolBase(descriptor, signature), IrAnonymousInitializerSymbol { - constructor(irClassSymbol: IrClassSymbol) : this(irClassSymbol.descriptor) + constructor(irClassSymbol: IrClassSymbol, signature: IdSignature? = null) : this(irClassSymbol.descriptor, signature) } -class IrClassSymbolImpl(descriptor: ClassDescriptor? = null) : - IrBindableSymbolBase(descriptor), +class IrClassSymbolImpl(descriptor: ClassDescriptor? = null, signature: IdSignature? = null) : + IrBindableSymbolBase(descriptor, signature), IrClassSymbol -class IrEnumEntrySymbolImpl(descriptor: ClassDescriptor? = null) : - IrBindableSymbolBase(descriptor), +class IrEnumEntrySymbolImpl(descriptor: ClassDescriptor? = null, signature: IdSignature? = null) : + IrBindableSymbolBase(descriptor, signature), IrEnumEntrySymbol -class IrFieldSymbolImpl(descriptor: PropertyDescriptor? = null) : - IrBindableSymbolBase(descriptor), +class IrFieldSymbolImpl(descriptor: PropertyDescriptor? = null, signature: IdSignature? = null) : + IrBindableSymbolBase(descriptor, signature), IrFieldSymbol -class IrTypeParameterSymbolImpl(descriptor: TypeParameterDescriptor? = null) : - IrBindableSymbolBase(descriptor), +class IrTypeParameterSymbolImpl(descriptor: TypeParameterDescriptor? = null, signature: IdSignature? = null) : + IrBindableSymbolBase(descriptor, signature), IrTypeParameterSymbol -class IrValueParameterSymbolImpl(descriptor: ParameterDescriptor? = null) : - IrBindableSymbolBase(descriptor), +class IrValueParameterSymbolImpl(descriptor: ParameterDescriptor? = null, signature: IdSignature? = null) : + IrBindableSymbolBase(descriptor, signature), IrValueParameterSymbol -class IrVariableSymbolImpl(descriptor: VariableDescriptor? = null) : - IrBindableSymbolBase(descriptor), +class IrVariableSymbolImpl(descriptor: VariableDescriptor? = null, signature: IdSignature? = null) : + IrBindableSymbolBase(descriptor, signature), IrVariableSymbol -class IrSimpleFunctionSymbolImpl(descriptor: FunctionDescriptor? = null) : - IrBindableSymbolBase(descriptor), +class IrSimpleFunctionSymbolImpl(descriptor: FunctionDescriptor? = null, signature: IdSignature? = null) : + IrBindableSymbolBase(descriptor, signature), IrSimpleFunctionSymbol -class IrConstructorSymbolImpl(descriptor: ClassConstructorDescriptor? = null) : - IrBindableSymbolBase(descriptor), +class IrConstructorSymbolImpl(descriptor: ClassConstructorDescriptor? = null, signature: IdSignature? = null) : + IrBindableSymbolBase(descriptor, signature), IrConstructorSymbol -class IrReturnableBlockSymbolImpl(descriptor: FunctionDescriptor? = null) : - IrBindableSymbolBase(descriptor), +class IrReturnableBlockSymbolImpl(descriptor: FunctionDescriptor? = null, signature: IdSignature? = null) : + IrBindableSymbolBase(descriptor, signature), IrReturnableBlockSymbol -class IrPropertySymbolImpl(descriptor: PropertyDescriptor? = null) : - IrBindableSymbolBase(descriptor), +class IrPropertySymbolImpl(descriptor: PropertyDescriptor? = null, signature: IdSignature? = null) : + IrBindableSymbolBase(descriptor, signature), IrPropertySymbol -class IrLocalDelegatedPropertySymbolImpl(descriptor: VariableDescriptorWithAccessors? = null) : - IrBindableSymbolBase(descriptor), +class IrLocalDelegatedPropertySymbolImpl(descriptor: VariableDescriptorWithAccessors? = null, signature: IdSignature? = null) : + IrBindableSymbolBase(descriptor, signature), IrLocalDelegatedPropertySymbol -class IrTypeAliasSymbolImpl(descriptor: TypeAliasDescriptor? = null) : - IrBindableSymbolBase(descriptor), +class IrTypeAliasSymbolImpl(descriptor: TypeAliasDescriptor? = null, signature: IdSignature? = null) : + IrBindableSymbolBase(descriptor, signature), IrTypeAliasSymbol -class IrScriptSymbolImpl(descriptor: ScriptDescriptor? = null) : - IrScriptSymbol, IrBindableSymbolBase(descriptor) +class IrScriptSymbolImpl(descriptor: ScriptDescriptor? = null, signature: IdSignature? = null) : + IrScriptSymbol, IrBindableSymbolBase(descriptor, signature) diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/symbols/impl/IrPublicSymbolBase.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/symbols/impl/IrPublicSymbolBase.kt index 7aaac24dd44..3270e2cdfd3 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/symbols/impl/IrPublicSymbolBase.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/symbols/impl/IrPublicSymbolBase.kt @@ -61,6 +61,9 @@ abstract class IrBindablePublicSymbolBase