diff --git a/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/generators/CallAndReferenceGenerator.kt b/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/generators/CallAndReferenceGenerator.kt index 88b812ce67b..6d31d02287d 100644 --- a/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/generators/CallAndReferenceGenerator.kt +++ b/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/generators/CallAndReferenceGenerator.kt @@ -505,10 +505,15 @@ class CallAndReferenceGenerator( return applyArgumentsWithReorderingIfNeeded(argumentMapping, valueParameters, substitutor, annotationMode) } } + // Case without argument mapping (deserialized annotation) + // TODO: support argument mapping in deserialized annotations and remove me for ((index, argument) in call.arguments.withIndex()) { - val valueParameter = valueParameters?.get(index) + val valueParameter = when (argument) { + is FirNamedArgumentExpression -> valueParameters?.find { it.name == argument.name } + else -> null + } ?: valueParameters?.get(index) val argumentExpression = convertArgument(argument, valueParameter, substitutor) - putValueArgument(index, argumentExpression) + putValueArgument(valueParameters?.indexOf(valueParameter)?.takeIf { it >= 0 } ?: index, argumentExpression) } } } else { diff --git a/compiler/testData/cli/jvm/firVsClassicAnnotation.out b/compiler/testData/cli/jvm/firVsClassicAnnotation.out index f23634d9e19..b2e67e607be 100644 --- a/compiler/testData/cli/jvm/firVsClassicAnnotation.out +++ b/compiler/testData/cli/jvm/firVsClassicAnnotation.out @@ -1,110 +1,4 @@ warning: ATTENTION! This build uses in-dev FIR: -Xuse-fir -exception: java.lang.IllegalStateException: Exception while evaluating constants in file firVsClassicAnnotation.kt - at org.jetbrains.kotlin.fir.backend.evaluate.IrConstTransformerKt.evaluateConstants(IrConstTransformer.kt:27) - at org.jetbrains.kotlin.fir.backend.Fir2IrConverter$Companion.createModuleFragment(Fir2IrConverter.kt:324) - at org.jetbrains.kotlin.fir.analysis.FirAnalyzerFacade.convertToIr(FirAnalyzerFacade.kt:110) - at org.jetbrains.kotlin.cli.jvm.compiler.FirKotlinToJvmBytecodeCompiler.compileModule(FirKotlinToJvmBytecodeCompiler.kt:139) - at org.jetbrains.kotlin.cli.jvm.compiler.FirKotlinToJvmBytecodeCompiler.compileModulesUsingFrontendIR(FirKotlinToJvmBytecodeCompiler.kt:110) - at org.jetbrains.kotlin.cli.jvm.compiler.KotlinToJVMBytecodeCompiler.compileModules$cli(KotlinToJVMBytecodeCompiler.kt:87) - at org.jetbrains.kotlin.cli.jvm.compiler.KotlinToJVMBytecodeCompiler.compileModules$cli$default(KotlinToJVMBytecodeCompiler.kt:60) - at org.jetbrains.kotlin.cli.jvm.K2JVMCompiler.doExecute(K2JVMCompiler.kt:170) - at org.jetbrains.kotlin.cli.jvm.K2JVMCompiler.doExecute(K2JVMCompiler.kt:52) - at org.jetbrains.kotlin.cli.common.CLICompiler.execImpl(CLICompiler.kt:92) - at org.jetbrains.kotlin.cli.common.CLICompiler.execImpl(CLICompiler.kt:44) - at org.jetbrains.kotlin.cli.common.CLITool.exec(CLITool.kt:98) - at org.jetbrains.kotlin.cli.common.CLITool.exec(CLITool.kt:76) - at org.jetbrains.kotlin.cli.common.CLITool.exec(CLITool.kt:45) - at org.jetbrains.kotlin.cli.common.CLITool$Companion.doMainNoExit(CLITool.kt:227) - at org.jetbrains.kotlin.cli.common.CLITool$Companion.doMainNoExit$default(CLITool.kt:225) - at org.jetbrains.kotlin.test.CompilerTestUtil.executeCompiler(CompilerTestUtil.kt:41) - at org.jetbrains.kotlin.cli.AbstractCliTest.executeCompilerGrabOutput(AbstractCliTest.java:73) - at org.jetbrains.kotlin.cli.AbstractCliTest.doTest(AbstractCliTest.java:105) - at org.jetbrains.kotlin.cli.AbstractCliTest.doJvmTest(AbstractCliTest.java:273) - at org.jetbrains.kotlin.test.KotlinTestUtils.lambda$testWithCustomIgnoreDirective$4(KotlinTestUtils.java:522) - at org.jetbrains.kotlin.test.KotlinTestUtils.runTestImpl(KotlinTestUtils.java:492) - at org.jetbrains.kotlin.test.KotlinTestUtils.runTest(KotlinTestUtils.java:435) - at org.jetbrains.kotlin.cli.CliTestGenerated$Jvm.runTest(CliTestGenerated.java:27) - at org.jetbrains.kotlin.cli.CliTestGenerated$Jvm.testFirVsClassicAnnotation(CliTestGenerated.java:331) - at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) - at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) - at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) - at java.lang.reflect.Method.invoke(Method.java:498) - at junit.framework.TestCase.runTest(TestCase.java:176) - at org.jetbrains.kotlin.test.testFramework.KtUsefulTestCase.lambda$runTest$5(KtUsefulTestCase.java:285) - at org.jetbrains.kotlin.test.testFramework.KtUsefulTestCase.invokeTestRunnable(KtUsefulTestCase.java:312) - at org.jetbrains.kotlin.test.testFramework.KtUsefulTestCase.runTest(KtUsefulTestCase.java:300) - at org.jetbrains.kotlin.test.testFramework.KtUsefulTestCase.defaultRunBare(KtUsefulTestCase.java:323) - at org.jetbrains.kotlin.test.testFramework.KtUsefulTestCase.runBare(KtUsefulTestCase.java:384) - at junit.framework.TestResult$1.protect(TestResult.java:122) - at junit.framework.TestResult.runProtected(TestResult.java:142) - at junit.framework.TestResult.run(TestResult.java:125) - at junit.framework.TestCase.run(TestCase.java:129) - at junit.framework.TestSuite.runTest(TestSuite.java:252) - at junit.framework.TestSuite.run(TestSuite.java:247) - at org.junit.internal.runners.JUnit38ClassRunner.run(JUnit38ClassRunner.java:86) - at org.jetbrains.kotlin.test.JUnit3RunnerWithInnersForGradle.run(JUnit3RunnerWithInnersForGradle.java:71) - at org.jetbrains.kotlin.test.JUnit3RunnerWithInners.run(JUnit3RunnerWithInners.java:54) - at org.gradle.api.internal.tasks.testing.junit.JUnitTestClassExecutor.runTestClass(JUnitTestClassExecutor.java:110) - at org.gradle.api.internal.tasks.testing.junit.JUnitTestClassExecutor.execute(JUnitTestClassExecutor.java:58) - at org.gradle.api.internal.tasks.testing.junit.JUnitTestClassExecutor.execute(JUnitTestClassExecutor.java:38) - at org.gradle.api.internal.tasks.testing.junit.AbstractJUnitTestClassProcessor.processTestClass(AbstractJUnitTestClassProcessor.java:62) - at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.processTestClass(SuiteTestClassProcessor.java:51) - at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) - at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) - at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) - at java.lang.reflect.Method.invoke(Method.java:498) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) - at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) - at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:94) - at com.sun.proxy.$Proxy2.processTestClass(Unknown Source) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.processTestClass(TestWorker.java:119) - at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) - at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) - at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) - at java.lang.reflect.Method.invoke(Method.java:498) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) - at org.gradle.internal.remote.internal.hub.MessageHubBackedObjectConnection$DispatchWrapper.dispatch(MessageHubBackedObjectConnection.java:182) - at org.gradle.internal.remote.internal.hub.MessageHubBackedObjectConnection$DispatchWrapper.dispatch(MessageHubBackedObjectConnection.java:164) - at org.gradle.internal.remote.internal.hub.MessageHub$Handler.run(MessageHub.java:414) - at org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:64) - at org.gradle.internal.concurrent.ManagedExecutorImpl$1.run(ManagedExecutorImpl.java:48) - at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) - at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) - at org.gradle.internal.concurrent.ThreadFactoryImpl$ManagedThreadRunnable.run(ThreadFactoryImpl.java:56) - at java.lang.Thread.run(Thread.java:748) -Caused by: java.lang.IllegalStateException: Exception while interpreting annotation of a declaration PROPERTY FAKE_OVERRIDE name:isNameGenerated visibility:public modality:FINAL [fake_override,val]: Property(description = 'true', ignore = , externalName = ) - at org.jetbrains.kotlin.fir.backend.evaluate.IrConstTransformer.visitDeclaration(IrConstTransformer.kt:64) - at org.jetbrains.kotlin.ir.visitors.IrElementTransformerVoid.visitProperty(IrElementTransformerVoid.kt:78) - at org.jetbrains.kotlin.ir.visitors.IrElementTransformerVoid.visitProperty(IrElementTransformerVoid.kt:79) - at org.jetbrains.kotlin.ir.visitors.IrElementTransformerVoid.visitProperty(IrElementTransformerVoid.kt:24) - at org.jetbrains.kotlin.ir.declarations.IrProperty.accept(IrProperty.kt:49) - at org.jetbrains.kotlin.ir.IrElement$DefaultImpls.transform(IrElement.kt:32) - at org.jetbrains.kotlin.ir.IrElementBase.transform(IrElementBase.kt:19) - at org.jetbrains.kotlin.ir.util.TransformKt.transformInPlace(transform.kt:35) - at org.jetbrains.kotlin.ir.declarations.IrClass.transformChildren(IrClass.kt:66) - at org.jetbrains.kotlin.ir.visitors.IrElementTransformerVoid.visitDeclaration(IrElementTransformerVoid.kt:57) - at org.jetbrains.kotlin.fir.backend.evaluate.IrConstTransformer.visitDeclaration(IrConstTransformer.kt:66) - at org.jetbrains.kotlin.ir.visitors.IrElementTransformerVoid.visitClass(IrElementTransformerVoid.kt:66) - at org.jetbrains.kotlin.ir.visitors.IrElementTransformerVoid.visitClass(IrElementTransformerVoid.kt:67) - at org.jetbrains.kotlin.ir.visitors.IrElementTransformerVoid.visitClass(IrElementTransformerVoid.kt:24) - at org.jetbrains.kotlin.ir.declarations.IrClass.accept(IrClass.kt:55) - at org.jetbrains.kotlin.ir.IrElement$DefaultImpls.transform(IrElement.kt:32) - at org.jetbrains.kotlin.ir.IrElementBase.transform(IrElementBase.kt:19) - at org.jetbrains.kotlin.ir.declarations.impl.IrFileImpl.transformChildren(IrFileImpl.kt:89) - at org.jetbrains.kotlin.fir.backend.evaluate.IrConstTransformerKt.evaluateConstants(IrConstTransformer.kt:25) - ... 73 more -Caused by: java.lang.ClassCastException: java.lang.Boolean cannot be cast to java.lang.String - at org.jetbrains.kotlin.ir.interpreter.IrTreeBuildUtilsKt.toIrConstOrNull(IrTreeBuildUtils.kt:57) - at org.jetbrains.kotlin.ir.interpreter.IrTreeBuildUtilsKt.toIrConst(IrTreeBuildUtils.kt:65) - at org.jetbrains.kotlin.fir.backend.evaluate.IrConstTransformer.convertToConstIfPossible(IrConstTransformer.kt:115) - at org.jetbrains.kotlin.fir.backend.evaluate.IrConstTransformer.transformSingleArg(IrConstTransformer.kt:105) - at org.jetbrains.kotlin.fir.backend.evaluate.IrConstTransformer.transformAnnotation(IrConstTransformer.kt:80) - at org.jetbrains.kotlin.fir.backend.evaluate.IrConstTransformer.transformAnnotations(IrConstTransformer.kt:71) - at org.jetbrains.kotlin.fir.backend.evaluate.IrConstTransformer.visitDeclaration(IrConstTransformer.kt:62) - ... 91 more - -INTERNAL_ERROR +OK