From 212c3e8d51aa9a056a6cc7a601f1d463a680da32 Mon Sep 17 00:00:00 2001 From: Mikhail Glukhikh Date: Thu, 23 Sep 2021 19:09:48 +0300 Subject: [PATCH] FIR: fix OPT_IN_MARKER_ON_WRONG_TARGET for constructor properties --- .../declaration/FirOptInMarkedDeclarationChecker.kt | 3 ++- .../incorrectTargetsForExperimentalAnnotation.kt | 2 ++ .../incorrectTargetsForExperimentalAnnotation.txt | 8 ++++++++ 3 files changed, 12 insertions(+), 1 deletion(-) diff --git a/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/declaration/FirOptInMarkedDeclarationChecker.kt b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/declaration/FirOptInMarkedDeclarationChecker.kt index 953626736b6..04e226ddb14 100644 --- a/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/declaration/FirOptInMarkedDeclarationChecker.kt +++ b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/declaration/FirOptInMarkedDeclarationChecker.kt @@ -29,7 +29,8 @@ object FirOptInMarkedDeclarationChecker : FirAnnotatedDeclarationChecker() { reporter.reportOn(annotation.source, FirErrors.OPT_IN_MARKER_ON_WRONG_TARGET, "getter", context) } if (useSiteTarget == SETTER_PARAMETER || - declaration is FirValueParameter && KotlinTarget.VALUE_PARAMETER in annotationClass.getAllowedAnnotationTargets() + (useSiteTarget != PROPERTY && declaration is FirValueParameter && + KotlinTarget.VALUE_PARAMETER in annotationClass.getAllowedAnnotationTargets()) ) { reporter.reportOn(annotation.source, FirErrors.OPT_IN_MARKER_ON_WRONG_TARGET, "parameter", context) } diff --git a/compiler/testData/diagnostics/testsWithStdLib/experimental/incorrectTargetsForExperimentalAnnotation.kt b/compiler/testData/diagnostics/testsWithStdLib/experimental/incorrectTargetsForExperimentalAnnotation.kt index 59f7c7c826e..8d59c3032fe 100644 --- a/compiler/testData/diagnostics/testsWithStdLib/experimental/incorrectTargetsForExperimentalAnnotation.kt +++ b/compiler/testData/diagnostics/testsWithStdLib/experimental/incorrectTargetsForExperimentalAnnotation.kt @@ -85,6 +85,8 @@ class Derived : Base { override fun @receiver:E6 String.withReceiver() {} } +class Wrapper(@property:E6 val foo: Int) + @E6 interface BaseMarked { val bar: Int diff --git a/compiler/testData/diagnostics/testsWithStdLib/experimental/incorrectTargetsForExperimentalAnnotation.txt b/compiler/testData/diagnostics/testsWithStdLib/experimental/incorrectTargetsForExperimentalAnnotation.txt index f00063d4105..b53679e328c 100644 --- a/compiler/testData/diagnostics/testsWithStdLib/experimental/incorrectTargetsForExperimentalAnnotation.txt +++ b/compiler/testData/diagnostics/testsWithStdLib/experimental/incorrectTargetsForExperimentalAnnotation.txt @@ -159,6 +159,14 @@ package api { } } + public final class Wrapper { + public constructor Wrapper(/*0*/ foo: kotlin.Int) + @api.E6 public final val foo: kotlin.Int + public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean + public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int + public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String + } + public final class X1 : api.C1 { public constructor X1() public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean