[FIR2IR] Extract declareIr<SomeDeclaration>

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