FIR2IR: Avoid recreation of declarations

They may be previously created for fake overrides
This commit is contained in:
Denis Zharkov
2020-09-29 20:09:36 +03:00
parent ff4b6a0bf9
commit 26a43b253f
2 changed files with 22 additions and 8 deletions
@@ -198,12 +198,12 @@ class Fir2IrConverter(
processClassMembers(declaration)
}
is FirSimpleFunction -> {
declarationStorage.createIrFunction(
declarationStorage.getOrCreateIrFunction(
declaration, parent, isLocal = isLocal
)
}
is FirProperty -> {
declarationStorage.createIrProperty(
declarationStorage.getOrCreateProperty(
declaration, parent, isLocal = isLocal
)
}
@@ -7,11 +7,8 @@ package org.jetbrains.kotlin.fir.backend
import org.jetbrains.kotlin.KtNodeTypes
import org.jetbrains.kotlin.builtins.StandardNames.BUILT_INS_PACKAGE_FQ_NAMES
import org.jetbrains.kotlin.descriptors.Modality
import org.jetbrains.kotlin.descriptors.PropertyDescriptor
import org.jetbrains.kotlin.descriptors.*
import org.jetbrains.kotlin.fir.FirAnnotationContainer
import org.jetbrains.kotlin.descriptors.Visibilities
import org.jetbrains.kotlin.descriptors.Visibility
import org.jetbrains.kotlin.fir.backend.generators.AnnotationGenerator
import org.jetbrains.kotlin.fir.backend.generators.DelegatedMemberGenerator
import org.jetbrains.kotlin.fir.declarations.*
@@ -30,6 +27,7 @@ import org.jetbrains.kotlin.fir.lazy.Fir2IrLazySimpleFunction
import org.jetbrains.kotlin.fir.render
import org.jetbrains.kotlin.fir.resolve.firProvider
import org.jetbrains.kotlin.fir.resolve.firSymbolProvider
import org.jetbrains.kotlin.fir.resolve.inference.isSuspendFunctionType
import org.jetbrains.kotlin.fir.resolve.isKFunctionInvoke
import org.jetbrains.kotlin.fir.symbols.*
import org.jetbrains.kotlin.fir.symbols.impl.*
@@ -51,8 +49,6 @@ import org.jetbrains.kotlin.name.ClassId
import org.jetbrains.kotlin.name.FqName
import org.jetbrains.kotlin.name.Name
import org.jetbrains.kotlin.serialization.deserialization.descriptors.DeserializedContainerSource
import org.jetbrains.kotlin.descriptors.DescriptorVisibility
import org.jetbrains.kotlin.fir.resolve.inference.isSuspendFunctionType
@OptIn(ObsoleteDescriptorBasedAPI::class)
class Fir2IrDeclarationStorage(
@@ -390,6 +386,15 @@ class Fir2IrDeclarationStorage(
return symbolTable.declareSimpleFunction(signature, { Fir2IrSimpleFunctionSymbol(signature, containerSource) }, factory)
}
fun getOrCreateIrFunction(
function: FirFunction<*>,
irParent: IrDeclarationParent?,
isLocal: Boolean = false,
): IrSimpleFunction {
getCachedIrFunction(function)?.let { return it }
return createIrFunction(function, irParent, isLocal = isLocal)
}
fun createIrFunction(
function: FirFunction<*>,
irParent: IrDeclarationParent?,
@@ -653,6 +658,15 @@ class Fir2IrDeclarationStorage(
return symbolTable.declareProperty(signature, { Fir2IrPropertySymbol(signature, containerSource) }, factory)
}
fun getOrCreateProperty(
property: FirProperty,
irParent: IrDeclarationParent?,
isLocal: Boolean = false,
): IrProperty {
getCachedIrProperty(property)?.let { return it }
return createIrProperty(property, irParent, isLocal = isLocal)
}
fun createIrProperty(
property: FirProperty,
irParent: IrDeclarationParent?,