diff --git a/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/collectors/AbstractDiagnosticCollectorVisitor.kt b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/collectors/AbstractDiagnosticCollectorVisitor.kt index 2f9b3d420ce..35ac745485a 100644 --- a/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/collectors/AbstractDiagnosticCollectorVisitor.kt +++ b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/collectors/AbstractDiagnosticCollectorVisitor.kt @@ -13,10 +13,13 @@ import org.jetbrains.kotlin.fir.analysis.checkers.declaration.createInlineFuncti import org.jetbrains.kotlin.fir.contracts.FirContractDescription import org.jetbrains.kotlin.fir.declarations.* import org.jetbrains.kotlin.fir.declarations.builder.buildReceiverParameter +import org.jetbrains.kotlin.fir.declarations.utils.correspondingValueParameterFromPrimaryConstructor import org.jetbrains.kotlin.fir.declarations.utils.isInline import org.jetbrains.kotlin.fir.expressions.* import org.jetbrains.kotlin.fir.expressions.impl.FirContractCallBlock import org.jetbrains.kotlin.fir.resolve.defaultType +import org.jetbrains.kotlin.fir.symbols.SymbolInternals +import org.jetbrains.kotlin.fir.symbols.lazyResolveToPhase import org.jetbrains.kotlin.fir.types.* import org.jetbrains.kotlin.fir.types.builder.buildResolvedTypeRef import org.jetbrains.kotlin.fir.visitors.FirDefaultVisitor @@ -141,8 +144,10 @@ abstract class AbstractDiagnosticCollectorVisitor( } override fun visitProperty(property: FirProperty, data: Nothing?) { - withAnnotationContainer(property) { - visitWithDeclaration(property) + withPotentialPropertyFromPrimaryConstructor(property) { + withAnnotationContainer(property) { + visitWithDeclaration(property) + } } } @@ -442,6 +447,21 @@ abstract class AbstractDiagnosticCollectorVisitor( } } + @OptIn(PrivateForInline::class) + inline fun withPotentialPropertyFromPrimaryConstructor(property: FirProperty, block: () -> R): R { + val existingContext = context + property.correspondingValueParameterFromPrimaryConstructor?.let { + it.lazyResolveToPhase(FirResolvePhase.ANNOTATION_ARGUMENTS) + @OptIn(SymbolInternals::class) + addSuppressedDiagnosticsToContext(it.fir) + } + return try { + block() + } finally { + context = existingContext + } + } + @OptIn(PrivateForInline::class) private inline fun suppressInlineFunctionBodyContext(block: () -> R): R { val oldInlineFunctionBodyContext = context.inlineFunctionBodyContext?.also { diff --git a/compiler/testData/diagnostics/tests/suppress/oneWarning/optInDiagnosticOnPropertyGetter.fir.kt b/compiler/testData/diagnostics/tests/suppress/oneWarning/optInDiagnosticOnPropertyGetter.fir.kt deleted file mode 100644 index bbc416bd2be..00000000000 --- a/compiler/testData/diagnostics/tests/suppress/oneWarning/optInDiagnosticOnPropertyGetter.fir.kt +++ /dev/null @@ -1,18 +0,0 @@ -// DIAGNOSTICS: -ERROR_SUPPRESSION -// WITH_STDLIB -// ISSUE: KT-66258 - -@RequiresOptIn -annotation class Ann - -class A( - @get:Ann - @Suppress("OPT_IN_MARKER_ON_WRONG_TARGET") - val s: String -) - -class B { - @get:Ann - @Suppress("OPT_IN_MARKER_ON_WRONG_TARGET") - val s: String = "" -} diff --git a/compiler/testData/diagnostics/tests/suppress/oneWarning/optInDiagnosticOnPropertyGetter.kt b/compiler/testData/diagnostics/tests/suppress/oneWarning/optInDiagnosticOnPropertyGetter.kt index 2ee1ba356a4..05b71de131a 100644 --- a/compiler/testData/diagnostics/tests/suppress/oneWarning/optInDiagnosticOnPropertyGetter.kt +++ b/compiler/testData/diagnostics/tests/suppress/oneWarning/optInDiagnosticOnPropertyGetter.kt @@ -1,3 +1,4 @@ +// FIR_IDENTICAL // DIAGNOSTICS: -ERROR_SUPPRESSION // WITH_STDLIB // ISSUE: KT-66258