[IR] support storing signatures for non-public symbols

This commit is contained in:
Anton Bannykh
2021-11-24 23:13:54 +03:00
committed by TeamCityServer
parent d74ab1538b
commit 33cd7e982c
6 changed files with 51 additions and 40 deletions
@@ -48,6 +48,9 @@ abstract class Fir2IrBindableSymbol<out D : DeclarationDescriptor, B : IrDeclara
return "Unbound public symbol for $signature" return "Unbound public symbol for $signature"
} }
override val isPublicApi: Boolean
get() = true
companion object { companion object {
private const val GETTER_PREFIX = "<get" private const val GETTER_PREFIX = "<get"
private const val SETTER_PREFIX = "<set" private const val SETTER_PREFIX = "<set"
@@ -33,6 +33,9 @@ abstract class IrDelegatingSymbol<S : IrBindableSymbol<D, B>, B : IrSymbolOwner,
if (delegate === other) return true if (delegate === other) return true
return false return false
} }
override val isPublicApi: Boolean
get() = delegate.isPublicApi
} }
class IrDelegatingClassSymbolImpl(delegate: IrClassSymbol) : class IrDelegatingClassSymbolImpl(delegate: IrClassSymbol) :
@@ -36,10 +36,9 @@ interface IrSymbol {
val isBound: Boolean val isBound: Boolean
val signature: IdSignature? val signature: IdSignature?
}
val IrSymbol.isPublicApi: Boolean val isPublicApi: Boolean
get() = signature != null }
interface IrBindableSymbol<out D : DeclarationDescriptor, B : IrSymbolOwner> : IrSymbol { interface IrBindableSymbol<out D : DeclarationDescriptor, B : IrSymbolOwner> : IrSymbol {
override val owner: B override val owner: B
@@ -30,4 +30,7 @@ class DescriptorlessExternalPackageFragmentSymbol : IrExternalPackageFragmentSym
override fun bind(owner: IrExternalPackageFragment) { override fun bind(owner: IrExternalPackageFragment) {
_owner = owner _owner = owner
} }
override val isPublicApi: Boolean
get() = TODO("Not yet implemented")
} }
@@ -33,7 +33,7 @@ abstract class IrSymbolBase<out D : DeclarationDescriptor>(
} }
} }
abstract class IrBindableSymbolBase<out D : DeclarationDescriptor, B : IrSymbolOwner>(descriptor: D?) : abstract class IrBindableSymbolBase<out D : DeclarationDescriptor, B : IrSymbolOwner>(descriptor: D?, override val signature: IdSignature?) :
IrBindableSymbol<D, B>, IrSymbolBase<D>(descriptor) { IrBindableSymbol<D, B>, IrSymbolBase<D>(descriptor) {
init { init {
@@ -65,75 +65,75 @@ abstract class IrBindableSymbolBase<out D : DeclarationDescriptor, B : IrSymbolO
} }
} }
override val signature: IdSignature?
get() = null
override val isBound: Boolean override val isBound: Boolean
get() = _owner != null get() = _owner != null
override val isPublicApi: Boolean
get() = false
} }
class IrFileSymbolImpl(descriptor: PackageFragmentDescriptor? = null) : class IrFileSymbolImpl(descriptor: PackageFragmentDescriptor? = null, signature: IdSignature? = null) :
IrBindableSymbolBase<PackageFragmentDescriptor, IrFile>(descriptor), IrBindableSymbolBase<PackageFragmentDescriptor, IrFile>(descriptor, signature),
IrFileSymbol IrFileSymbol
class IrExternalPackageFragmentSymbolImpl(descriptor: PackageFragmentDescriptor? = null) : class IrExternalPackageFragmentSymbolImpl(descriptor: PackageFragmentDescriptor? = null, signature: IdSignature? = null) :
IrBindableSymbolBase<PackageFragmentDescriptor, IrExternalPackageFragment>(descriptor), IrBindableSymbolBase<PackageFragmentDescriptor, IrExternalPackageFragment>(descriptor, signature),
IrExternalPackageFragmentSymbol IrExternalPackageFragmentSymbol
@OptIn(ObsoleteDescriptorBasedAPI::class) @OptIn(ObsoleteDescriptorBasedAPI::class)
class IrAnonymousInitializerSymbolImpl(descriptor: ClassDescriptor? = null) : class IrAnonymousInitializerSymbolImpl(descriptor: ClassDescriptor? = null, signature: IdSignature? = null) :
IrBindableSymbolBase<ClassDescriptor, IrAnonymousInitializer>(descriptor), IrBindableSymbolBase<ClassDescriptor, IrAnonymousInitializer>(descriptor, signature),
IrAnonymousInitializerSymbol { IrAnonymousInitializerSymbol {
constructor(irClassSymbol: IrClassSymbol) : this(irClassSymbol.descriptor) constructor(irClassSymbol: IrClassSymbol, signature: IdSignature? = null) : this(irClassSymbol.descriptor, signature)
} }
class IrClassSymbolImpl(descriptor: ClassDescriptor? = null) : class IrClassSymbolImpl(descriptor: ClassDescriptor? = null, signature: IdSignature? = null) :
IrBindableSymbolBase<ClassDescriptor, IrClass>(descriptor), IrBindableSymbolBase<ClassDescriptor, IrClass>(descriptor, signature),
IrClassSymbol IrClassSymbol
class IrEnumEntrySymbolImpl(descriptor: ClassDescriptor? = null) : class IrEnumEntrySymbolImpl(descriptor: ClassDescriptor? = null, signature: IdSignature? = null) :
IrBindableSymbolBase<ClassDescriptor, IrEnumEntry>(descriptor), IrBindableSymbolBase<ClassDescriptor, IrEnumEntry>(descriptor, signature),
IrEnumEntrySymbol IrEnumEntrySymbol
class IrFieldSymbolImpl(descriptor: PropertyDescriptor? = null) : class IrFieldSymbolImpl(descriptor: PropertyDescriptor? = null, signature: IdSignature? = null) :
IrBindableSymbolBase<PropertyDescriptor, IrField>(descriptor), IrBindableSymbolBase<PropertyDescriptor, IrField>(descriptor, signature),
IrFieldSymbol IrFieldSymbol
class IrTypeParameterSymbolImpl(descriptor: TypeParameterDescriptor? = null) : class IrTypeParameterSymbolImpl(descriptor: TypeParameterDescriptor? = null, signature: IdSignature? = null) :
IrBindableSymbolBase<TypeParameterDescriptor, IrTypeParameter>(descriptor), IrBindableSymbolBase<TypeParameterDescriptor, IrTypeParameter>(descriptor, signature),
IrTypeParameterSymbol IrTypeParameterSymbol
class IrValueParameterSymbolImpl(descriptor: ParameterDescriptor? = null) : class IrValueParameterSymbolImpl(descriptor: ParameterDescriptor? = null, signature: IdSignature? = null) :
IrBindableSymbolBase<ParameterDescriptor, IrValueParameter>(descriptor), IrBindableSymbolBase<ParameterDescriptor, IrValueParameter>(descriptor, signature),
IrValueParameterSymbol IrValueParameterSymbol
class IrVariableSymbolImpl(descriptor: VariableDescriptor? = null) : class IrVariableSymbolImpl(descriptor: VariableDescriptor? = null, signature: IdSignature? = null) :
IrBindableSymbolBase<VariableDescriptor, IrVariable>(descriptor), IrBindableSymbolBase<VariableDescriptor, IrVariable>(descriptor, signature),
IrVariableSymbol IrVariableSymbol
class IrSimpleFunctionSymbolImpl(descriptor: FunctionDescriptor? = null) : class IrSimpleFunctionSymbolImpl(descriptor: FunctionDescriptor? = null, signature: IdSignature? = null) :
IrBindableSymbolBase<FunctionDescriptor, IrSimpleFunction>(descriptor), IrBindableSymbolBase<FunctionDescriptor, IrSimpleFunction>(descriptor, signature),
IrSimpleFunctionSymbol IrSimpleFunctionSymbol
class IrConstructorSymbolImpl(descriptor: ClassConstructorDescriptor? = null) : class IrConstructorSymbolImpl(descriptor: ClassConstructorDescriptor? = null, signature: IdSignature? = null) :
IrBindableSymbolBase<ClassConstructorDescriptor, IrConstructor>(descriptor), IrBindableSymbolBase<ClassConstructorDescriptor, IrConstructor>(descriptor, signature),
IrConstructorSymbol IrConstructorSymbol
class IrReturnableBlockSymbolImpl(descriptor: FunctionDescriptor? = null) : class IrReturnableBlockSymbolImpl(descriptor: FunctionDescriptor? = null, signature: IdSignature? = null) :
IrBindableSymbolBase<FunctionDescriptor, IrReturnableBlock>(descriptor), IrBindableSymbolBase<FunctionDescriptor, IrReturnableBlock>(descriptor, signature),
IrReturnableBlockSymbol IrReturnableBlockSymbol
class IrPropertySymbolImpl(descriptor: PropertyDescriptor? = null) : class IrPropertySymbolImpl(descriptor: PropertyDescriptor? = null, signature: IdSignature? = null) :
IrBindableSymbolBase<PropertyDescriptor, IrProperty>(descriptor), IrBindableSymbolBase<PropertyDescriptor, IrProperty>(descriptor, signature),
IrPropertySymbol IrPropertySymbol
class IrLocalDelegatedPropertySymbolImpl(descriptor: VariableDescriptorWithAccessors? = null) : class IrLocalDelegatedPropertySymbolImpl(descriptor: VariableDescriptorWithAccessors? = null, signature: IdSignature? = null) :
IrBindableSymbolBase<VariableDescriptorWithAccessors, IrLocalDelegatedProperty>(descriptor), IrBindableSymbolBase<VariableDescriptorWithAccessors, IrLocalDelegatedProperty>(descriptor, signature),
IrLocalDelegatedPropertySymbol IrLocalDelegatedPropertySymbol
class IrTypeAliasSymbolImpl(descriptor: TypeAliasDescriptor? = null) : class IrTypeAliasSymbolImpl(descriptor: TypeAliasDescriptor? = null, signature: IdSignature? = null) :
IrBindableSymbolBase<TypeAliasDescriptor, IrTypeAlias>(descriptor), IrBindableSymbolBase<TypeAliasDescriptor, IrTypeAlias>(descriptor, signature),
IrTypeAliasSymbol IrTypeAliasSymbol
class IrScriptSymbolImpl(descriptor: ScriptDescriptor? = null) : class IrScriptSymbolImpl(descriptor: ScriptDescriptor? = null, signature: IdSignature? = null) :
IrScriptSymbol, IrBindableSymbolBase<ScriptDescriptor, IrScript>(descriptor) IrScriptSymbol, IrBindableSymbolBase<ScriptDescriptor, IrScript>(descriptor, signature)
@@ -61,6 +61,9 @@ abstract class IrBindablePublicSymbolBase<out D : DeclarationDescriptor, B : IrS
override val isBound: Boolean override val isBound: Boolean
get() = _owner != null get() = _owner != null
override val isPublicApi: Boolean
get() = true
} }
class IrClassPublicSymbolImpl(sig: IdSignature, descriptor: ClassDescriptor? = null) : class IrClassPublicSymbolImpl(sig: IdSignature, descriptor: ClassDescriptor? = null) :