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 4237fc7bdc9..9525275bd40 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 @@ -574,7 +574,7 @@ fun FirFunctionSymbol<*>.isFunctionForExpectTypeFromCastFeature(): Boolean { return true } -fun getActualTargetList(annotated: FirDeclaration): AnnotationTargetList { +fun getActualTargetList(annotated: FirAnnotationContainer): AnnotationTargetList { fun CallableId.isMember(): Boolean { return classId != null || isLocal // TODO: Replace with .containingClass (after fixing) } @@ -628,6 +628,7 @@ fun getActualTargetList(annotated: FirDeclaration): AnnotationTargetList { is FirBackingField -> TargetLists.T_BACKING_FIELD is FirFile -> TargetLists.T_FILE is FirTypeParameter -> TargetLists.T_TYPE_PARAMETER + is FirReceiverParameter -> TargetLists.T_TYPE_REFERENCE is FirAnonymousInitializer -> TargetLists.T_INITIALIZER is FirAnonymousObject -> if (annotated.source?.kind == KtFakeSourceElementKind.EnumInitializer) { diff --git a/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/declaration/FirAnnotationChecker.kt b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/declaration/FirAnnotationChecker.kt index 63c7c483b1c..54d857b18cb 100644 --- a/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/declaration/FirAnnotationChecker.kt +++ b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/declaration/FirAnnotationChecker.kt @@ -38,6 +38,20 @@ object FirAnnotationChecker : FirBasicDeclarationChecker() { declaration: FirDeclaration, context: CheckerContext, reporter: DiagnosticReporter + ) { + checkAnnotationContainer(declaration, context, reporter) + + if (declaration is FirCallableDeclaration) { + declaration.receiverParameter?.let { + checkAnnotationContainer(it, context, reporter) + } + } + } + + private fun checkAnnotationContainer( + declaration: FirAnnotationContainer, + context: CheckerContext, + reporter: DiagnosticReporter ) { var deprecated: FirAnnotation? = null var deprecatedSinceKotlin: FirAnnotation? = null @@ -88,7 +102,7 @@ object FirAnnotationChecker : FirBasicDeclarationChecker() { } private fun checkMultiFieldValueClassAnnotationRestrictions( - declaration: FirDeclaration, + declaration: FirAnnotationContainer, annotation: FirAnnotation, context: CheckerContext, reporter: DiagnosticReporter @@ -123,7 +137,7 @@ object FirAnnotationChecker : FirBasicDeclarationChecker() { } private fun checkAnnotationTarget( - declaration: FirDeclaration, + declaration: FirAnnotationContainer, annotation: FirAnnotation, context: CheckerContext, reporter: DiagnosticReporter @@ -172,7 +186,7 @@ object FirAnnotationChecker : FirBasicDeclarationChecker() { } private fun checkAnnotationUseSiteTarget( - annotated: FirDeclaration, + annotated: FirAnnotationContainer, annotation: FirAnnotation, target: AnnotationUseSiteTarget, context: CheckerContext, diff --git a/compiler/testData/diagnostics/tests/kt56769.fir.kt b/compiler/testData/diagnostics/tests/kt56769.fir.kt index a525a7703c7..04895d280de 100644 --- a/compiler/testData/diagnostics/tests/kt56769.fir.kt +++ b/compiler/testData/diagnostics/tests/kt56769.fir.kt @@ -21,4 +21,4 @@ fun (@Anno Int).crane() {} @Target(AnnotationTarget.FILE) annotation class Anno2 -fun @receiver:Anno2 Int.pain() {} +fun @receiver:Anno2 Int.pain() {}