diff --git a/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/FirHelpers.kt b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/FirHelpers.kt index a2cae6209c3..f8dee7a34a2 100644 --- a/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/FirHelpers.kt +++ b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/FirHelpers.kt @@ -25,7 +25,6 @@ import org.jetbrains.kotlin.fir.expressions.* import org.jetbrains.kotlin.fir.expressions.impl.FirEmptyExpressionBlock import org.jetbrains.kotlin.fir.references.FirSuperReference import org.jetbrains.kotlin.fir.references.toResolvedCallableSymbol -import org.jetbrains.kotlin.fir.declarations.fullyExpandedClass import org.jetbrains.kotlin.fir.resolve.* import org.jetbrains.kotlin.fir.resolve.providers.symbolProvider import org.jetbrains.kotlin.fir.scopes.* @@ -346,15 +345,24 @@ fun FirCallableSymbol<*>.getImplementationStatus( } } } - if (this is FirNamedFunctionSymbol) { - if (parentClassSymbol is FirRegularClassSymbol && parentClassSymbol.isData && matchesDataClassSyntheticMemberSignatures) { - return ImplementationStatus.INHERITED_OR_SYNTHESIZED - } - // TODO: suspend function overridden by a Java class in the middle is not properly regarded as an override - if (isSuspend) { - return ImplementationStatus.INHERITED_OR_SYNTHESIZED + + when (symbol) { + is FirNamedFunctionSymbol -> { + if ( + parentClassSymbol is FirRegularClassSymbol && + parentClassSymbol.isData && + symbol.matchesDataClassSyntheticMemberSignatures + ) { + return ImplementationStatus.INHERITED_OR_SYNTHESIZED + } + // TODO: suspend function overridden by a Java class in the middle is not properly regarded as an override + if (isSuspend) { + return ImplementationStatus.INHERITED_OR_SYNTHESIZED + } } + is FirFieldSymbol -> if (symbol.isJavaOrEnhancement) return ImplementationStatus.CANNOT_BE_IMPLEMENTED } + return when { isFinal -> ImplementationStatus.CANNOT_BE_IMPLEMENTED containingClassSymbol === parentClassSymbol && (origin == FirDeclarationOrigin.Source || origin == FirDeclarationOrigin.Precompiled) ->