[FIR] Report NON_MEMBER_FUNCTION_NO_BODY

^KT-59944 Fixed
This commit is contained in:
Nikolay Lunyak
2023-08-23 14:23:38 +03:00
committed by Space Team
parent e103318432
commit 82c18ff26b
6 changed files with 11 additions and 23 deletions
@@ -51,6 +51,7 @@ object CommonDeclarationCheckers : DeclarationCheckers() {
FirFunctionParameterChecker,
FirFunctionReturnChecker,
FirInlineDeclarationChecker,
FirNonMemberFunctionsChecker,
FirSuspendLimitationsChecker,
)
@@ -63,7 +64,6 @@ object CommonDeclarationCheckers : DeclarationCheckers() {
FirMemberFunctionsChecker,
FirDataObjectContentChecker,
ContractSyntaxV2FunctionChecker,
FirTopLevelFunctionsChecker,
)
override val propertyCheckers: Set<FirPropertyChecker>
@@ -13,7 +13,9 @@ import org.jetbrains.kotlin.fir.analysis.checkers.FirPlatformDiagnosticSuppresso
import org.jetbrains.kotlin.fir.analysis.checkers.context.CheckerContext
import org.jetbrains.kotlin.fir.analysis.checkers.hasModifier
import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors
import org.jetbrains.kotlin.fir.declarations.FirSimpleFunction
import org.jetbrains.kotlin.fir.containingClassLookupTag
import org.jetbrains.kotlin.fir.declarations.FirFunction
import org.jetbrains.kotlin.fir.declarations.FirPropertyAccessor
import org.jetbrains.kotlin.fir.declarations.utils.hasBody
import org.jetbrains.kotlin.fir.declarations.utils.isExpect
import org.jetbrains.kotlin.fir.declarations.utils.isExternal
@@ -22,10 +24,11 @@ import org.jetbrains.kotlin.lexer.KtTokens
val FirSession.platformDiagnosticSuppressor: FirPlatformDiagnosticSuppressor? by FirSession.nullableSessionComponentAccessor()
// See old FE's [DeclarationsChecker]
object FirTopLevelFunctionsChecker : FirSimpleFunctionChecker() {
override fun check(declaration: FirSimpleFunction, context: CheckerContext, reporter: DiagnosticReporter) {
// Only report on top level callable declarations
if (context.containingDeclarations.size > 1) return
object FirNonMemberFunctionsChecker : FirFunctionChecker() {
override fun check(declaration: FirFunction, context: CheckerContext, reporter: DiagnosticReporter) {
if (declaration.containingClassLookupTag() != null || declaration is FirPropertyAccessor) {
return
}
val source = declaration.source ?: return
if (source.kind is KtFakeSourceElementKind) return