[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:
committed by
Space Team
parent
47c32ef37f
commit
98be76295f
@@ -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)
|
||||
}
|
||||
|
||||
+1
@@ -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)
|
||||
}
|
||||
}
|
||||
|
||||
+4
-1
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user