[FIR2IR] Extract declareIr<SomeDeclaration>
This commit is contained in:
@@ -26,6 +26,7 @@ import org.jetbrains.kotlin.ir.symbols.IrClassSymbol
|
||||
import org.jetbrains.kotlin.ir.symbols.IrTypeParameterSymbol
|
||||
import org.jetbrains.kotlin.ir.types.IrType
|
||||
import org.jetbrains.kotlin.ir.types.impl.IrSimpleTypeImpl
|
||||
import org.jetbrains.kotlin.ir.util.IdSignature
|
||||
import org.jetbrains.kotlin.ir.util.constructors
|
||||
import org.jetbrains.kotlin.name.Name
|
||||
|
||||
@@ -155,6 +156,10 @@ class Fir2IrClassifierStorage(
|
||||
return irClass
|
||||
}
|
||||
|
||||
private fun declareIrClass(signature: IdSignature, factory: (IrClassSymbol) -> IrClass): IrClass {
|
||||
return symbolTable.declareClass(signature, { Fir2IrClassSymbol(signature) }, factory)
|
||||
}
|
||||
|
||||
fun registerIrClass(
|
||||
regularClass: FirRegularClass,
|
||||
parent: IrDeclarationParent? = null,
|
||||
@@ -168,7 +173,7 @@ class Fir2IrClassifierStorage(
|
||||
}
|
||||
val signature = signatureComposer.composeSignature(regularClass)
|
||||
val irClass = regularClass.convertWithOffsets { startOffset, endOffset ->
|
||||
symbolTable.declareClass(signature, { Fir2IrClassSymbol(signature) }) { symbol ->
|
||||
declareIrClass(signature) { symbol ->
|
||||
IrClassImpl(
|
||||
startOffset,
|
||||
endOffset,
|
||||
@@ -212,7 +217,7 @@ class Fir2IrClassifierStorage(
|
||||
val modality = Modality.FINAL
|
||||
val signature = signatureComposer.composeSignature(anonymousObject)
|
||||
val result = anonymousObject.convertWithOffsets { startOffset, endOffset ->
|
||||
symbolTable.declareClass(signature, { Fir2IrClassSymbol(signature) }) { symbol ->
|
||||
declareIrClass(signature) { symbol ->
|
||||
IrClassImpl(
|
||||
startOffset, endOffset, origin, symbol, name,
|
||||
// NB: for unknown reason, IR uses 'CLASS' kind for simple anonymous objects
|
||||
|
||||
+16
-4
@@ -433,6 +433,10 @@ class Fir2IrDeclarationStorage(
|
||||
}
|
||||
}
|
||||
|
||||
private fun declareIrSimpleFunction(signature: IdSignature, factory: (IrSimpleFunctionSymbol) -> IrSimpleFunction): IrSimpleFunction {
|
||||
return symbolTable.declareSimpleFunction(signature, { Fir2IrSimpleFunctionSymbol(signature) }, factory)
|
||||
}
|
||||
|
||||
fun createIrFunction(
|
||||
function: FirFunction<*>,
|
||||
irParent: IrDeclarationParent?,
|
||||
@@ -456,7 +460,7 @@ class Fir2IrDeclarationStorage(
|
||||
else simpleFunction?.isSuspend == true
|
||||
val signature = signatureComposer.composeSignature(function)
|
||||
val created = function.convertWithOffsets { startOffset, endOffset ->
|
||||
val result = symbolTable.declareSimpleFunction(signature, { Fir2IrSimpleFunctionSymbol(signature) }) { symbol ->
|
||||
val result = declareIrSimpleFunction(signature) { symbol ->
|
||||
IrFunctionImpl(
|
||||
startOffset, endOffset, updatedOrigin, symbol,
|
||||
name, visibility,
|
||||
@@ -515,6 +519,10 @@ class Fir2IrDeclarationStorage(
|
||||
|
||||
fun getCachedIrConstructor(constructor: FirConstructor): IrConstructor? = constructorCache[constructor]
|
||||
|
||||
private fun declareIrConstructor(signature: IdSignature, factory: (IrConstructorSymbol) -> IrConstructor): IrConstructor {
|
||||
return symbolTable.declareConstructor(signature, { Fir2IrConstructorSymbol(signature) }, factory)
|
||||
}
|
||||
|
||||
fun createIrConstructor(
|
||||
constructor: FirConstructor,
|
||||
irParent: IrClass,
|
||||
@@ -524,7 +532,7 @@ class Fir2IrDeclarationStorage(
|
||||
classifierStorage.preCacheTypeParameters(constructor)
|
||||
val signature = signatureComposer.composeSignature(constructor)
|
||||
val created = constructor.convertWithOffsets { startOffset, endOffset ->
|
||||
symbolTable.declareConstructor(signature, { Fir2IrConstructorSymbol(signature) }) { symbol ->
|
||||
declareIrConstructor(signature) { symbol ->
|
||||
IrConstructorImpl(
|
||||
startOffset, endOffset, origin, symbol,
|
||||
Name.special("<init>"), constructor.visibility,
|
||||
@@ -556,7 +564,7 @@ class Fir2IrDeclarationStorage(
|
||||
): IrSimpleFunction {
|
||||
val prefix = if (isSetter) "set" else "get"
|
||||
val signature = signatureComposer.composeAccessorSignature(property, isSetter)
|
||||
return symbolTable.declareSimpleFunction(signature, { Fir2IrSimpleFunctionSymbol(signature) }) { symbol ->
|
||||
return declareIrSimpleFunction(signature) { symbol ->
|
||||
val accessorReturnType = if (isSetter) irBuiltIns.unitType else propertyType
|
||||
IrFunctionImpl(
|
||||
startOffset, endOffset, origin, symbol,
|
||||
@@ -639,6 +647,10 @@ class Fir2IrDeclarationStorage(
|
||||
else -> Visibilities.PRIVATE
|
||||
}
|
||||
|
||||
private fun declareIrProperty(signature: IdSignature, factory: (IrPropertySymbol) -> IrProperty): IrProperty {
|
||||
return symbolTable.declareProperty(signature, { Fir2IrPropertySymbol(signature) }, factory)
|
||||
}
|
||||
|
||||
fun createIrProperty(
|
||||
property: FirProperty,
|
||||
irParent: IrDeclarationParent?,
|
||||
@@ -648,7 +660,7 @@ class Fir2IrDeclarationStorage(
|
||||
classifierStorage.preCacheTypeParameters(property)
|
||||
val signature = signatureComposer.composeSignature(property)
|
||||
return property.convertWithOffsets { startOffset, endOffset ->
|
||||
val result = symbolTable.declareProperty(signature, { Fir2IrPropertySymbol(signature) }) { symbol ->
|
||||
val result = declareIrProperty(signature) { symbol ->
|
||||
IrPropertyImpl(
|
||||
startOffset, endOffset, origin, symbol,
|
||||
property.name, property.visibility, property.modality!!,
|
||||
|
||||
Reference in New Issue
Block a user