From e789e08fb75bad99be8130005c4205095df03983 Mon Sep 17 00:00:00 2001 From: "Anastasia.Nekrasova" Date: Tue, 24 Oct 2023 09:27:25 +0300 Subject: [PATCH] [K2] Disappeared FORBIDDEN_VARARG_PARAMETER_TYPE ^KT-59991 --- .../FirFunctionParameterChecker.kt | 6 +++- ...arargsOnParametersOfInlineClassType.fir.kt | 21 -------------- .../varargsOnParametersOfInlineClassType.kt | 1 + ...varargsOnParametersOfValueClassType.fir.kt | 28 ------------------- .../varargsOnParametersOfValueClassType.kt | 2 ++ 5 files changed, 8 insertions(+), 50 deletions(-) delete mode 100644 compiler/testData/diagnostics/tests/inlineClasses/varargsOnParametersOfInlineClassType.fir.kt delete mode 100644 compiler/testData/diagnostics/tests/valueClasses/varargsOnParametersOfValueClassType.fir.kt diff --git a/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/declaration/FirFunctionParameterChecker.kt b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/declaration/FirFunctionParameterChecker.kt index 2ee138252fb..34feabbba3b 100644 --- a/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/declaration/FirFunctionParameterChecker.kt +++ b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/declaration/FirFunctionParameterChecker.kt @@ -62,7 +62,11 @@ object FirFunctionParameterChecker : FirFunctionChecker() { } for (varargParameter in varargParameters) { - val varargParameterType = varargParameter.returnTypeRef.coneType.arrayElementType() ?: continue + val coneType = varargParameter.returnTypeRef.coneType + val varargParameterType = when (function) { + is FirAnonymousFunction -> coneType + else -> coneType.arrayElementType() + } ?: continue // LUB is checked to ensure varargParameterType may // never be anything except `Nothing` or `Nothing?` // in case it is a complex type that quantifies diff --git a/compiler/testData/diagnostics/tests/inlineClasses/varargsOnParametersOfInlineClassType.fir.kt b/compiler/testData/diagnostics/tests/inlineClasses/varargsOnParametersOfInlineClassType.fir.kt deleted file mode 100644 index 938e265af68..00000000000 --- a/compiler/testData/diagnostics/tests/inlineClasses/varargsOnParametersOfInlineClassType.fir.kt +++ /dev/null @@ -1,21 +0,0 @@ -// !LANGUAGE: +InlineClasses, -JvmInlineValueClasses -// !DIAGNOSTICS: -UNUSED_PARAMETER, -UNUSED_VARIABLE, -UNUSED_ANONYMOUS_PARAMETER - -inline class Foo(val x: Int) - -fun f1(vararg a: Foo) {} -fun f2(vararg a: Foo?) {} - -class A { - fun f3(a0: Int, vararg a1: Foo) { - fun f4(vararg a: Foo) {} - - val g = fun (vararg v: Foo) {} - } -} - -class B(vararg val s: Foo) { - constructor(a: Int, vararg s: Foo) : this(*s) -} - -annotation class Ann(vararg val f: Foo) diff --git a/compiler/testData/diagnostics/tests/inlineClasses/varargsOnParametersOfInlineClassType.kt b/compiler/testData/diagnostics/tests/inlineClasses/varargsOnParametersOfInlineClassType.kt index 456a4ef3157..7fbf02cf33d 100644 --- a/compiler/testData/diagnostics/tests/inlineClasses/varargsOnParametersOfInlineClassType.kt +++ b/compiler/testData/diagnostics/tests/inlineClasses/varargsOnParametersOfInlineClassType.kt @@ -1,3 +1,4 @@ +// FIR_IDENTICAL // !LANGUAGE: +InlineClasses, -JvmInlineValueClasses // !DIAGNOSTICS: -UNUSED_PARAMETER, -UNUSED_VARIABLE, -UNUSED_ANONYMOUS_PARAMETER diff --git a/compiler/testData/diagnostics/tests/valueClasses/varargsOnParametersOfValueClassType.fir.kt b/compiler/testData/diagnostics/tests/valueClasses/varargsOnParametersOfValueClassType.fir.kt deleted file mode 100644 index cdcc85b73f5..00000000000 --- a/compiler/testData/diagnostics/tests/valueClasses/varargsOnParametersOfValueClassType.fir.kt +++ /dev/null @@ -1,28 +0,0 @@ -// !SKIP_JAVAC -// !LANGUAGE: +InlineClasses -// ALLOW_KOTLIN_PACKAGE -// !DIAGNOSTICS: -UNUSED_PARAMETER, -UNUSED_VARIABLE, -UNUSED_ANONYMOUS_PARAMETER - -package kotlin.jvm - -annotation class JvmInline - -@JvmInline -value class Foo(val x: Int) - -fun f1(vararg a: Foo) {} -fun f2(vararg a: Foo?) {} - -class A { - fun f3(a0: Int, vararg a1: Foo) { - fun f4(vararg a: Foo) {} - - val g = fun (vararg v: Foo) {} - } -} - -class B(vararg val s: Foo) { - constructor(a: Int, vararg s: Foo) : this(*s) -} - -annotation class Ann(vararg val f: Foo) diff --git a/compiler/testData/diagnostics/tests/valueClasses/varargsOnParametersOfValueClassType.kt b/compiler/testData/diagnostics/tests/valueClasses/varargsOnParametersOfValueClassType.kt index fe238bb0817..2d069f2e291 100644 --- a/compiler/testData/diagnostics/tests/valueClasses/varargsOnParametersOfValueClassType.kt +++ b/compiler/testData/diagnostics/tests/valueClasses/varargsOnParametersOfValueClassType.kt @@ -1,3 +1,4 @@ +// FIR_IDENTICAL // !SKIP_JAVAC // !LANGUAGE: +InlineClasses // ALLOW_KOTLIN_PACKAGE @@ -18,6 +19,7 @@ class A { fun f4(vararg a: Foo) {} val g = fun (vararg v: Foo) {} + fun (vararg v: Foo) {} } }