diff --git a/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/expression/FirAnnotationExpressionChecker.kt b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/expression/FirAnnotationExpressionChecker.kt index 0173020a1eb..bc26f439372 100644 --- a/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/expression/FirAnnotationExpressionChecker.kt +++ b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/expression/FirAnnotationExpressionChecker.kt @@ -8,6 +8,7 @@ package org.jetbrains.kotlin.fir.analysis.checkers.expression import org.jetbrains.kotlin.KtSourceElement import org.jetbrains.kotlin.config.AnalysisFlags import org.jetbrains.kotlin.config.ApiVersion +import org.jetbrains.kotlin.config.LanguageFeature import org.jetbrains.kotlin.diagnostics.DiagnosticReporter import org.jetbrains.kotlin.diagnostics.KtDiagnosticFactory0 import org.jetbrains.kotlin.diagnostics.reportOn @@ -58,6 +59,7 @@ object FirAnnotationExpressionChecker : FirAnnotationCallChecker() { checkAnnotationUsedAsAnnotationArgument(expression, context, reporter) checkNotAClass(expression, context, reporter) checkErrorSuppression(annotationClassId, argumentMapping, reporter, context) + checkContextFunctionTypeParams(expression.source, annotationClassId, reporter, context) } private fun checkAnnotationArgumentWithSubElements( @@ -248,4 +250,20 @@ object FirAnnotationExpressionChecker : FirAnnotationCallChecker() { reporter.reportOn(nameExpression.source, FirErrors.ERROR_SUPPRESSION, parameter, context) } } + + private fun checkContextFunctionTypeParams( + source: KtSourceElement?, + annotationClassId: ClassId?, + reporter: DiagnosticReporter, + context: CheckerContext, + ) { + if (context.languageVersionSettings.supportsFeature(LanguageFeature.ContextReceivers)) return + if (annotationClassId != StandardClassIds.Annotations.ContextFunctionTypeParams) return + reporter.reportOn( + source, + FirErrors.UNSUPPORTED_FEATURE, + LanguageFeature.ContextReceivers to context.languageVersionSettings, + context + ) + } } diff --git a/compiler/testData/diagnostics/tests/extensions/contextReceivers/contextReceiverTypeParamsUsageError.fir.kt b/compiler/testData/diagnostics/tests/extensions/contextReceivers/contextReceiverTypeParamsUsageError.fir.kt deleted file mode 100644 index e5eca1183f7..00000000000 --- a/compiler/testData/diagnostics/tests/extensions/contextReceivers/contextReceiverTypeParamsUsageError.fir.kt +++ /dev/null @@ -1,5 +0,0 @@ -fun f(t: @ContextFunctionTypeParams(42) T, tt: @ContextFunctionTypeParams(1) Int) {} - -fun test() { - val f: @ContextFunctionTypeParams(1) @ExtensionFunctionType (Int, String) -> Unit = {} -} \ No newline at end of file diff --git a/compiler/testData/diagnostics/tests/extensions/contextReceivers/contextReceiverTypeParamsUsageError.kt b/compiler/testData/diagnostics/tests/extensions/contextReceivers/contextReceiverTypeParamsUsageError.kt index 679fbd397d8..7faebba93e3 100644 --- a/compiler/testData/diagnostics/tests/extensions/contextReceivers/contextReceiverTypeParamsUsageError.kt +++ b/compiler/testData/diagnostics/tests/extensions/contextReceivers/contextReceiverTypeParamsUsageError.kt @@ -1,3 +1,4 @@ +// FIR_IDENTICAL fun f(t: @ContextFunctionTypeParams(42) T, tt: @ContextFunctionTypeParams(1) Int) {} fun test() {