From 2fcef7af8999100ed12148ee07c176cf7765a59a Mon Sep 17 00:00:00 2001 From: Vsevolod Tolstopyatov Date: Mon, 25 Jul 2022 16:14:27 +0200 Subject: [PATCH] [FIR] Fix IrInlineBodiesHandler Validate that inline function actually is present in at least on of the modules, not in all of them. That enables support of MODULE directive in boxInline tests for FIR. Also, hide a few minor style fixes in this commit --- .../org/jetbrains/kotlin/fir/session/FirSessionFactory.kt | 1 + .../kotlin/backend/jvm/lower/EnumClassLowering.kt | 8 +++----- .../src/org/jetbrains/kotlin/backend/jvm/JvmSymbols.kt | 4 ++-- .../kotlin/test/backend/handlers/IrInlineBodiesHandler.kt | 3 +-- 4 files changed, 7 insertions(+), 9 deletions(-) diff --git a/compiler/fir/entrypoint/src/org/jetbrains/kotlin/fir/session/FirSessionFactory.kt b/compiler/fir/entrypoint/src/org/jetbrains/kotlin/fir/session/FirSessionFactory.kt index 009c4210117..0a9dd9bc9d1 100644 --- a/compiler/fir/entrypoint/src/org/jetbrains/kotlin/fir/session/FirSessionFactory.kt +++ b/compiler/fir/entrypoint/src/org/jetbrains/kotlin/fir/session/FirSessionFactory.kt @@ -197,6 +197,7 @@ object FirSessionFactory : FirAbstractSessionFactory() { } } + @OptIn(SessionConfiguration::class) @TestOnly fun createEmptySession(): FirSession { return object : FirSession(null, Kind.Source) {}.apply { diff --git a/compiler/ir/backend.jvm/lower/src/org/jetbrains/kotlin/backend/jvm/lower/EnumClassLowering.kt b/compiler/ir/backend.jvm/lower/src/org/jetbrains/kotlin/backend/jvm/lower/EnumClassLowering.kt index 1b751d0bae3..f089645181b 100644 --- a/compiler/ir/backend.jvm/lower/src/org/jetbrains/kotlin/backend/jvm/lower/EnumClassLowering.kt +++ b/compiler/ir/backend.jvm/lower/src/org/jetbrains/kotlin/backend/jvm/lower/EnumClassLowering.kt @@ -52,7 +52,7 @@ private class EnumClassLowering(private val context: JvmBackendContext) : ClassL * ``` * enum MyEnum extends Enum { * private static final synthetic MyEnum[] $VALUES - * private static final synthetic List $ENTRIES; + * private static final synthetic EnumEntries $ENTRIES; * * { * A = new MyEnum("A", 0); @@ -66,7 +66,7 @@ private class EnumClassLowering(private val context: JvmBackendContext) : ClassL * } * * // Should be RO property from Kotlin standpoint - * public static List getEntries() { + * public static EnumEntries getEntries() { * return $ENTRIES; * } * @@ -351,9 +351,7 @@ internal fun IrBuilderWithScope.irCreateEnumEntriesIndy( putValueArgument(3, irVararg(context.irBuiltIns.anyType, emptyList())) putValueArgument(4, irBoolean(false)) } - // Bind it to temp var and pass to ctor - val supplier = createTmpVariable(indyCall, "supplier") +irCall(symbols.createEnumEntries).apply { - putValueArgument(0, irGet(supplier)) + putValueArgument(0, indyCall) } }) diff --git a/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/JvmSymbols.kt b/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/JvmSymbols.kt index 8e8f1617277..17c63922fa8 100644 --- a/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/JvmSymbols.kt +++ b/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/JvmSymbols.kt @@ -55,7 +55,7 @@ class JvmSymbols( private val kotlinJvmPackage: IrPackageFragment = createPackage(FqName("kotlin.jvm")) private val kotlinJvmInternalPackage: IrPackageFragment = createPackage(FqName("kotlin.jvm.internal")) private val kotlinJvmFunctionsPackage: IrPackageFragment = createPackage(FqName("kotlin.jvm.functions")) - private val kotlinEnumPackage: IrPackageFragment = createPackage(FqName("kotlin.enums")) + private val kotlinEnumsPackage: IrPackageFragment = createPackage(FqName("kotlin.enums")) private val kotlinReflectPackage: IrPackageFragment = createPackage(FqName("kotlin.reflect")) private val javaLangPackage: IrPackageFragment = createPackage(FqName("java.lang")) private val javaLangInvokePackage: IrPackageFragment = createPackage(FqName("java.lang.invoke")) @@ -97,7 +97,7 @@ class JvmSymbols( "kotlin" -> kotlinPackage "kotlin.coroutines" -> kotlinCoroutinesPackage "kotlin.coroutines.jvm.internal" -> kotlinCoroutinesJvmInternalPackage - "kotlin.enums" -> kotlinEnumPackage + "kotlin.enums" -> kotlinEnumsPackage "kotlin.jvm.internal" -> kotlinJvmInternalPackage "kotlin.jvm.functions" -> kotlinJvmFunctionsPackage "kotlin.jvm" -> kotlinJvmPackage diff --git a/compiler/tests-common-new/tests/org/jetbrains/kotlin/test/backend/handlers/IrInlineBodiesHandler.kt b/compiler/tests-common-new/tests/org/jetbrains/kotlin/test/backend/handlers/IrInlineBodiesHandler.kt index 1fddd11c42a..f19699d5ae7 100644 --- a/compiler/tests-common-new/tests/org/jetbrains/kotlin/test/backend/handlers/IrInlineBodiesHandler.kt +++ b/compiler/tests-common-new/tests/org/jetbrains/kotlin/test/backend/handlers/IrInlineBodiesHandler.kt @@ -23,13 +23,12 @@ class IrInlineBodiesHandler(testServices: TestServices) : AbstractIrHandler(test override fun processModule(module: TestModule, info: IrBackendInput) { val irModule = info.irModuleFragment irModule.acceptChildrenVoid(InlineFunctionsCollector()) - assertions.assertTrue(declaredInlineFunctionSignatures.isNotEmpty()) irModule.acceptChildrenVoid(InlineCallBodiesCheck()) assertions.assertTrue((info as IrBackendInput.JvmIrBackendInput).backendInput.symbolTable.allUnbound.isEmpty()) } override fun processAfterAllModules(someAssertionWasFailed: Boolean) { - // TODO("Not yet implemented") + assertions.assertTrue(declaredInlineFunctionSignatures.isNotEmpty()) } inner class InlineFunctionsCollector : IrElementVisitorVoid {