[K2/N] Insert asserts to reveal wrongly recursive Fir2IrLazy*.overriddenSymbols

^KT-58459
[Merge-request: KT-MR-9962
Merged-by: Vladimir Sukharev <Vladimir.Sukharev@jetbrains.com>
This commit is contained in:
Vladimir Sukharev
2023-05-05 12:06:22 +00:00
committed by Space Team
parent 47c32ef37f
commit 98be76295f
5 changed files with 14 additions and 2 deletions
@@ -406,6 +406,7 @@ internal fun FirSimpleFunction.generateOverriddenFunctionSymbols(containingClass
processOverriddenFunctionSymbols(containingClass) {
for (overridden in fakeOverrideGenerator.getOverriddenSymbolsInSupertypes(it, superClasses)) {
assert(overridden != symbol) { "Cannot add function $overridden to its own overriddenSymbols" }
overriddenSet += overridden
}
}
@@ -483,6 +484,7 @@ internal fun FirProperty.generateOverriddenPropertySymbols(containingClass: FirC
processOverriddenPropertySymbols(containingClass) {
for (overridden in fakeOverrideGenerator.getOverriddenSymbolsInSupertypes(it, superClasses)) {
assert(overridden != symbol) { "Cannot add property $overridden to its own overriddenSymbols" }
overriddenSet += overridden
}
}
@@ -510,6 +512,7 @@ internal fun FirProperty.generateOverriddenAccessorSymbols(containingClass: FirC
if (isGetter) overriddenIrPropertySymbol.owner.getter?.symbol
else overriddenIrPropertySymbol.owner.setter?.symbol
if (overriddenIrAccessorSymbol != null) {
assert(overriddenIrAccessorSymbol != symbol) { "Cannot add property $overriddenIrAccessorSymbol to its own overriddenSymbols" }
overriddenSet += overriddenIrAccessorSymbol
}
}
@@ -823,6 +823,7 @@ class IrBuiltInsOverFir(
it.valueParameters.count() == fn.valueParameters.count() &&
it.valueParameters.zip(fn.valueParameters).all { (l, r) -> l.type == r.type }
}?.let {
assert(it.symbol != fn) { "Cannot add function $fn to its own overriddenSymbols" }
fn.overriddenSymbols += it.symbol
}
}
@@ -939,6 +940,7 @@ class IrBuiltInsOverFir(
// TODO: replace with correct logic or explicit specification if cases become more complex
forEachSuperClass {
properties.find { it.name == property.name }?.let {
assert(property != it.symbol) { "Cannot add property $property to its own overriddenSymbols"}
property.overriddenSymbols += it.symbol
}
}
@@ -93,7 +93,10 @@ class Fir2IrLazySimpleFunction(
fakeOverrideGenerator.calcBaseSymbolsForFakeOverrideFunction(
firParent, this, fir.symbol
)
fakeOverrideGenerator.getOverriddenSymbolsForFakeOverride(this)?.let { return@lazyVar it }
fakeOverrideGenerator.getOverriddenSymbolsForFakeOverride(this)?.let {
assert(!it.contains(symbol)) { "Cannot add function $symbol to its own overriddenSymbols" }
return@lazyVar it
}
}
fir.generateOverriddenFunctionSymbols(firParent)
}
@@ -51,6 +51,7 @@ internal fun FirFunction.getObjCMethodInfoFromOverriddenFunctions(session: FirSe
// call of `processFunctionsByName()` is needed only for necessary side-effect before `getDirectOverriddenFunctions` call
unsubstitutedScope.processFunctionsByName(symbol.name) {}
unsubstitutedScope.getDirectOverriddenFunctions(symbol).firstNotNullOfOrNull {
assert(it.fir != this) { "Function ${symbol.name}() is wrongly contained in its own getDirectOverriddenFunctions" }
it.fir.getObjCMethodInfoFromOverriddenFunctions(session, scopeSession)
}
}
@@ -179,7 +179,10 @@ private fun IrSimpleFunction.getObjCMethodInfo(onlyExternal: Boolean): ObjCMetho
}
}
return overriddenSymbols.firstNotNullOfOrNull { it.owner.getObjCMethodInfo(onlyExternal) }
return overriddenSymbols.firstNotNullOfOrNull {
assert(it.owner != this) { "Function ${it.owner.descriptor.fqNameSafe}() is wrongly contained in its own overriddenSymbols"}
it.owner.getObjCMethodInfo(onlyExternal)
}
}
fun FunctionDescriptor.getExternalObjCMethodInfo(): ObjCMethodInfo? = this.getObjCMethodInfo(onlyExternal = true)