From 6ae55a98cd85084e01e7d2bcc0e3c15129b2b68d Mon Sep 17 00:00:00 2001 From: Ilya Chernikov Date: Sun, 13 Mar 2022 16:22:25 +0100 Subject: [PATCH] FIR2IR: fix annotations conversion for precompiled functions fixes the case then the function being inlined is taken from the binaries compiled on the previous iteration, and therefore should be treated similarly to a fun from a library. --- .../jetbrains/kotlin/fir/backend/Fir2IrDeclarationStorage.kt | 4 +++- .../kotlin/fir/declarations/utils/FirDeclarationUtil.kt | 2 ++ 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/Fir2IrDeclarationStorage.kt b/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/Fir2IrDeclarationStorage.kt index 7f6c60f0f02..f8730952a38 100644 --- a/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/Fir2IrDeclarationStorage.kt +++ b/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/Fir2IrDeclarationStorage.kt @@ -1481,7 +1481,9 @@ class Fir2IrDeclarationStorage( private fun IrMutableAnnotationContainer.convertAnnotationsForNonDeclaredMembers( firAnnotationContainer: FirAnnotationContainer, origin: IrDeclarationOrigin, ) { - if ((firAnnotationContainer as? FirDeclaration)?.isFromLibrary == true || origin == IrDeclarationOrigin.FAKE_OVERRIDE) { + if ((firAnnotationContainer as? FirDeclaration)?.let { it.isFromLibrary || it.isPrecompiled } == true + || origin == IrDeclarationOrigin.FAKE_OVERRIDE + ) { annotationGenerator.generate(this, firAnnotationContainer) } } diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/utils/FirDeclarationUtil.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/utils/FirDeclarationUtil.kt index ad4503da99b..dc1b2aaef72 100644 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/utils/FirDeclarationUtil.kt +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/utils/FirDeclarationUtil.kt @@ -50,6 +50,8 @@ inline val FirDeclaration.isJava: Boolean get() = origin == FirDeclarationOrigin.Java inline val FirDeclaration.isFromLibrary: Boolean get() = origin == FirDeclarationOrigin.Library +inline val FirDeclaration.isPrecompiled: Boolean + get() = origin == FirDeclarationOrigin.Precompiled inline val FirDeclaration.isSynthetic: Boolean get() = origin == FirDeclarationOrigin.Synthetic