[IR] Remove descriptor-related methods from ReferenceSymbolTable

Replace them with calls to ReferenceSymbolTableExtension
This commit is contained in:
Dmitriy Novozhilov
2023-07-11 11:54:08 +03:00
committed by Space Team
parent 4986cb14aa
commit b886b7488d
11 changed files with 48 additions and 81 deletions
@@ -111,7 +111,7 @@ open class IrPluginContextImpl constructor(
return resolveSymbol(fqName.parent()) { scope ->
val classDescriptor = scope.getContributedClassifier(fqName.shortName(), NoLookupLocation.FROM_BACKEND) as? ClassDescriptor?
classDescriptor?.let {
st.referenceClass(it)
st.descriptorExtension.referenceClass(it)
}
}
}
@@ -122,7 +122,7 @@ open class IrPluginContextImpl constructor(
return resolveSymbol(fqName.parent()) { scope ->
val aliasDescriptor = scope.getContributedClassifier(fqName.shortName(), NoLookupLocation.FROM_BACKEND) as? TypeAliasDescriptor?
aliasDescriptor?.let {
st.referenceTypeAlias(it)
st.descriptorExtension.referenceTypeAlias(it)
}
}
}
@@ -138,7 +138,7 @@ open class IrPluginContextImpl constructor(
assert(!fqName.isRoot)
return resolveSymbolCollection(fqName.parent()) { scope ->
val descriptors = scope.getContributedFunctions(fqName.shortName(), NoLookupLocation.FROM_BACKEND)
descriptors.map { st.referenceSimpleFunction(it) }
descriptors.map { st.descriptorExtension.referenceSimpleFunction(it) }
}
}
@@ -147,7 +147,7 @@ open class IrPluginContextImpl constructor(
assert(!fqName.isRoot)
return resolveSymbolCollection(fqName.parent()) { scope ->
val descriptors = scope.getContributedVariables(fqName.shortName(), NoLookupLocation.FROM_BACKEND)
descriptors.map { st.referenceProperty(it) }
descriptors.map { st.descriptorExtension.referenceProperty(it) }
}
}
@@ -64,28 +64,28 @@ open class ExpectDeclarationRemover(val symbolTable: ReferenceSymbolTable, priva
}
override fun getActualClass(descriptor: ClassDescriptor): IrClassSymbol? {
return symbolTable.referenceClass(
return symbolTable.descriptorExtension.referenceClass(
descriptor.findActualForExpect() as? ClassDescriptor ?: return null
)
}
override fun getActualProperty(descriptor: PropertyDescriptor): ActualPropertyResult? {
val newSymbol = symbolTable.referenceProperty(
val newSymbol = symbolTable.descriptorExtension.referenceProperty(
descriptor.findActualForExpect() as? PropertyDescriptor ?: return null
)
val newGetter = newSymbol.descriptor.getter?.let { symbolTable.referenceSimpleFunction(it) }
val newSetter = newSymbol.descriptor.setter?.let { symbolTable.referenceSimpleFunction(it) }
val newGetter = newSymbol.descriptor.getter?.let { symbolTable.descriptorExtension.referenceSimpleFunction(it) }
val newSetter = newSymbol.descriptor.setter?.let { symbolTable.descriptorExtension.referenceSimpleFunction(it) }
return ActualPropertyResult(newSymbol, newGetter, newSetter)
}
override fun getActualConstructor(descriptor: ClassConstructorDescriptor): IrConstructorSymbol? {
return symbolTable.referenceConstructor(
return symbolTable.descriptorExtension.referenceConstructor(
descriptor.findActualForExpect() as? ClassConstructorDescriptor ?: return null
)
}
override fun getActualFunction(descriptor: FunctionDescriptor): IrSimpleFunctionSymbol? {
return symbolTable.referenceSimpleFunction(
return symbolTable.descriptorExtension.referenceSimpleFunction(
descriptor.findActualForExpect() as? FunctionDescriptor ?: return null
)
}
@@ -173,7 +173,7 @@ open class ExpectDeclarationRemover(val symbolTable: ReferenceSymbolTable, priva
override fun visitGetValue(expression: IrGetValue): IrExpression {
expression.transformChildrenVoid()
return expression.actualize(
classActualizer = { symbolTable.referenceClass(it.descriptor.findActualForExpect() as ClassDescriptor).owner },
classActualizer = { symbolTable.descriptorExtension.referenceClass(it.descriptor.findActualForExpect() as ClassDescriptor).owner },
functionActualizer = { symbolTable.referenceFunction(it.descriptor.findActualForExpect() as FunctionDescriptor).owner }
)
}
@@ -139,7 +139,7 @@ internal class DataClassMembersGenerator(
var substituted: CallableDescriptor? = null
val symbol = getHashCodeFunction(type.toKotlinType()) { hashCodeDescriptor ->
substituted = hashCodeDescriptor
symbolTable.referenceSimpleFunction(hashCodeDescriptor.original)
symbolTable.descriptorExtension.referenceSimpleFunction(hashCodeDescriptor.original)
}
return Psi2IrHashCodeFunctionInfo(symbol, substituted ?: symbol.descriptor)
}
@@ -21,7 +21,7 @@ class IrLazySymbolTable(private val originalTable: SymbolTable) : ReferenceSymbo
/*Don't force builtins class linking before unbound symbols linking: otherwise stdlib compilation will failed*/
var stubGenerator: DeclarationStubGenerator? = null
override fun referenceClass(descriptor: ClassDescriptor): IrClassSymbol {
fun referenceClass(descriptor: ClassDescriptor): IrClassSymbol {
synchronized(lock) {
return originalTable.referenceClass(descriptor).also {
if (!it.isBound) {
@@ -31,7 +31,7 @@ class IrLazySymbolTable(private val originalTable: SymbolTable) : ReferenceSymbo
}
}
override fun referenceTypeAlias(descriptor: TypeAliasDescriptor): IrTypeAliasSymbol {
fun referenceTypeAlias(descriptor: TypeAliasDescriptor): IrTypeAliasSymbol {
synchronized(lock) {
return originalTable.referenceTypeAlias(descriptor).also {
if (!it.isBound) {
@@ -41,7 +41,7 @@ class IrLazySymbolTable(private val originalTable: SymbolTable) : ReferenceSymbo
}
}
override fun referenceConstructor(descriptor: ClassConstructorDescriptor): IrConstructorSymbol {
fun referenceConstructor(descriptor: ClassConstructorDescriptor): IrConstructorSymbol {
synchronized(lock) {
return originalTable.referenceConstructor(descriptor).also {
if (!it.isBound) {
@@ -51,7 +51,7 @@ class IrLazySymbolTable(private val originalTable: SymbolTable) : ReferenceSymbo
}
}
override fun referenceEnumEntry(descriptor: ClassDescriptor): IrEnumEntrySymbol {
fun referenceEnumEntry(descriptor: ClassDescriptor): IrEnumEntrySymbol {
synchronized(lock) {
return originalTable.referenceEnumEntry(descriptor).also {
if (!it.isBound) {
@@ -61,7 +61,7 @@ class IrLazySymbolTable(private val originalTable: SymbolTable) : ReferenceSymbo
}
}
override fun referenceSimpleFunction(descriptor: FunctionDescriptor): IrSimpleFunctionSymbol {
fun referenceSimpleFunction(descriptor: FunctionDescriptor): IrSimpleFunctionSymbol {
synchronized(lock) {
return originalTable.referenceSimpleFunction(descriptor).also {
if (!it.isBound) {
@@ -71,7 +71,7 @@ class IrLazySymbolTable(private val originalTable: SymbolTable) : ReferenceSymbo
}
}
override fun referenceProperty(descriptor: PropertyDescriptor): IrPropertySymbol {
fun referenceProperty(descriptor: PropertyDescriptor): IrPropertySymbol {
synchronized(lock) {
return originalTable.referenceProperty(descriptor).also {
if (!it.isBound) {
@@ -81,7 +81,7 @@ class IrLazySymbolTable(private val originalTable: SymbolTable) : ReferenceSymbo
}
}
override fun referenceTypeParameter(classifier: TypeParameterDescriptor): IrTypeParameterSymbol {
fun referenceTypeParameter(classifier: TypeParameterDescriptor): IrTypeParameterSymbol {
synchronized(lock) {
return originalTable.referenceTypeParameter(classifier).also {
if (!it.isBound) {
@@ -133,7 +133,7 @@ abstract class ConstantValueGenerator(
else -> IrGetEnumValueImpl(
startOffset, endOffset,
constantType,
symbolTable.referenceEnumEntry(enumEntryDescriptor)
symbolTable.descriptorExtension.referenceEnumEntry(enumEntryDescriptor)
)
}
}
@@ -178,7 +178,7 @@ abstract class ConstantValueGenerator(
val primaryConstructorDescriptor = annotationClassDescriptor.unsubstitutedPrimaryConstructor
?: annotationClassDescriptor.constructors.singleOrNull()
?: throw AssertionError("No constructor for annotation class $annotationClassDescriptor")
val primaryConstructorSymbol = symbolTable.referenceConstructor(primaryConstructorDescriptor)
val primaryConstructorSymbol = symbolTable.descriptorExtension.referenceConstructor(primaryConstructorDescriptor)
val (startOffset, endOffset) = extractAnnotationOffsets(annotationDescriptor)
@@ -23,7 +23,7 @@ import org.jetbrains.kotlin.utils.threadLocal
@ObsoleteDescriptorBasedAPI
typealias DescriptorBasedReferenceSymbolTableExtension = ReferenceSymbolTableExtension<
ClassDescriptor, TypeAliasDescriptor, ScriptDescriptor, FunctionDescriptor, ClassConstructorDescriptor,
PropertyDescriptor, ValueParameterDescriptor, TypeParameterDescriptor
PropertyDescriptor, ParameterDescriptor, TypeParameterDescriptor
>
@ObsoleteDescriptorBasedAPI
@@ -390,11 +390,11 @@ fun IrValueParameter.hasDefaultValue(): Boolean = DFS.ifAny(
fun ReferenceSymbolTable.referenceClassifier(classifier: ClassifierDescriptor): IrClassifierSymbol =
when (classifier) {
is TypeParameterDescriptor ->
referenceTypeParameter(classifier)
descriptorExtension.referenceTypeParameter(classifier)
is ScriptDescriptor ->
referenceScript(classifier)
descriptorExtension.referenceScript(classifier)
is ClassDescriptor ->
referenceClass(classifier)
descriptorExtension.referenceClass(classifier)
else ->
throw IllegalArgumentException("Unexpected classifier descriptor: $classifier")
}
@@ -403,9 +403,9 @@ fun ReferenceSymbolTable.referenceClassifier(classifier: ClassifierDescriptor):
fun ReferenceSymbolTable.referenceFunction(callable: CallableDescriptor): IrFunctionSymbol =
when (callable) {
is ClassConstructorDescriptor ->
referenceConstructor(callable)
descriptorExtension.referenceConstructor(callable)
is FunctionDescriptor ->
referenceSimpleFunction(callable)
descriptorExtension.referenceSimpleFunction(callable)
else ->
throw IllegalArgumentException("Unexpected callable descriptor: $callable")
}
@@ -1435,4 +1435,4 @@ fun IrAttributeContainer.extractRelatedDeclaration(): IrDeclaration? {
inline fun <reified Symbol : IrSymbol> IrSymbol.unexpectedSymbolKind(): Nothing {
throw IllegalArgumentException("Unexpected kind of ${Symbol::class.java.typeName}: $this")
}
}
@@ -5,54 +5,21 @@
package org.jetbrains.kotlin.ir.util
import org.jetbrains.kotlin.descriptors.*
import org.jetbrains.kotlin.ir.ObsoleteDescriptorBasedAPI
import org.jetbrains.kotlin.ir.declarations.IrDeclaration
import org.jetbrains.kotlin.ir.symbols.*
interface ReferenceSymbolTable {
@ObsoleteDescriptorBasedAPI
fun referenceClass(descriptor: ClassDescriptor): IrClassSymbol
val descriptorExtension: DescriptorBasedReferenceSymbolTableExtension
fun referenceClass(signature: IdSignature): IrClassSymbol
@ObsoleteDescriptorBasedAPI
fun referenceScript(descriptor: ScriptDescriptor): IrScriptSymbol
@ObsoleteDescriptorBasedAPI
fun referenceConstructor(descriptor: ClassConstructorDescriptor): IrConstructorSymbol
fun referenceConstructor(signature: IdSignature): IrConstructorSymbol
@ObsoleteDescriptorBasedAPI
fun referenceEnumEntry(descriptor: ClassDescriptor): IrEnumEntrySymbol
fun referenceEnumEntry(signature: IdSignature): IrEnumEntrySymbol
@ObsoleteDescriptorBasedAPI
fun referenceField(descriptor: PropertyDescriptor): IrFieldSymbol
fun referenceField(signature: IdSignature): IrFieldSymbol
@ObsoleteDescriptorBasedAPI
fun referenceProperty(descriptor: PropertyDescriptor): IrPropertySymbol
fun referenceProperty(signature: IdSignature): IrPropertySymbol
@ObsoleteDescriptorBasedAPI
fun referenceSimpleFunction(descriptor: FunctionDescriptor): IrSimpleFunctionSymbol
fun referenceSimpleFunction(signature: IdSignature): IrSimpleFunctionSymbol
@ObsoleteDescriptorBasedAPI
fun referenceDeclaredFunction(descriptor: FunctionDescriptor): IrSimpleFunctionSymbol
@ObsoleteDescriptorBasedAPI
fun referenceValueParameter(descriptor: ParameterDescriptor): IrValueParameterSymbol
@ObsoleteDescriptorBasedAPI
fun referenceTypeParameter(classifier: TypeParameterDescriptor): IrTypeParameterSymbol
fun referenceTypeParameter(signature: IdSignature): IrTypeParameterSymbol
@ObsoleteDescriptorBasedAPI
fun referenceScopedTypeParameter(classifier: TypeParameterDescriptor): IrTypeParameterSymbol
@ObsoleteDescriptorBasedAPI
fun referenceTypeAlias(descriptor: TypeAliasDescriptor): IrTypeAliasSymbol
fun referenceTypeAlias(signature: IdSignature): IrTypeAliasSymbol
fun enterScope(symbol: IrSymbol)
@@ -39,7 +39,7 @@ open class SymbolTable(
@Suppress("LeakingThis")
@OptIn(ObsoleteDescriptorBasedAPI::class)
val descriptorExtension: DescriptorSymbolTableExtension = DescriptorSymbolTableExtension(this)
override val descriptorExtension: DescriptorSymbolTableExtension = DescriptorSymbolTableExtension(this)
// ------------------------------------ script ------------------------------------
@@ -489,7 +489,7 @@ open class SymbolTable(
// ------------------------------------ descriptors ------------------------------------
@ObsoleteDescriptorBasedAPI
override fun referenceScript(descriptor: ScriptDescriptor): IrScriptSymbol {
fun referenceScript(descriptor: ScriptDescriptor): IrScriptSymbol {
return descriptorExtension.referenceScript(descriptor)
}
@@ -546,7 +546,7 @@ open class SymbolTable(
}
@ObsoleteDescriptorBasedAPI
override fun referenceClass(descriptor: ClassDescriptor): IrClassSymbol {
fun referenceClass(descriptor: ClassDescriptor): IrClassSymbol {
return descriptorExtension.referenceClass(descriptor)
}
@@ -567,7 +567,7 @@ open class SymbolTable(
}
@ObsoleteDescriptorBasedAPI
override fun referenceConstructor(descriptor: ClassConstructorDescriptor): IrConstructorSymbol {
fun referenceConstructor(descriptor: ClassConstructorDescriptor): IrConstructorSymbol {
return descriptorExtension.referenceConstructor(descriptor)
}
@@ -610,7 +610,7 @@ open class SymbolTable(
}
@ObsoleteDescriptorBasedAPI
override fun referenceEnumEntry(descriptor: ClassDescriptor): IrEnumEntrySymbol {
fun referenceEnumEntry(descriptor: ClassDescriptor): IrEnumEntrySymbol {
return descriptorExtension.referenceEnumEntry(descriptor)
}
@@ -640,7 +640,7 @@ open class SymbolTable(
}
@ObsoleteDescriptorBasedAPI
override fun referenceField(descriptor: PropertyDescriptor): IrFieldSymbol {
fun referenceField(descriptor: PropertyDescriptor): IrFieldSymbol {
return descriptorExtension.referenceField(descriptor)
}
@@ -678,12 +678,12 @@ open class SymbolTable(
}
@ObsoleteDescriptorBasedAPI
override fun referenceProperty(descriptor: PropertyDescriptor): IrPropertySymbol {
fun referenceProperty(descriptor: PropertyDescriptor): IrPropertySymbol {
return descriptorExtension.referenceProperty(descriptor)
}
@ObsoleteDescriptorBasedAPI
override fun referenceTypeAlias(descriptor: TypeAliasDescriptor): IrTypeAliasSymbol {
fun referenceTypeAlias(descriptor: TypeAliasDescriptor): IrTypeAliasSymbol {
return descriptorExtension.referenceTypeAlias(descriptor)
}
@@ -723,12 +723,12 @@ open class SymbolTable(
}
@ObsoleteDescriptorBasedAPI
override fun referenceSimpleFunction(descriptor: FunctionDescriptor): IrSimpleFunctionSymbol {
fun referenceSimpleFunction(descriptor: FunctionDescriptor): IrSimpleFunctionSymbol {
return descriptorExtension.referenceSimpleFunction(descriptor)
}
@ObsoleteDescriptorBasedAPI
override fun referenceDeclaredFunction(descriptor: FunctionDescriptor): IrSimpleFunctionSymbol {
fun referenceDeclaredFunction(descriptor: FunctionDescriptor): IrSimpleFunctionSymbol {
return descriptorExtension.referenceDeclaredFunction(descriptor)
}
@@ -791,17 +791,17 @@ open class SymbolTable(
}
@ObsoleteDescriptorBasedAPI
override fun referenceValueParameter(descriptor: ParameterDescriptor): IrValueParameterSymbol {
fun referenceValueParameter(descriptor: ParameterDescriptor): IrValueParameterSymbol {
return descriptorExtension.referenceValueParameter(descriptor)
}
@ObsoleteDescriptorBasedAPI
override fun referenceTypeParameter(classifier: TypeParameterDescriptor): IrTypeParameterSymbol {
fun referenceTypeParameter(classifier: TypeParameterDescriptor): IrTypeParameterSymbol {
return descriptorExtension.referenceTypeParameter(classifier)
}
@ObsoleteDescriptorBasedAPI
override fun referenceScopedTypeParameter(classifier: TypeParameterDescriptor): IrTypeParameterSymbol {
fun referenceScopedTypeParameter(classifier: TypeParameterDescriptor): IrTypeParameterSymbol {
return descriptorExtension.referenceScopedTypeParameter(classifier)
}
@@ -84,7 +84,7 @@ abstract class TypeTranslator(
}
val originalTypeParameter = typeParameterDescriptor.originalTypeParameter
return typeParametersResolver.resolveScopedTypeParameter(originalTypeParameter)
?: symbolTable.referenceTypeParameter(originalTypeParameter)
?: symbolTable.descriptorExtension.referenceTypeParameter(originalTypeParameter)
}
fun translateType(kotlinType: KotlinType): IrType {
@@ -136,7 +136,7 @@ abstract class TypeTranslator(
}
is ScriptDescriptor -> {
classifier = symbolTable.referenceScript(upperTypeDescriptor)
classifier = symbolTable.descriptorExtension.referenceScript(upperTypeDescriptor)
}
is ClassDescriptor -> {
// Types such as 'java.util.Collection<? extends CharSequence>' are treated as
@@ -154,7 +154,7 @@ abstract class TypeTranslator(
lowerType.constructor.declarationDescriptor as? ClassDescriptor
?: throw AssertionError("No class descriptor for lower type $lowerType of $approximatedType")
annotations = translateTypeAnnotations(upperType, approximatedType)
classifier = symbolTable.referenceClass(lowerTypeDescriptor)
classifier = symbolTable.descriptorExtension.referenceClass(lowerTypeDescriptor)
arguments = when {
approximatedType is RawType ->
translateTypeArguments(approximatedType.arguments)
@@ -186,7 +186,7 @@ abstract class TypeTranslator(
if (!isTypeAliasAccessibleHere(typeAliasDescriptor)) return null
return IrTypeAbbreviationImpl(
symbolTable.referenceTypeAlias(typeAliasDescriptor),
symbolTable.descriptorExtension.referenceTypeAlias(typeAliasDescriptor),
isMarkedNullable,
translateTypeArguments(this.arguments),
translateTypeAnnotations(this)
@@ -55,6 +55,6 @@ fun generateOverriddenFunctionSymbols(
symbolTable: ReferenceSymbolTable
) {
declaration.overriddenSymbols = declaration.descriptor.overriddenDescriptors.memoryOptimizedMap {
symbolTable.referenceSimpleFunction(it.original)
symbolTable.descriptorExtension.referenceSimpleFunction(it.original)
}
}