[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.expressions.IrExpressionBody
import org.jetbrains.kotlin.ir.symbols.*
import org.jetbrains.kotlin.ir.symbols.impl.*
import org.jetbrains.kotlin.ir.types.IrType
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 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 {
return declare(
@@ -148,8 +151,13 @@ abstract class SymbolTableExtension<
return signature?.let { createPublicClassSymbol(declaration, signature) } ?: createPrivateClassSymbol(declaration)
}
protected abstract fun createPublicClassSymbol(declaration: Class, signature: IdSignature): IrClassSymbol
protected abstract fun createPrivateClassSymbol(descriptor: Class): IrClassSymbol
protected open fun createPublicClassSymbol(declaration: Class, signature: IdSignature): IrClassSymbol {
return IrClassPublicSymbolImpl(signature)
}
protected open fun createPrivateClassSymbol(descriptor: Class): IrClassSymbol {
return IrClassSymbolImpl()
}
// ------------------------------------ constructor ------------------------------------
@@ -191,8 +199,13 @@ abstract class SymbolTableExtension<
return signature?.let { createPublicConstructorSymbol(declaration, signature) } ?: createPrivateConstructorSymbol(declaration)
}
protected abstract fun createPublicConstructorSymbol(declaration: Constructor, signature: IdSignature): IrConstructorSymbol
protected abstract fun createPrivateConstructorSymbol(declaration: Constructor): IrConstructorSymbol
protected open fun createPublicConstructorSymbol(declaration: Constructor, signature: IdSignature): IrConstructorSymbol {
return IrConstructorPublicSymbolImpl(signature)
}
protected open fun createPrivateConstructorSymbol(declaration: Constructor): IrConstructorSymbol {
return IrConstructorSymbolImpl()
}
// ------------------------------------ enum entry ------------------------------------
@@ -240,8 +253,13 @@ abstract class SymbolTableExtension<
return signature?.let { createPublicEnumEntrySymbol(declaration, signature) } ?: createPrivateEnumEntrySymbol(declaration)
}
protected abstract fun createPublicEnumEntrySymbol(declaration: Class, signature: IdSignature): IrEnumEntrySymbol
protected abstract fun createPrivateEnumEntrySymbol(declaration: Class): IrEnumEntrySymbol
protected open fun createPublicEnumEntrySymbol(declaration: Class, signature: IdSignature): IrEnumEntrySymbol {
return IrEnumEntryPublicSymbolImpl(signature)
}
protected open fun createPrivateEnumEntrySymbol(declaration: Class): IrEnumEntrySymbol {
return IrEnumEntrySymbolImpl()
}
protected abstract fun defaultEnumEntryFactory(
startOffset: Int,
@@ -311,8 +329,14 @@ abstract class SymbolTableExtension<
return signature?.let { createPublicFieldSymbol(declaration, signature) } ?: createPrivateFieldSymbol(declaration)
}
protected abstract fun createPublicFieldSymbol(declaration: Property, signature: IdSignature): IrFieldSymbol
protected abstract fun createPrivateFieldSymbol(declaration: Property): IrFieldSymbol
protected open fun createPublicFieldSymbol(declaration: Property, signature: IdSignature): IrFieldSymbol {
return IrFieldPublicSymbolImpl(signature)
}
protected open fun createPrivateFieldSymbol(declaration: Property): IrFieldSymbol {
return IrFieldSymbolImpl()
}
protected abstract fun defaultFieldFactory(
startOffset: Int,
@@ -373,8 +397,13 @@ abstract class SymbolTableExtension<
return signature?.let { createPublicPropertySymbol(declaration, signature) } ?: createPrivatePropertySymbol(declaration)
}
protected abstract fun createPublicPropertySymbol(declaration: Property, signature: IdSignature): IrPropertySymbol
protected abstract fun createPrivatePropertySymbol(declaration: Property): IrPropertySymbol
protected open fun createPublicPropertySymbol(declaration: Property, signature: IdSignature): IrPropertySymbol {
return IrPropertyPublicSymbolImpl(signature)
}
protected open fun createPrivatePropertySymbol(declaration: Property): IrPropertySymbol {
return IrPropertySymbolImpl()
}
protected abstract fun defaultPropertyFactory(
startOffset: Int,
@@ -422,8 +451,13 @@ abstract class SymbolTableExtension<
return signature?.let { createPublicTypeAliasSymbol(declaration, signature) } ?: createPrivateTypeAliasSymbol(declaration)
}
protected abstract fun createPublicTypeAliasSymbol(declaration: TypeAlias, signature: IdSignature): IrTypeAliasSymbol
protected abstract fun createPrivateTypeAliasSymbol(declaration: TypeAlias): IrTypeAliasSymbol
protected open fun createPublicTypeAliasSymbol(declaration: TypeAlias, signature: IdSignature): IrTypeAliasSymbol {
return IrTypeAliasPublicSymbolImpl(signature)
}
protected open fun createPrivateTypeAliasSymbol(declaration: TypeAlias): IrTypeAliasSymbol {
return IrTypeAliasSymbolImpl()
}
// ------------------------------------ function ------------------------------------
@@ -478,8 +512,13 @@ abstract class SymbolTableExtension<
return signature?.let { createPublicFunctionSymbol(declaration, signature) } ?: createPrivateFunctionSymbol(declaration)
}
protected abstract fun createPublicFunctionSymbol(declaration: Function, signature: IdSignature): IrSimpleFunctionSymbol
protected abstract fun createPrivateFunctionSymbol(declaration: Function): IrSimpleFunctionSymbol
protected open fun createPublicFunctionSymbol(declaration: Function, signature: IdSignature): IrSimpleFunctionSymbol {
return IrSimpleFunctionPublicSymbolImpl(signature)
}
protected open fun createPrivateFunctionSymbol(declaration: Function): IrSimpleFunctionSymbol {
return IrSimpleFunctionSymbolImpl()
}
// ------------------------------------ type parameter ------------------------------------
@@ -543,8 +582,13 @@ abstract class SymbolTableExtension<
return signature?.let { createPublicTypeParameterSymbol(declaration, signature) } ?: createPrivateTypeParameterSymbol(declaration)
}
protected abstract fun createPublicTypeParameterSymbol(declaration: TypeParameter, signature: IdSignature): IrTypeParameterSymbol
protected abstract fun createPrivateTypeParameterSymbol(declaration: TypeParameter): IrTypeParameterSymbol
protected open fun createPublicTypeParameterSymbol(declaration: TypeParameter, signature: IdSignature): IrTypeParameterSymbol {
return IrTypeParameterPublicSymbolImpl(signature)
}
protected open fun createPrivateTypeParameterSymbol(declaration: TypeParameter): IrTypeParameterSymbol {
return IrTypeParameterSymbolImpl()
}
protected abstract fun defaultTypeParameterFactory(
startOffset: Int,