From 6d3b911dfc906353f27be610d1c989c9eabfb7db Mon Sep 17 00:00:00 2001 From: Kirill Rakhman Date: Wed, 26 Apr 2023 11:00:03 +0200 Subject: [PATCH] [K2/Native] Configure metadata compilation mode This fixes access to internal declarations in common source sets from intermediate source sets that are compiled to metadata. #KT-58219 Fixed --- .../cli/common/FirSessionConstructionUtils.kt | 3 +- .../kotlin/backend/konan/FirFrontend.kt | 12 ++++++-- .../org/jetbrains/kotlin/gradle/K2Tests.kt | 12 ++++++++ .../build.gradle.kts | 28 +++++++++++++++++++ .../src/commonMain/kotlin/Main.common.kt | 1 + .../src/nativeMain/kotlin/Main.native.kt | 3 ++ 6 files changed, 56 insertions(+), 3 deletions(-) create mode 100644 libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/k2-native-intermediate-metadata/build.gradle.kts create mode 100644 libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/k2-native-intermediate-metadata/src/commonMain/kotlin/Main.common.kt create mode 100644 libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/k2-native-intermediate-metadata/src/nativeMain/kotlin/Main.native.kt diff --git a/compiler/cli/src/org/jetbrains/kotlin/cli/common/FirSessionConstructionUtils.kt b/compiler/cli/src/org/jetbrains/kotlin/cli/common/FirSessionConstructionUtils.kt index a8dd22a652b..20f8186ff77 100644 --- a/compiler/cli/src/org/jetbrains/kotlin/cli/common/FirSessionConstructionUtils.kt +++ b/compiler/cli/src/org/jetbrains/kotlin/cli/common/FirSessionConstructionUtils.kt @@ -159,13 +159,14 @@ fun prepareNativeSessions( resolvedLibraries: List, libraryList: DependencyListForCliModule, extensionRegistrars: List, + metadataCompilationMode: Boolean, isCommonSource: (F) -> Boolean, fileBelongsToModule: (F, String) -> Boolean, registerExtraComponents: ((FirSession) -> Unit) = {}, ): List> { return prepareSessions( files, configuration, rootModuleName, NativePlatforms.unspecifiedNativePlatform, NativePlatformAnalyzerServices, - metadataCompilationMode = false, libraryList, isCommonSource, fileBelongsToModule, createLibrarySession = { sessionProvider -> + metadataCompilationMode, libraryList, isCommonSource, fileBelongsToModule, createLibrarySession = { sessionProvider -> FirNativeSessionFactory.createLibrarySession( rootModuleName, resolvedLibraries, diff --git a/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/FirFrontend.kt b/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/FirFrontend.kt index 035cdf33732..fbaa7357147 100644 --- a/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/FirFrontend.kt +++ b/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/FirFrontend.kt @@ -49,13 +49,21 @@ internal fun PhaseContext.firFrontend(input: KotlinCoreEnvironment): FirOutput { dependencies(interopModuleData, interopLibs.map { it.libraryFile.absolutePath }) } friendDependencies(config.friendModuleFiles.map { it.absolutePath }) + dependsOnDependencies(config.refinesModuleFiles.map { it.absolutePath }) // TODO: !!! dependencies module data? } val resolvedLibraries: List = config.resolvedLibraries.getFullResolvedList() val sessionsWithSources = prepareNativeSessions( - ktFiles, configuration, mainModuleName, resolvedLibraries, dependencyList, - extensionRegistrars, isCommonSourceForPsi, fileBelongsToModuleForPsi, + ktFiles, + configuration, + mainModuleName, + resolvedLibraries, + dependencyList, + extensionRegistrars, + metadataCompilationMode = configuration.get(KonanConfigKeys.METADATA_KLIB) ?: false, + isCommonSourceForPsi, + fileBelongsToModuleForPsi, registerExtraComponents = { it.register(FirOverrideChecker::class, FirNativeOverrideChecker(it)) }, diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/K2Tests.kt b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/K2Tests.kt index c54a9f0978d..8a295cf4bcd 100644 --- a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/K2Tests.kt +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/K2Tests.kt @@ -62,4 +62,16 @@ class CustomK2Tests : KGPBaseTest() { } } } + + @Disabled("disable until kotlin/native dependency is updated to include KT-58219") + @GradleTest + @DisplayName("Native metadata of intermediate with reference to internal in common. KT-58219") + fun nativeMetadataOfIntermediateWithReferenceToInternalInCommon(gradleVersion: GradleVersion) { + with(project("k2-native-intermediate-metadata", gradleVersion, buildOptions = defaultBuildOptions.copy(languageVersion = "2.0"))) { + val taskToExecute = ":compileNativeMainKotlinMetadata" + build(taskToExecute) { + assertTasksExecuted(taskToExecute) + } + } + } } diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/k2-native-intermediate-metadata/build.gradle.kts b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/k2-native-intermediate-metadata/build.gradle.kts new file mode 100644 index 00000000000..8c4d7ee8241 --- /dev/null +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/k2-native-intermediate-metadata/build.gradle.kts @@ -0,0 +1,28 @@ +import org.jetbrains.kotlin.gradle.dsl.KotlinVersion +import org.jetbrains.kotlin.gradle.tasks.KotlinCompilationTask + +group = "test" +version = "1.0" + +plugins { + kotlin("multiplatform") +} + +repositories { + mavenLocal() + mavenCentral() +} + +kotlin { + targetHierarchy.default() + linuxX64() + macosX64() + macosArm64() + mingwX64() +} + +tasks.withType>().configureEach { + compilerOptions { + freeCompilerArgs.add("-Xrender-internal-diagnostic-names") + } +} \ No newline at end of file diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/k2-native-intermediate-metadata/src/commonMain/kotlin/Main.common.kt b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/k2-native-intermediate-metadata/src/commonMain/kotlin/Main.common.kt new file mode 100644 index 00000000000..685709b334b --- /dev/null +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/k2-native-intermediate-metadata/src/commonMain/kotlin/Main.common.kt @@ -0,0 +1 @@ +internal object Symbol \ No newline at end of file diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/k2-native-intermediate-metadata/src/nativeMain/kotlin/Main.native.kt b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/k2-native-intermediate-metadata/src/nativeMain/kotlin/Main.native.kt new file mode 100644 index 00000000000..c9115b22d70 --- /dev/null +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/k2-native-intermediate-metadata/src/nativeMain/kotlin/Main.native.kt @@ -0,0 +1,3 @@ +fun foo() { + Symbol +} \ No newline at end of file