From 54285736d00b8091f6f6ef9694f9d1030c64f531 Mon Sep 17 00:00:00 2001 From: Nikolay Lunyak Date: Thu, 5 Oct 2023 16:10:05 +0300 Subject: [PATCH] [FIR] Don't miss diagnostics passed to @Suppress as `names = []` In these cases we have a `FirVarargArgumentsExpression` with a `FirNamedArgumentExpression` inside as its first argument, which, in turn, has a `FirArrayLiteral` argument. ^KT-62146 Fixed --- .../kotlin/fir/declarations/FirAnnotationUtils.kt | 5 ++++- .../diagnostics/tests/suppressNamedArg.fir.kt | 13 ------------- .../testData/diagnostics/tests/suppressNamedArg.kt | 1 + 3 files changed, 5 insertions(+), 14 deletions(-) delete mode 100644 compiler/testData/diagnostics/tests/suppressNamedArg.fir.kt diff --git a/compiler/fir/providers/src/org/jetbrains/kotlin/fir/declarations/FirAnnotationUtils.kt b/compiler/fir/providers/src/org/jetbrains/kotlin/fir/declarations/FirAnnotationUtils.kt index 6a7d3fa24c1..bc9df29af64 100644 --- a/compiler/fir/providers/src/org/jetbrains/kotlin/fir/declarations/FirAnnotationUtils.kt +++ b/compiler/fir/providers/src/org/jetbrains/kotlin/fir/declarations/FirAnnotationUtils.kt @@ -180,7 +180,10 @@ fun List.getAnnotationByClassIds(classIds: Collection, s fun FirExpression.unwrapVarargValue(): List { return when (this) { - is FirVarargArgumentsExpression -> arguments + is FirVarargArgumentsExpression -> when (val first = arguments.firstOrNull()) { + is FirWrappedArgumentExpression -> first.expression.unwrapVarargValue() + else -> arguments + } is FirArrayLiteral -> arguments else -> listOf(this) } diff --git a/compiler/testData/diagnostics/tests/suppressNamedArg.fir.kt b/compiler/testData/diagnostics/tests/suppressNamedArg.fir.kt deleted file mode 100644 index 7760743077d..00000000000 --- a/compiler/testData/diagnostics/tests/suppressNamedArg.fir.kt +++ /dev/null @@ -1,13 +0,0 @@ -// ISSUE: KT-62146 - -@Deprecated("This is deprecated", level = DeprecationLevel.WARNING) -fun deprecated() = 1 - -@Suppress("DEPRECATION") -fun main() = deprecated() - -@Suppress(names = ["DEPRECATION"]) -fun plain() = deprecated() - -@Suppress(names = arrayOf("DEPRECATION")) -fun brain() = deprecated() diff --git a/compiler/testData/diagnostics/tests/suppressNamedArg.kt b/compiler/testData/diagnostics/tests/suppressNamedArg.kt index 27e22895d0d..1a826cbe2c6 100644 --- a/compiler/testData/diagnostics/tests/suppressNamedArg.kt +++ b/compiler/testData/diagnostics/tests/suppressNamedArg.kt @@ -1,3 +1,4 @@ +// FIR_IDENTICAL // ISSUE: KT-62146 @Deprecated("This is deprecated", level = DeprecationLevel.WARNING)