From b32a73bbf18a8f060ed22ec6dddd5fa7b08afc19 Mon Sep 17 00:00:00 2001 From: Ilya Matveev Date: Wed, 24 Oct 2018 11:58:29 +0700 Subject: [PATCH] Fix OptionalExpectation in Gradle plugin (#2259) --- .../experimental/KotlinNativeBinaries.kt | 6 ++++ .../internal/AbstractKotlinNativeBinary.kt | 3 ++ .../KotlinNativeTestExecutableImpl.kt | 5 +++ .../experimental/tasks/KotlinNativeCompile.kt | 4 +-- .../test/kotlin/ExperimentalPluginTests.kt | 36 +++++++++++++++++++ 5 files changed, 51 insertions(+), 3 deletions(-) diff --git a/tools/kotlin-native-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/experimental/KotlinNativeBinaries.kt b/tools/kotlin-native-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/experimental/KotlinNativeBinaries.kt index 15a4f76f696..6fb28f7a8be 100644 --- a/tools/kotlin-native-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/experimental/KotlinNativeBinaries.kt +++ b/tools/kotlin-native-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/experimental/KotlinNativeBinaries.kt @@ -40,6 +40,12 @@ interface KotlinNativeBinary : ComponentWithDependencies, BuildableComponent, Co /** Returns the source files of this binary. */ val sources: FileCollection + /** + * Returns common sources used to build this binary + * (both common for all native targets and avalable via expectedBy relation). + */ + val commonSources: FileCollection + /** * Konan target the library is built for */ diff --git a/tools/kotlin-native-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/experimental/internal/AbstractKotlinNativeBinary.kt b/tools/kotlin-native-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/experimental/internal/AbstractKotlinNativeBinary.kt index 25cf2996bcd..e508d624516 100644 --- a/tools/kotlin-native-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/experimental/internal/AbstractKotlinNativeBinary.kt +++ b/tools/kotlin-native-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/experimental/internal/AbstractKotlinNativeBinary.kt @@ -94,6 +94,9 @@ abstract class AbstractKotlinNativeBinary( override val sources: FileCollection get() = sourceSet.getAllSources(konanTarget) + override val commonSources: FileCollection + get() = sourceSet.getCommonMultiplatformSources() + sourceSet.getCommonNativeSources() + private val dependencies = objects.newInstance( DefaultComponentDependencies::class.java, name + "Implementation" diff --git a/tools/kotlin-native-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/experimental/internal/KotlinNativeTestExecutableImpl.kt b/tools/kotlin-native-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/experimental/internal/KotlinNativeTestExecutableImpl.kt index 82dfecaa075..cd5f9156849 100644 --- a/tools/kotlin-native-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/experimental/internal/KotlinNativeTestExecutableImpl.kt +++ b/tools/kotlin-native-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/experimental/internal/KotlinNativeTestExecutableImpl.kt @@ -60,6 +60,11 @@ open class KotlinNativeTestExecutableImpl @Inject constructor( override val sources: FileCollection get() = super.sources + mainSources.getAllSources(konanTarget) + override val commonSources: FileCollection + get() = super.commonSources + + mainSources.getCommonNativeSources() + + mainSources.getCommonMultiplatformSources() + override val outputRootName: String = "test-exe" override val additionalCompilerOptions: Collection diff --git a/tools/kotlin-native-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/experimental/tasks/KotlinNativeCompile.kt b/tools/kotlin-native-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/experimental/tasks/KotlinNativeCompile.kt index d8d1b4ec723..6c2e8c3d80c 100644 --- a/tools/kotlin-native-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/experimental/tasks/KotlinNativeCompile.kt +++ b/tools/kotlin-native-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/experimental/tasks/KotlinNativeCompile.kt @@ -49,9 +49,7 @@ open class KotlinNativeCompile @Inject constructor(internal val binary: Abstract override fun getSource(): FileTree = sources.asFileTree private val commonSources: FileCollection - get() = with(binary.sourceSet) { - getCommonMultiplatformSources() + getCommonNativeSources() - } + get() = binary.commonSources val libraries: Configuration @InputFiles get() = binary.klibs diff --git a/tools/kotlin-native-gradle-plugin/src/test/kotlin/ExperimentalPluginTests.kt b/tools/kotlin-native-gradle-plugin/src/test/kotlin/ExperimentalPluginTests.kt index 3ce104dfbf7..04e56141c03 100644 --- a/tools/kotlin-native-gradle-plugin/src/test/kotlin/ExperimentalPluginTests.kt +++ b/tools/kotlin-native-gradle-plugin/src/test/kotlin/ExperimentalPluginTests.kt @@ -1036,4 +1036,40 @@ class ExperimentalPluginTests { "Project property 'konan.home' is deprecated. Use 'org.jetbrains.kotlin.native.home' instead." )) } + + @Test + fun `Plugin should support OptionalExpectation`() { + val project = KonanProject.createEmpty(projectDirectory).apply { + buildFile.writeText(""" + plugins { + id 'kotlin-native' + } + + components.main.targets = ['host'] + components.test.targets = ['host'] + """.trimIndent()) + generateSrcFile("main.kt", """ + import kotlin.jvm.* + + class A { + @JvmField + val a = "A.a" + } + + fun foo() { + println(A().a) + } + """.trimIndent()) + generateSrcFile(listOf("src", "test", "kotlin"), "test.kt", """ + import kotlin.test.* + + @Test + fun test() { + foo() + } + """.trimIndent()) + } + val result = project.createRunner().withArguments("build").build() + assertTrue(result.output.contains("A.a")) + } }