diff --git a/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/CommonDeclarationCheckers.kt b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/CommonDeclarationCheckers.kt index 96cf1f31a53..9c8a54a99bb 100644 --- a/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/CommonDeclarationCheckers.kt +++ b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/CommonDeclarationCheckers.kt @@ -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 diff --git a/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/declaration/FirTopLevelFunctionsChecker.kt b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/declaration/FirNonMemberFunctionsChecker.kt similarity index 78% rename from compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/declaration/FirTopLevelFunctionsChecker.kt rename to compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/declaration/FirNonMemberFunctionsChecker.kt index d10c1ceec67..663c1498fed 100644 --- a/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/declaration/FirTopLevelFunctionsChecker.kt +++ b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/declaration/FirNonMemberFunctionsChecker.kt @@ -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 diff --git a/compiler/testData/diagnostics/tests/controlFlowAnalysis/kt2334.fir.kt b/compiler/testData/diagnostics/tests/controlFlowAnalysis/kt2334.fir.kt deleted file mode 100644 index 8c1a5ae4aea..00000000000 --- a/compiler/testData/diagnostics/tests/controlFlowAnalysis/kt2334.fir.kt +++ /dev/null @@ -1,5 +0,0 @@ -//KT-2334 An error 'local function without body' is not reported - -fun foo() { - fun bar() -} \ No newline at end of file diff --git a/compiler/testData/diagnostics/tests/controlFlowAnalysis/kt2334.kt b/compiler/testData/diagnostics/tests/controlFlowAnalysis/kt2334.kt index 4801d17d73f..2fa3b38a04f 100644 --- a/compiler/testData/diagnostics/tests/controlFlowAnalysis/kt2334.kt +++ b/compiler/testData/diagnostics/tests/controlFlowAnalysis/kt2334.kt @@ -1,3 +1,4 @@ +// FIR_IDENTICAL //KT-2334 An error 'local function without body' is not reported fun foo() { diff --git a/compiler/testData/diagnostics/tests/functionAsExpression/WithoutBody.fir.kt b/compiler/testData/diagnostics/tests/functionAsExpression/WithoutBody.fir.kt deleted file mode 100644 index ccb1f2408b2..00000000000 --- a/compiler/testData/diagnostics/tests/functionAsExpression/WithoutBody.fir.kt +++ /dev/null @@ -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 ()) -} \ No newline at end of file diff --git a/compiler/testData/diagnostics/tests/functionAsExpression/WithoutBody.kt b/compiler/testData/diagnostics/tests/functionAsExpression/WithoutBody.kt index a80a8ac283e..044752ac555 100644 --- a/compiler/testData/diagnostics/tests/functionAsExpression/WithoutBody.kt +++ b/compiler/testData/diagnostics/tests/functionAsExpression/WithoutBody.kt @@ -1,3 +1,4 @@ +// FIR_IDENTICAL // !DIAGNOSTICS: -UNUSED_PARAMETER annotation class ann