[IR] Provide default implementations of symbol factories in SymbolTableExtension

This commit is contained in:
Dmitriy Novozhilov
2023-07-12 14:31:51 +03:00
committed by Space Team
parent c2f9961d4f
commit 0b502f08d5
@@ -10,6 +10,7 @@ import org.jetbrains.kotlin.ir.IrLock
import org.jetbrains.kotlin.ir.declarations.* import org.jetbrains.kotlin.ir.declarations.*
import org.jetbrains.kotlin.ir.expressions.IrExpressionBody import org.jetbrains.kotlin.ir.expressions.IrExpressionBody
import org.jetbrains.kotlin.ir.symbols.* import org.jetbrains.kotlin.ir.symbols.*
import org.jetbrains.kotlin.ir.symbols.impl.*
import org.jetbrains.kotlin.ir.types.IrType import org.jetbrains.kotlin.ir.types.IrType
import org.jetbrains.kotlin.utils.threadLocal import org.jetbrains.kotlin.utils.threadLocal
@@ -109,9 +110,11 @@ abstract class SymbolTableExtension<
protected abstract fun defaultScriptFactory(startOffset: Int, endOffset: Int, script: Script, symbol: IrScriptSymbol): IrScript protected abstract fun defaultScriptFactory(startOffset: Int, endOffset: Int, script: Script, symbol: IrScriptSymbol): IrScript
protected abstract fun createScriptSymbol(declaration: Script, signature: IdSignature?): IrScriptSymbol protected open fun createScriptSymbol(declaration: Script, signature: IdSignature?): IrScriptSymbol {
return IrScriptSymbolImpl()
}
// ------------------------------------ script ------------------------------------ // ------------------------------------ class ------------------------------------
fun declareClass(declaration: Class, classFactory: (IrClassSymbol) -> IrClass): IrClass { fun declareClass(declaration: Class, classFactory: (IrClassSymbol) -> IrClass): IrClass {
return declare( return declare(
@@ -148,8 +151,13 @@ abstract class SymbolTableExtension<
return signature?.let { createPublicClassSymbol(declaration, signature) } ?: createPrivateClassSymbol(declaration) return signature?.let { createPublicClassSymbol(declaration, signature) } ?: createPrivateClassSymbol(declaration)
} }
protected abstract fun createPublicClassSymbol(declaration: Class, signature: IdSignature): IrClassSymbol protected open fun createPublicClassSymbol(declaration: Class, signature: IdSignature): IrClassSymbol {
protected abstract fun createPrivateClassSymbol(descriptor: Class): IrClassSymbol return IrClassPublicSymbolImpl(signature)
}
protected open fun createPrivateClassSymbol(descriptor: Class): IrClassSymbol {
return IrClassSymbolImpl()
}
// ------------------------------------ constructor ------------------------------------ // ------------------------------------ constructor ------------------------------------
@@ -191,8 +199,13 @@ abstract class SymbolTableExtension<
return signature?.let { createPublicConstructorSymbol(declaration, signature) } ?: createPrivateConstructorSymbol(declaration) return signature?.let { createPublicConstructorSymbol(declaration, signature) } ?: createPrivateConstructorSymbol(declaration)
} }
protected abstract fun createPublicConstructorSymbol(declaration: Constructor, signature: IdSignature): IrConstructorSymbol protected open fun createPublicConstructorSymbol(declaration: Constructor, signature: IdSignature): IrConstructorSymbol {
protected abstract fun createPrivateConstructorSymbol(declaration: Constructor): IrConstructorSymbol return IrConstructorPublicSymbolImpl(signature)
}
protected open fun createPrivateConstructorSymbol(declaration: Constructor): IrConstructorSymbol {
return IrConstructorSymbolImpl()
}
// ------------------------------------ enum entry ------------------------------------ // ------------------------------------ enum entry ------------------------------------
@@ -240,8 +253,13 @@ abstract class SymbolTableExtension<
return signature?.let { createPublicEnumEntrySymbol(declaration, signature) } ?: createPrivateEnumEntrySymbol(declaration) return signature?.let { createPublicEnumEntrySymbol(declaration, signature) } ?: createPrivateEnumEntrySymbol(declaration)
} }
protected abstract fun createPublicEnumEntrySymbol(declaration: Class, signature: IdSignature): IrEnumEntrySymbol protected open fun createPublicEnumEntrySymbol(declaration: Class, signature: IdSignature): IrEnumEntrySymbol {
protected abstract fun createPrivateEnumEntrySymbol(declaration: Class): IrEnumEntrySymbol return IrEnumEntryPublicSymbolImpl(signature)
}
protected open fun createPrivateEnumEntrySymbol(declaration: Class): IrEnumEntrySymbol {
return IrEnumEntrySymbolImpl()
}
protected abstract fun defaultEnumEntryFactory( protected abstract fun defaultEnumEntryFactory(
startOffset: Int, startOffset: Int,
@@ -311,8 +329,14 @@ abstract class SymbolTableExtension<
return signature?.let { createPublicFieldSymbol(declaration, signature) } ?: createPrivateFieldSymbol(declaration) return signature?.let { createPublicFieldSymbol(declaration, signature) } ?: createPrivateFieldSymbol(declaration)
} }
protected abstract fun createPublicFieldSymbol(declaration: Property, signature: IdSignature): IrFieldSymbol protected open fun createPublicFieldSymbol(declaration: Property, signature: IdSignature): IrFieldSymbol {
protected abstract fun createPrivateFieldSymbol(declaration: Property): IrFieldSymbol return IrFieldPublicSymbolImpl(signature)
}
protected open fun createPrivateFieldSymbol(declaration: Property): IrFieldSymbol {
return IrFieldSymbolImpl()
}
protected abstract fun defaultFieldFactory( protected abstract fun defaultFieldFactory(
startOffset: Int, startOffset: Int,
@@ -373,8 +397,13 @@ abstract class SymbolTableExtension<
return signature?.let { createPublicPropertySymbol(declaration, signature) } ?: createPrivatePropertySymbol(declaration) return signature?.let { createPublicPropertySymbol(declaration, signature) } ?: createPrivatePropertySymbol(declaration)
} }
protected abstract fun createPublicPropertySymbol(declaration: Property, signature: IdSignature): IrPropertySymbol protected open fun createPublicPropertySymbol(declaration: Property, signature: IdSignature): IrPropertySymbol {
protected abstract fun createPrivatePropertySymbol(declaration: Property): IrPropertySymbol return IrPropertyPublicSymbolImpl(signature)
}
protected open fun createPrivatePropertySymbol(declaration: Property): IrPropertySymbol {
return IrPropertySymbolImpl()
}
protected abstract fun defaultPropertyFactory( protected abstract fun defaultPropertyFactory(
startOffset: Int, startOffset: Int,
@@ -422,8 +451,13 @@ abstract class SymbolTableExtension<
return signature?.let { createPublicTypeAliasSymbol(declaration, signature) } ?: createPrivateTypeAliasSymbol(declaration) return signature?.let { createPublicTypeAliasSymbol(declaration, signature) } ?: createPrivateTypeAliasSymbol(declaration)
} }
protected abstract fun createPublicTypeAliasSymbol(declaration: TypeAlias, signature: IdSignature): IrTypeAliasSymbol protected open fun createPublicTypeAliasSymbol(declaration: TypeAlias, signature: IdSignature): IrTypeAliasSymbol {
protected abstract fun createPrivateTypeAliasSymbol(declaration: TypeAlias): IrTypeAliasSymbol return IrTypeAliasPublicSymbolImpl(signature)
}
protected open fun createPrivateTypeAliasSymbol(declaration: TypeAlias): IrTypeAliasSymbol {
return IrTypeAliasSymbolImpl()
}
// ------------------------------------ function ------------------------------------ // ------------------------------------ function ------------------------------------
@@ -478,8 +512,13 @@ abstract class SymbolTableExtension<
return signature?.let { createPublicFunctionSymbol(declaration, signature) } ?: createPrivateFunctionSymbol(declaration) return signature?.let { createPublicFunctionSymbol(declaration, signature) } ?: createPrivateFunctionSymbol(declaration)
} }
protected abstract fun createPublicFunctionSymbol(declaration: Function, signature: IdSignature): IrSimpleFunctionSymbol protected open fun createPublicFunctionSymbol(declaration: Function, signature: IdSignature): IrSimpleFunctionSymbol {
protected abstract fun createPrivateFunctionSymbol(declaration: Function): IrSimpleFunctionSymbol return IrSimpleFunctionPublicSymbolImpl(signature)
}
protected open fun createPrivateFunctionSymbol(declaration: Function): IrSimpleFunctionSymbol {
return IrSimpleFunctionSymbolImpl()
}
// ------------------------------------ type parameter ------------------------------------ // ------------------------------------ type parameter ------------------------------------
@@ -543,8 +582,13 @@ abstract class SymbolTableExtension<
return signature?.let { createPublicTypeParameterSymbol(declaration, signature) } ?: createPrivateTypeParameterSymbol(declaration) return signature?.let { createPublicTypeParameterSymbol(declaration, signature) } ?: createPrivateTypeParameterSymbol(declaration)
} }
protected abstract fun createPublicTypeParameterSymbol(declaration: TypeParameter, signature: IdSignature): IrTypeParameterSymbol protected open fun createPublicTypeParameterSymbol(declaration: TypeParameter, signature: IdSignature): IrTypeParameterSymbol {
protected abstract fun createPrivateTypeParameterSymbol(declaration: TypeParameter): IrTypeParameterSymbol return IrTypeParameterPublicSymbolImpl(signature)
}
protected open fun createPrivateTypeParameterSymbol(declaration: TypeParameter): IrTypeParameterSymbol {
return IrTypeParameterSymbolImpl()
}
protected abstract fun defaultTypeParameterFactory( protected abstract fun defaultTypeParameterFactory(
startOffset: Int, startOffset: Int,