[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
@@ -1,5 +0,0 @@
//KT-2334 An error 'local function without body' is not reported
fun foo() {
fun bar()
}
@@ -1,3 +1,4 @@
// FIR_IDENTICAL
//KT-2334 An error 'local function without body' is not reported
fun foo() {
@@ -1,12 +0,0 @@
// !DIAGNOSTICS: -UNUSED_PARAMETER
annotation class ann
val bas = fun ()
fun bar(a: Any) = fun ()
fun outer() {
bar(fun ())
bar(l@ fun ())
bar(@ann fun ())
}
@@ -1,3 +1,4 @@
// FIR_IDENTICAL
// !DIAGNOSTICS: -UNUSED_PARAMETER
annotation class ann