[IR] Fix incorrect position of reporting with fake overrides inside actual
^KT-60668 ^KT-60936
This commit is contained in:
committed by
Space Team
parent
58a30d524c
commit
f1ea6545eb
+17
-4
@@ -46,7 +46,9 @@ internal class IrExpectActualAnnotationMatchingChecker(
|
||||
val incompatibility =
|
||||
AbstractExpectActualAnnotationMatchChecker.areAnnotationsCompatible(expectSymbol, actualSymbol, context) ?: continue
|
||||
|
||||
val reportOn = getTypealiasSymbolIfActualizedViaTypealias(expectSymbol) ?: actualSymbol
|
||||
val reportOn = getTypealiasSymbolIfActualizedViaTypealias(expectSymbol)
|
||||
?: getContainingActualClassIfFakeOverride(actualSymbol)
|
||||
?: actualSymbol
|
||||
diagnosticsReporter.reportActualAnnotationsNotMatchExpect(
|
||||
incompatibility.expectSymbol as IrSymbol,
|
||||
incompatibility.actualSymbol as IrSymbol,
|
||||
@@ -60,10 +62,21 @@ internal class IrExpectActualAnnotationMatchingChecker(
|
||||
get() = (owner as IrDeclaration).isFakeOverride
|
||||
|
||||
private fun getTypealiasSymbolIfActualizedViaTypealias(expectSymbol: IrSymbol): IrTypeAliasSymbol? {
|
||||
val expectDeclaration = expectSymbol.owner as IrDeclaration
|
||||
val parentsWithSelf = sequenceOf(expectDeclaration) + expectDeclaration.parents
|
||||
val topLevelExpectClass = parentsWithSelf.filterIsInstance<IrClass>().lastOrNull() ?: return null
|
||||
val topLevelExpectClass = getContainingTopLevelClass(expectSymbol) ?: return null
|
||||
val classId = topLevelExpectClass.classIdOrFail
|
||||
return classActualizationInfo.actualTypeAliases[classId]
|
||||
}
|
||||
|
||||
private fun getContainingActualClassIfFakeOverride(actualSymbol: IrSymbol): IrSymbol? {
|
||||
if (!actualSymbol.isFakeOverride) {
|
||||
return null
|
||||
}
|
||||
return getContainingTopLevelClass(actualSymbol)?.symbol
|
||||
}
|
||||
|
||||
private fun getContainingTopLevelClass(symbol: IrSymbol): IrClass? {
|
||||
val declaration = symbol.owner as IrDeclaration
|
||||
val parentsWithSelf = sequenceOf(declaration) + declaration.parents
|
||||
return parentsWithSelf.filterIsInstance<IrClass>().lastOrNull()
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user