diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/KotlinCompilationInfo.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/KotlinCompilationInfo.kt index 5b6a1ee4a9a..fdc16987585 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/KotlinCompilationInfo.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/KotlinCompilationInfo.kt @@ -11,7 +11,7 @@ import org.gradle.api.Project import org.gradle.api.file.ConfigurableFileCollection import org.gradle.api.file.FileCollection import org.gradle.api.file.SourceDirectorySet -import org.jetbrains.kotlin.gradle.dsl.multiplatformExtensionOrNull +import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinMetadataTarget import org.jetbrains.kotlin.gradle.plugin.mpp.internal import org.jetbrains.kotlin.gradle.plugin.mpp.isMain import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.GradleKpmAbstractFragmentMetadataCompilationData @@ -76,7 +76,7 @@ internal sealed class KotlinCompilationInfo { override val refinesPaths: FileCollection get() = project.filesProvider files@{ - val metadataTarget = project.multiplatformExtensionOrNull?.metadata() ?: return@files emptyList() + val metadataTarget = origin.target as? KotlinMetadataTarget ?: return@files emptyList() origin.kotlinSourceSets.dependsOnClosure .mapNotNull { sourceSet -> metadataTarget.compilations.findByName(sourceSet.name)?.output?.classesDirs } } diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/native/tasks/KotlinNativeTasks.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/native/tasks/KotlinNativeTasks.kt index 645622d0c28..1cde8a192b7 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/native/tasks/KotlinNativeTasks.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/native/tasks/KotlinNativeTasks.kt @@ -179,10 +179,10 @@ abstract class AbstractKotlinNativeCompile< ) @get:Classpath - protected val friendModule: FileCollection = project.files({ compilation.friendPaths }) + internal val friendModule: FileCollection = project.files({ compilation.friendPaths }) @get:Classpath - protected val refinesModule: FileCollection = project.files({ compilation.refinesPaths }) + internal val refinesModule: FileCollection = project.files({ compilation.refinesPaths }) @get:Input val target: String by project.provider { konanTarget.name } diff --git a/libraries/tools/kotlin-gradle-plugin/src/functionalTest/kotlin/org/jetbrains/kotlin/gradle/KotlinCompileTaskSourcesTest.kt b/libraries/tools/kotlin-gradle-plugin/src/functionalTest/kotlin/org/jetbrains/kotlin/gradle/KotlinCompileTaskSourcesTest.kt index fbe66af2e68..5610bd8804c 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/functionalTest/kotlin/org/jetbrains/kotlin/gradle/KotlinCompileTaskSourcesTest.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/functionalTest/kotlin/org/jetbrains/kotlin/gradle/KotlinCompileTaskSourcesTest.kt @@ -7,14 +7,12 @@ package org.jetbrains.kotlin.gradle -import org.gradle.api.Project import org.jetbrains.kotlin.gradle.dsl.multiplatformExtension import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinCommonCompilation import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinSharedNativeCompilation import org.jetbrains.kotlin.gradle.tasks.KotlinCompileCommon import org.jetbrains.kotlin.gradle.tasks.KotlinJvmCompile import org.jetbrains.kotlin.gradle.tasks.KotlinNativeCompile -import java.io.File import kotlin.test.Test import kotlin.test.assertEquals @@ -129,6 +127,4 @@ class KotlinCompileTaskSourcesTest { linuxArm64CompileTask.sources.files.relativeTo(project) ) } - - private fun Set.relativeTo(project: Project): Set = map { it.relativeTo(project.projectDir) }.toSet() } diff --git a/libraries/tools/kotlin-gradle-plugin/src/functionalTest/kotlin/org/jetbrains/kotlin/gradle/KotlinNativeCompileRefinesPathsTest.kt b/libraries/tools/kotlin-gradle-plugin/src/functionalTest/kotlin/org/jetbrains/kotlin/gradle/KotlinNativeCompileRefinesPathsTest.kt new file mode 100644 index 00000000000..30e1e7f1166 --- /dev/null +++ b/libraries/tools/kotlin-gradle-plugin/src/functionalTest/kotlin/org/jetbrains/kotlin/gradle/KotlinNativeCompileRefinesPathsTest.kt @@ -0,0 +1,58 @@ +/* + * Copyright 2010-2022 JetBrains s.r.o. and Kotlin Programming Language contributors. + * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. + */ + +@file:Suppress("FunctionName") + +package org.jetbrains.kotlin.gradle + +import org.jetbrains.kotlin.gradle.dsl.multiplatformExtension +import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinSharedNativeCompilation +import org.jetbrains.kotlin.gradle.tasks.KotlinNativeCompile +import kotlin.test.Test +import kotlin.test.assertEquals + +class KotlinNativeCompileRefinesPathsTest { + @Test + fun `test - shared linux - refinesPaths`() { + val project = buildProjectWithMPP() + val kotlin = project.multiplatformExtension + kotlin.targetHierarchy.default() + + kotlin.linuxX64() + kotlin.linuxArm64() + + project.evaluate() + + /* Check linuxMain metadata compilation */ + run { + val compilation = kotlin.metadata().compilations.getByName("linuxMain") as KotlinSharedNativeCompilation + val compileTask = compilation.compileTaskProvider.get() + + assertEquals( + project.files( + "build/classes/kotlin/metadata/nativeMain/klib/test_nativeMain.klib", + "build/classes/kotlin/metadata/commonMain/klib/test_commonMain.klib" + ).toSet().relativeTo(project), + compileTask.refinesModule.files.relativeTo(project) + ) + + assertEquals( + emptySet(), compileTask.friendModule.files.relativeTo(project), + "Expected no friendModules on linuxMain metadata compilation" + ) + } + + /* Check linuxX64Main platform compilation */ + run { + val compilation = kotlin.linuxX64().compilations.main + val compileTask = compilation.compileTaskProvider.get() as KotlinNativeCompile + + /* Platform compilation will compile all sources together, no refinesModules has to be set */ + assertEquals( + emptySet(), compileTask.refinesModule.files.relativeTo(project) + ) + } + } +} \ No newline at end of file diff --git a/libraries/tools/kotlin-gradle-plugin/src/functionalTest/kotlin/org/jetbrains/kotlin/gradle/fileUtils.kt b/libraries/tools/kotlin-gradle-plugin/src/functionalTest/kotlin/org/jetbrains/kotlin/gradle/fileUtils.kt new file mode 100644 index 00000000000..18306dd2555 --- /dev/null +++ b/libraries/tools/kotlin-gradle-plugin/src/functionalTest/kotlin/org/jetbrains/kotlin/gradle/fileUtils.kt @@ -0,0 +1,11 @@ +/* + * Copyright 2010-2022 JetBrains s.r.o. and Kotlin Programming Language contributors. + * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. + */ + +package org.jetbrains.kotlin.gradle + +import org.gradle.api.Project +import java.io.File + +fun Set.relativeTo(project: Project): Set = map { it.relativeTo(project.projectDir) }.toSet() \ No newline at end of file