diff --git a/compiler/fir/analysis-tests/testData/resolve/multifile/Annotations.txt b/compiler/fir/analysis-tests/testData/resolve/multifile/Annotations.txt index d8b1763339e..295583b8438 100644 --- a/compiler/fir/analysis-tests/testData/resolve/multifile/Annotations.txt +++ b/compiler/fir/analysis-tests/testData/resolve/multifile/Annotations.txt @@ -1,5 +1,5 @@ FILE: annotations.kt - @R|kotlin/annotation/Target|(Q|kotlin/annotation/AnnotationTarget|.R|kotlin/annotation/AnnotationTarget.FILE|, Q|kotlin/annotation/AnnotationTarget|.R|kotlin/annotation/AnnotationTarget.FUNCTION|, Q|kotlin/annotation/AnnotationTarget|.R|kotlin/annotation/AnnotationTarget.TYPE|, Q|kotlin/annotation/AnnotationTarget|.R|kotlin/annotation/AnnotationTarget.PROPERTY_GETTER|) public final annotation class Simple : R|kotlin/Annotation| { + @R|kotlin/annotation/Target|(vararg(Q|kotlin/annotation/AnnotationTarget|.R|kotlin/annotation/AnnotationTarget.FILE|, Q|kotlin/annotation/AnnotationTarget|.R|kotlin/annotation/AnnotationTarget.FUNCTION|, Q|kotlin/annotation/AnnotationTarget|.R|kotlin/annotation/AnnotationTarget.TYPE|, Q|kotlin/annotation/AnnotationTarget|.R|kotlin/annotation/AnnotationTarget.PROPERTY_GETTER|)) public final annotation class Simple : R|kotlin/Annotation| { public constructor(): R|annotations/Simple| { super() } diff --git a/compiler/fir/analysis-tests/testData/resolveWithStdlib/lowPriorityInResolution.txt b/compiler/fir/analysis-tests/testData/resolveWithStdlib/lowPriorityInResolution.txt index 1bb403859d9..8044236a67a 100644 --- a/compiler/fir/analysis-tests/testData/resolveWithStdlib/lowPriorityInResolution.txt +++ b/compiler/fir/analysis-tests/testData/resolveWithStdlib/lowPriorityInResolution.txt @@ -1,5 +1,5 @@ FILE: lowPriorityInResolution.kt - @R|kotlin/Suppress|(String(INVISIBLE_MEMBER), String(INVISIBLE_REFERENCE)) @R|kotlin/internal/LowPriorityInOverloadResolution|() public final fun foo(): R|kotlin/Int| { + @R|kotlin/Suppress|(vararg(String(INVISIBLE_MEMBER), String(INVISIBLE_REFERENCE))) @R|kotlin/internal/LowPriorityInOverloadResolution|() public final fun foo(): R|kotlin/Int| { ^foo Int(1) } public final fun foo(): R|kotlin/String| { diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/body/resolve/FirExpressionsResolveTransformer.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/body/resolve/FirExpressionsResolveTransformer.kt index 307209d5b2c..682fe6c698c 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/body/resolve/FirExpressionsResolveTransformer.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/body/resolve/FirExpressionsResolveTransformer.kt @@ -15,6 +15,7 @@ import org.jetbrains.kotlin.fir.diagnostics.DiagnosticKind import org.jetbrains.kotlin.fir.expressions.* import org.jetbrains.kotlin.fir.expressions.builder.buildErrorExpression import org.jetbrains.kotlin.fir.expressions.builder.buildFunctionCall +import org.jetbrains.kotlin.fir.expressions.builder.buildVarargArgumentsExpression import org.jetbrains.kotlin.fir.expressions.builder.buildVariableAssignment import org.jetbrains.kotlin.fir.references.* import org.jetbrains.kotlin.fir.references.builder.buildErrorNamedReference @@ -39,6 +40,7 @@ import org.jetbrains.kotlin.fir.visitors.* import org.jetbrains.kotlin.name.ClassId import org.jetbrains.kotlin.name.Name import org.jetbrains.kotlin.types.Variance +import kotlin.math.min open class FirExpressionsResolveTransformer(transformer: FirBodyResolveTransformer) : FirPartialBodyResolveTransformer(transformer) { private inline val builtinTypes: BuiltinTypes get() = session.builtinTypes @@ -692,16 +694,39 @@ open class FirExpressionsResolveTransformer(transformer: FirBodyResolveTransform // TODO: it's temporary incorrect solution until we design resolve and completion for annotation calls it.argumentList.transformArguments(integerLiteralTypeApproximator, null) annotationCall.getCorrespondingConstructorReferenceOrNull(session)?.let { calleeReference -> - val argumentMapping = - mapArguments(it.arguments, calleeReference.resolvedSymbol.fir as FirFunction<*>) - .toArgumentToParameterMapping() - it.replaceArgumentList(buildResolvedArgumentList(argumentMapping)) + val callee = calleeReference.resolvedSymbol.fir as FirFunction<*> + val argumentMapping = mapArguments(it.arguments, callee).toArgumentToParameterMapping() + val varargParameter = callee.valueParameters.firstOrNull { param -> param.isVararg } + if (varargParameter == null) { + it.replaceArgumentList(buildResolvedArgumentList(argumentMapping)) + } else { + // TODO: refactor/reuse [Candidate#handleVarargs] in [FirCallCompletionResultsWriterTransformer] + val varargParameterTypeRef = varargParameter.returnTypeRef + val arrayType = varargParameterTypeRef.coneType + val elementType = arrayType.arrayElementType() + var firstIndex = it.argumentList.arguments.size + val newArgumentMapping = mutableMapOf() + val varargArgument = buildVarargArgumentsExpression { + varargElementType = varargParameterTypeRef.withReplacedConeType(elementType) + this@buildVarargArgumentsExpression.typeRef = varargParameterTypeRef + for ((i, arg) in it.argumentList.arguments.withIndex()) { + val valueParameter = argumentMapping[arg] ?: continue + if (valueParameter.isVararg) { + firstIndex = min(firstIndex, i) + arguments += arg + } else { + newArgumentMapping[arg] = valueParameter + } + } + } + newArgumentMapping[varargArgument] = varargParameter + it.replaceArgumentList(buildResolvedArgumentList(newArgumentMapping)) + } } it.replaceResolveStatus(status) dataFlowAnalyzer.exitAnnotationCall(it) }.compose() } - } private inline fun withFirArrayOfCallTransformer(block: () -> T): T { diff --git a/compiler/testData/codegen/box/annotations/singleAssignmentToVarargInAnnotation.kt b/compiler/testData/codegen/box/annotations/singleAssignmentToVarargInAnnotation.kt index 6869a23f5e0..bfd926cbe2c 100644 --- a/compiler/testData/codegen/box/annotations/singleAssignmentToVarargInAnnotation.kt +++ b/compiler/testData/codegen/box/annotations/singleAssignmentToVarargInAnnotation.kt @@ -1,5 +1,4 @@ // !LANGUAGE: -ProhibitAssigningSingleElementsToVarargsInNamedForm -// IGNORE_BACKEND_FIR: JVM_IR // TARGET_BACKEND: JVM // WITH_RUNTIME diff --git a/compiler/testData/codegen/box/annotations/useTypeParameterAnnotationFromJava.kt b/compiler/testData/codegen/box/annotations/useTypeParameterAnnotationFromJava.kt index 4c03193dc8a..1f656d25d54 100644 --- a/compiler/testData/codegen/box/annotations/useTypeParameterAnnotationFromJava.kt +++ b/compiler/testData/codegen/box/annotations/useTypeParameterAnnotationFromJava.kt @@ -1,4 +1,3 @@ -// IGNORE_BACKEND_FIR: JVM_IR // TARGET_BACKEND: JVM // WITH_RUNTIME // FULL_JDK diff --git a/compiler/testData/codegen/box/annotations/useTypeUseAnnotationFromJava.kt b/compiler/testData/codegen/box/annotations/useTypeUseAnnotationFromJava.kt index bcd8f5d2243..800fc34202e 100644 --- a/compiler/testData/codegen/box/annotations/useTypeUseAnnotationFromJava.kt +++ b/compiler/testData/codegen/box/annotations/useTypeUseAnnotationFromJava.kt @@ -1,4 +1,3 @@ -// IGNORE_BACKEND_FIR: JVM_IR // TARGET_BACKEND: JVM // WITH_RUNTIME // FULL_JDK diff --git a/compiler/testData/codegen/box/collectionLiterals/collectionLiteralsWithVarargs.kt b/compiler/testData/codegen/box/collectionLiterals/collectionLiteralsWithVarargs.kt index 9346e62dd04..deeb5138f19 100644 --- a/compiler/testData/codegen/box/collectionLiterals/collectionLiteralsWithVarargs.kt +++ b/compiler/testData/codegen/box/collectionLiterals/collectionLiteralsWithVarargs.kt @@ -1,5 +1,5 @@ // WITH_REFLECT - +// IGNORE_BACKEND_FIR: JVM_IR // TARGET_BACKEND: JVM import java.util.Arrays diff --git a/compiler/testData/codegen/box/reflection/kClassInAnnotation/forceWrapping.kt b/compiler/testData/codegen/box/reflection/kClassInAnnotation/forceWrapping.kt index 93ecddfcaf1..d06997c45ec 100644 --- a/compiler/testData/codegen/box/reflection/kClassInAnnotation/forceWrapping.kt +++ b/compiler/testData/codegen/box/reflection/kClassInAnnotation/forceWrapping.kt @@ -1,4 +1,3 @@ -// IGNORE_BACKEND_FIR: JVM_IR // IGNORE_BACKEND: JS_IR // IGNORE_BACKEND: JS_IR_ES6 // IGNORE_BACKEND: JS, NATIVE diff --git a/compiler/testData/codegen/box/reflection/kClassInAnnotation/vararg.kt b/compiler/testData/codegen/box/reflection/kClassInAnnotation/vararg.kt index 829ce25f381..e347aac0798 100644 --- a/compiler/testData/codegen/box/reflection/kClassInAnnotation/vararg.kt +++ b/compiler/testData/codegen/box/reflection/kClassInAnnotation/vararg.kt @@ -1,4 +1,3 @@ -// IGNORE_BACKEND_FIR: JVM_IR // TARGET_BACKEND: JVM // WITH_REFLECT diff --git a/compiler/testData/codegen/box/reflection/kClassInAnnotation/wrappingForCallableReferences.kt b/compiler/testData/codegen/box/reflection/kClassInAnnotation/wrappingForCallableReferences.kt index 7fc91a71f82..ca94437326e 100644 --- a/compiler/testData/codegen/box/reflection/kClassInAnnotation/wrappingForCallableReferences.kt +++ b/compiler/testData/codegen/box/reflection/kClassInAnnotation/wrappingForCallableReferences.kt @@ -1,4 +1,3 @@ -// IGNORE_BACKEND_FIR: JVM_IR // IGNORE_BACKEND: JS_IR // IGNORE_BACKEND: JS_IR_ES6 // IGNORE_BACKEND: JS, NATIVE diff --git a/compiler/testData/ir/irText/declarations/annotations/annotationsWithVarargParameters.fir.txt b/compiler/testData/ir/irText/declarations/annotations/annotationsWithVarargParameters.fir.txt index 8237dbdddf3..6d944b63a77 100644 --- a/compiler/testData/ir/irText/declarations/annotations/annotationsWithVarargParameters.fir.txt +++ b/compiler/testData/ir/irText/declarations/annotations/annotationsWithVarargParameters.fir.txt @@ -28,12 +28,14 @@ FILE fqName: fileName:/annotationsWithVarargParameters.kt public open fun toString (): kotlin.String declared in kotlin.Any $this: VALUE_PARAMETER name: type:kotlin.Any FUN name:test1 visibility:public modality:FINAL <> () returnType:kotlin.Unit + annotations: + A(xs = ['abc', 'def']) BLOCK_BODY FUN name:test2 visibility:public modality:FINAL <> () returnType:kotlin.Unit annotations: - A(xs = 'abc') + A(xs = ['abc']) BLOCK_BODY FUN name:test3 visibility:public modality:FINAL <> () returnType:kotlin.Unit annotations: - A(xs = ) + A(xs = []) BLOCK_BODY diff --git a/compiler/testData/ir/irText/declarations/annotations/fileAnnotations.fir.txt b/compiler/testData/ir/irText/declarations/annotations/fileAnnotations.fir.txt index 594ef100ab1..90b5a715de1 100644 --- a/compiler/testData/ir/irText/declarations/annotations/fileAnnotations.fir.txt +++ b/compiler/testData/ir/irText/declarations/annotations/fileAnnotations.fir.txt @@ -3,7 +3,7 @@ FILE fqName:test fileName:/fileAnnotations.kt A(x = 'File annotation') CLASS ANNOTATION_CLASS name:A modality:FINAL visibility:public superTypes:[kotlin.Annotation] annotations: - Target(allowedTargets = GET_ENUM 'ENUM_ENTRY IR_EXTERNAL_DECLARATION_STUB name:FILE' type=kotlin.annotation.AnnotationTarget) + Target(allowedTargets = [GET_ENUM 'ENUM_ENTRY IR_EXTERNAL_DECLARATION_STUB name:FILE' type=kotlin.annotation.AnnotationTarget]) $this: VALUE_PARAMETER INSTANCE_RECEIVER name: type:test.A CONSTRUCTOR visibility:public <> (x:kotlin.String) returnType:test.A [primary] VALUE_PARAMETER name:x index:0 type:kotlin.String diff --git a/compiler/testData/ir/irText/declarations/annotations/spreadOperatorInAnnotationArguments.fir.txt b/compiler/testData/ir/irText/declarations/annotations/spreadOperatorInAnnotationArguments.fir.txt index 912d147b3c9..11bd3b3f236 100644 --- a/compiler/testData/ir/irText/declarations/annotations/spreadOperatorInAnnotationArguments.fir.txt +++ b/compiler/testData/ir/irText/declarations/annotations/spreadOperatorInAnnotationArguments.fir.txt @@ -28,4 +28,6 @@ FILE fqName: fileName:/spreadOperatorInAnnotationArguments.kt public open fun toString (): kotlin.String declared in kotlin.Any $this: VALUE_PARAMETER name: type:kotlin.Any FUN name:test visibility:public modality:FINAL <> () returnType:kotlin.Unit + annotations: + A(xs = [SPREAD_ELEMENT, SPREAD_ELEMENT]) BLOCK_BODY diff --git a/compiler/testData/ir/irText/declarations/annotations/typeAliasesWithAnnotations.fir.txt b/compiler/testData/ir/irText/declarations/annotations/typeAliasesWithAnnotations.fir.txt index 3739f1650de..f0e6e604deb 100644 --- a/compiler/testData/ir/irText/declarations/annotations/typeAliasesWithAnnotations.fir.txt +++ b/compiler/testData/ir/irText/declarations/annotations/typeAliasesWithAnnotations.fir.txt @@ -2,7 +2,7 @@ FILE fqName: fileName:/typeAliasesWithAnnotations.kt TYPEALIAS name:TestTypeAlias visibility:public expandedType:kotlin.String CLASS ANNOTATION_CLASS name:TestAnn modality:FINAL visibility:public superTypes:[kotlin.Annotation] annotations: - Target(allowedTargets = GET_ENUM 'ENUM_ENTRY IR_EXTERNAL_DECLARATION_STUB name:TYPEALIAS' type=kotlin.annotation.AnnotationTarget) + Target(allowedTargets = [GET_ENUM 'ENUM_ENTRY IR_EXTERNAL_DECLARATION_STUB name:TYPEALIAS' type=kotlin.annotation.AnnotationTarget]) $this: VALUE_PARAMETER INSTANCE_RECEIVER name: type:.TestAnn CONSTRUCTOR visibility:public <> (x:kotlin.String) returnType:.TestAnn [primary] VALUE_PARAMETER name:x index:0 type:kotlin.String diff --git a/compiler/testData/ir/irText/declarations/annotations/typeParametersWithAnnotations.fir.txt b/compiler/testData/ir/irText/declarations/annotations/typeParametersWithAnnotations.fir.txt index d7eef04bd13..6dfe0bee4e2 100644 --- a/compiler/testData/ir/irText/declarations/annotations/typeParametersWithAnnotations.fir.txt +++ b/compiler/testData/ir/irText/declarations/annotations/typeParametersWithAnnotations.fir.txt @@ -1,7 +1,7 @@ FILE fqName: fileName:/typeParametersWithAnnotations.kt CLASS ANNOTATION_CLASS name:Anno modality:FINAL visibility:public superTypes:[kotlin.Annotation] annotations: - Target(allowedTargets = GET_ENUM 'ENUM_ENTRY IR_EXTERNAL_DECLARATION_STUB name:TYPE_PARAMETER' type=kotlin.annotation.AnnotationTarget) + Target(allowedTargets = [GET_ENUM 'ENUM_ENTRY IR_EXTERNAL_DECLARATION_STUB name:TYPE_PARAMETER' type=kotlin.annotation.AnnotationTarget]) $this: VALUE_PARAMETER INSTANCE_RECEIVER name: type:.Anno CONSTRUCTOR visibility:public <> () returnType:.Anno [primary] FUN FAKE_OVERRIDE name:equals visibility:public modality:OPEN <> ($this:kotlin.Any, other:kotlin.Any?) returnType:kotlin.Boolean [fake_override,operator] diff --git a/compiler/testData/ir/irText/declarations/annotations/varargsInAnnotationArguments.fir.txt b/compiler/testData/ir/irText/declarations/annotations/varargsInAnnotationArguments.fir.txt index 6f202169e11..ee0ab3b4832 100644 --- a/compiler/testData/ir/irText/declarations/annotations/varargsInAnnotationArguments.fir.txt +++ b/compiler/testData/ir/irText/declarations/annotations/varargsInAnnotationArguments.fir.txt @@ -84,10 +84,14 @@ FILE fqName: fileName:/varargsInAnnotationArguments.kt public open fun toString (): kotlin.String declared in kotlin.Any $this: VALUE_PARAMETER name: type:kotlin.Any FUN name:test1 visibility:public modality:FINAL <> () returnType:kotlin.Unit + annotations: + A1(xs = ['1', '2', '3']) + A2(xs = ['a', 'b', 'c']) + AA(xs = [A1(xs = ['4']), A1(xs = ['5']), A1(xs = ['6'])]) BLOCK_BODY FUN name:test2 visibility:public modality:FINAL <> () returnType:kotlin.Unit annotations: - A1(xs = ) - A2(xs = ) - AA(xs = ) + A1(xs = []) + A2(xs = []) + AA(xs = []) BLOCK_BODY diff --git a/compiler/testData/ir/irText/types/castsInsideCoroutineInference.fir.txt b/compiler/testData/ir/irText/types/castsInsideCoroutineInference.fir.txt index bd647055ea4..a49164ec9d3 100644 --- a/compiler/testData/ir/irText/types/castsInsideCoroutineInference.fir.txt +++ b/compiler/testData/ir/irText/types/castsInsideCoroutineInference.fir.txt @@ -1,7 +1,7 @@ FILE fqName: fileName:/castsInsideCoroutineInference.kt FUN name:scopedFlow visibility:public modality:FINAL (block:kotlin.coroutines.SuspendFunction2<.CoroutineScope, .FlowCollector.scopedFlow>, kotlin.Unit>) returnType:.Flow.scopedFlow> annotations: - OptIn(markerClass = CLASS_REFERENCE 'CLASS IR_EXTERNAL_DECLARATION_STUB ANNOTATION_CLASS name:ExperimentalTypeInference modality:FINAL visibility:public superTypes:[kotlin.Annotation]' type=kotlin.reflect.KClass) + OptIn(markerClass = [CLASS_REFERENCE 'CLASS IR_EXTERNAL_DECLARATION_STUB ANNOTATION_CLASS name:ExperimentalTypeInference modality:FINAL visibility:public superTypes:[kotlin.Annotation]' type=kotlin.reflect.KClass]) TYPE_PARAMETER name:R index:0 variance: superTypes:[kotlin.Any?] VALUE_PARAMETER name:block index:0 type:kotlin.coroutines.SuspendFunction2<.CoroutineScope, .FlowCollector.scopedFlow>, kotlin.Unit> annotations: @@ -53,7 +53,7 @@ FILE fqName: fileName:/castsInsideCoroutineInference.kt BLOCK_BODY FUN name:unsafeFlow visibility:public modality:FINAL (block:kotlin.coroutines.SuspendFunction1<.FlowCollector.unsafeFlow>, kotlin.Unit>) returnType:.Flow.unsafeFlow> [inline] annotations: - OptIn(markerClass = CLASS_REFERENCE 'CLASS IR_EXTERNAL_DECLARATION_STUB ANNOTATION_CLASS name:ExperimentalTypeInference modality:FINAL visibility:public superTypes:[kotlin.Annotation]' type=kotlin.reflect.KClass) + OptIn(markerClass = [CLASS_REFERENCE 'CLASS IR_EXTERNAL_DECLARATION_STUB ANNOTATION_CLASS name:ExperimentalTypeInference modality:FINAL visibility:public superTypes:[kotlin.Annotation]' type=kotlin.reflect.KClass]) TYPE_PARAMETER name:T index:0 variance: superTypes:[kotlin.Any?] VALUE_PARAMETER name:block index:0 type:kotlin.coroutines.SuspendFunction1<.FlowCollector.unsafeFlow>, kotlin.Unit> [crossinline] annotations: @@ -191,7 +191,7 @@ FILE fqName: fileName:/castsInsideCoroutineInference.kt $this: VALUE_PARAMETER name: type:kotlin.Any FUN name:flow visibility:public modality:FINAL (block:kotlin.coroutines.SuspendFunction1<.FlowCollector.flow>, kotlin.Unit>) returnType:.Flow.flow> annotations: - OptIn(markerClass = CLASS_REFERENCE 'CLASS IR_EXTERNAL_DECLARATION_STUB ANNOTATION_CLASS name:ExperimentalTypeInference modality:FINAL visibility:public superTypes:[kotlin.Annotation]' type=kotlin.reflect.KClass) + OptIn(markerClass = [CLASS_REFERENCE 'CLASS IR_EXTERNAL_DECLARATION_STUB ANNOTATION_CLASS name:ExperimentalTypeInference modality:FINAL visibility:public superTypes:[kotlin.Annotation]' type=kotlin.reflect.KClass]) TYPE_PARAMETER name:T index:0 variance: superTypes:[kotlin.Any?] VALUE_PARAMETER name:block index:0 type:kotlin.coroutines.SuspendFunction1<.FlowCollector.flow>, kotlin.Unit> annotations: @@ -201,7 +201,7 @@ FILE fqName: fileName:/castsInsideCoroutineInference.kt CALL 'public final fun TODO (): kotlin.Nothing [inline] declared in kotlin' type=kotlin.Nothing origin=null FUN name:flowScope visibility:public modality:FINAL (block:kotlin.coroutines.SuspendFunction1<.CoroutineScope, R of .flowScope>) returnType:R of .flowScope [suspend] annotations: - OptIn(markerClass = CLASS_REFERENCE 'CLASS IR_EXTERNAL_DECLARATION_STUB ANNOTATION_CLASS name:ExperimentalTypeInference modality:FINAL visibility:public superTypes:[kotlin.Annotation]' type=kotlin.reflect.KClass) + OptIn(markerClass = [CLASS_REFERENCE 'CLASS IR_EXTERNAL_DECLARATION_STUB ANNOTATION_CLASS name:ExperimentalTypeInference modality:FINAL visibility:public superTypes:[kotlin.Annotation]' type=kotlin.reflect.KClass]) TYPE_PARAMETER name:R index:0 variance: superTypes:[kotlin.Any?] VALUE_PARAMETER name:block index:0 type:kotlin.coroutines.SuspendFunction1<.CoroutineScope, R of .flowScope> annotations: @@ -309,7 +309,7 @@ FILE fqName: fileName:/castsInsideCoroutineInference.kt $this: VALUE_PARAMETER name: type:kotlin.Any FUN name:produce visibility:public modality:FINAL ($receiver:.CoroutineScope, block:kotlin.coroutines.SuspendFunction1<.ProducerScope.produce>, kotlin.Unit>) returnType:.ReceiveChannel.produce> annotations: - OptIn(markerClass = CLASS_REFERENCE 'CLASS IR_EXTERNAL_DECLARATION_STUB ANNOTATION_CLASS name:ExperimentalTypeInference modality:FINAL visibility:public superTypes:[kotlin.Annotation]' type=kotlin.reflect.KClass) + OptIn(markerClass = [CLASS_REFERENCE 'CLASS IR_EXTERNAL_DECLARATION_STUB ANNOTATION_CLASS name:ExperimentalTypeInference modality:FINAL visibility:public superTypes:[kotlin.Annotation]' type=kotlin.reflect.KClass]) TYPE_PARAMETER name:E index:0 variance: superTypes:[kotlin.Any?] $receiver: VALUE_PARAMETER name: type:.CoroutineScope VALUE_PARAMETER name:block index:0 type:kotlin.coroutines.SuspendFunction1<.ProducerScope.produce>, kotlin.Unit>