FIR2IR: Use IrDeclarationOrigin.FAKE_OVERRIDE for non-source classes

This commit is contained in:
Denis.Zharkov
2021-02-17 19:02:15 +03:00
parent d339096ac3
commit a883833941
@@ -1019,7 +1019,7 @@ class Fir2IrDeclarationStorage(
getCachedIrFunction(fir)?.let { return it.symbol } getCachedIrFunction(fir)?.let { return it.symbol }
val irParent = findIrParent(fir) val irParent = findIrParent(fir)
val parentOrigin = (irParent as? IrDeclaration)?.origin ?: IrDeclarationOrigin.DEFINED val parentOrigin = (irParent as? IrDeclaration)?.origin ?: IrDeclarationOrigin.DEFINED
val declarationOrigin = computeDeclarationOrigin(firFunctionSymbol, parentOrigin, irParent) val declarationOrigin = computeDeclarationOrigin(firFunctionSymbol, parentOrigin)
createIrFunction(fir, irParent, origin = declarationOrigin).symbol createIrFunction(fir, irParent, origin = declarationOrigin).symbol
} }
is FirSimpleFunction -> { is FirSimpleFunction -> {
@@ -1106,7 +1106,7 @@ class Fir2IrDeclarationStorage(
signature signature
}?.let { return it.symbol } }?.let { return it.symbol }
val parentOrigin = (irParent as? IrDeclaration)?.origin ?: IrDeclarationOrigin.DEFINED val parentOrigin = (irParent as? IrDeclaration)?.origin ?: IrDeclarationOrigin.DEFINED
val declarationOrigin = computeDeclarationOrigin(firSymbol, parentOrigin, irParent) val declarationOrigin = computeDeclarationOrigin(firSymbol, parentOrigin)
// TODO: package fragment members (?) // TODO: package fragment members (?)
val parent = irParent val parent = irParent
if (parent is Fir2IrLazyClass) { if (parent is Fir2IrLazyClass) {
@@ -1124,17 +1124,14 @@ class Fir2IrDeclarationStorage(
private fun computeDeclarationOrigin( private fun computeDeclarationOrigin(
symbol: FirCallableSymbol<*>, symbol: FirCallableSymbol<*>,
parentOrigin: IrDeclarationOrigin, parentOrigin: IrDeclarationOrigin
irParent: IrDeclarationParent?
): IrDeclarationOrigin { ): IrDeclarationOrigin {
return if (irParent.isSourceClass() && (symbol.fir.isIntersectionOverride || symbol.fir.isSubstitutionOverride)) return if (symbol.fir.isIntersectionOverride || symbol.fir.isSubstitutionOverride)
IrDeclarationOrigin.FAKE_OVERRIDE IrDeclarationOrigin.FAKE_OVERRIDE
else else
parentOrigin parentOrigin
} }
private fun IrDeclarationParent?.isSourceClass() = this is IrClass && this !is Fir2IrLazyClass && this !is IrLazyClass
fun getIrFieldSymbol(firFieldSymbol: FirFieldSymbol): IrSymbol { fun getIrFieldSymbol(firFieldSymbol: FirFieldSymbol): IrSymbol {
val fir = firFieldSymbol.fir val fir = firFieldSymbol.fir
val irProperty = fieldCache[fir] ?: run { val irProperty = fieldCache[fir] ?: run {