From 7d901dc610b97f0b041f068a94a8f626b91ffcfc Mon Sep 17 00:00:00 2001 From: Aleksey Kladov Date: Thu, 25 May 2017 15:36:09 +0300 Subject: [PATCH] Gradle plugin: add artifacts to the IDE project model --- .../src/main/kotlin/KonanCompilerTask.kt | 2 +- .../src/main/kotlin/KonanPlugin.kt | 20 +++++++++++++++++-- .../main/kotlin/KonanToolingModelBuilder.kt | 15 ++++++++++++-- .../src/main/kotlin/model/KonanModel.kt | 6 ++++++ 4 files changed, 38 insertions(+), 5 deletions(-) diff --git a/tools/kotlin-native-gradle-plugin/src/main/kotlin/KonanCompilerTask.kt b/tools/kotlin-native-gradle-plugin/src/main/kotlin/KonanCompilerTask.kt index 5c4ba8e93f8..93cb320c7d4 100644 --- a/tools/kotlin-native-gradle-plugin/src/main/kotlin/KonanCompilerTask.kt +++ b/tools/kotlin-native-gradle-plugin/src/main/kotlin/KonanCompilerTask.kt @@ -36,7 +36,7 @@ open class KonanCompileTask: DefaultTask() { // Output artifact -------------------------------------------------------- - protected lateinit var artifactName: String + lateinit var artifactName: String @OutputDirectory lateinit var outputDir: File diff --git a/tools/kotlin-native-gradle-plugin/src/main/kotlin/KonanPlugin.kt b/tools/kotlin-native-gradle-plugin/src/main/kotlin/KonanPlugin.kt index ec45c473cf7..33f64f8a5c1 100644 --- a/tools/kotlin-native-gradle-plugin/src/main/kotlin/KonanPlugin.kt +++ b/tools/kotlin-native-gradle-plugin/src/main/kotlin/KonanPlugin.kt @@ -23,6 +23,7 @@ import org.gradle.api.Task import org.gradle.api.file.FileCollection import org.gradle.api.internal.AbstractNamedDomainObjectContainer import org.gradle.api.internal.project.ProjectInternal +import org.gradle.api.tasks.TaskCollection import org.gradle.internal.reflect.Instantiator import org.gradle.tooling.provider.model.ToolingModelBuilderRegistry import javax.inject.Inject @@ -56,6 +57,21 @@ internal val Project.konanCompilerDownloadTask get() = tasks.getByName(KonanPlu internal val Project.konanVersion get() = findProperty(KonanPlugin.KONAN_VERSION_PROPERTY_NAME) as String? ?: KonanPlugin.DEFAULT_KONAN_VERSION +internal val Project.supportedCompileTasks: TaskCollection + get() = project.tasks.withType(KonanCompileTask::class.java).matching { it.target?.isSupported() ?: true } + +internal val Project.supportedInteropTasks: TaskCollection + get() = project.tasks.withType(KonanInteropTask::class.java).matching { it.target?.isSupported() ?: true } + +private fun String.isSupported(): Boolean { + val os = CompilerDownloadTask.simpleOsName() + return when (os) { + "macos" -> this == "macbook" || this == "iphone" + "linux" -> this == "linux" || this == "raspberrypi" + else -> false + } +} + class KonanArtifactsContainer(val project: ProjectInternal): AbstractNamedDomainObjectContainer( KonanCompilerConfig::class.java, project.gradle.services.get(Instantiator::class.java)) { @@ -157,8 +173,8 @@ class KonanPlugin @Inject constructor(private val registry: ToolingModelBuilderR project.delete(project.konanBuildRoot) } getTask(project, "build").apply { - dependsOn(project.tasks.withType(KonanCompileTask::class.java).matching { it.target?.isSupported() ?: true }) - dependsOn(project.tasks.withType(KonanInteropTask::class.java).matching { it.target?.isSupported() ?: true }) + dependsOn(project.supportedCompileTasks) + dependsOn(project.supportedInteropTasks) } } diff --git a/tools/kotlin-native-gradle-plugin/src/main/kotlin/KonanToolingModelBuilder.kt b/tools/kotlin-native-gradle-plugin/src/main/kotlin/KonanToolingModelBuilder.kt index 15e06facbbd..90dd02f2318 100644 --- a/tools/kotlin-native-gradle-plugin/src/main/kotlin/KonanToolingModelBuilder.kt +++ b/tools/kotlin-native-gradle-plugin/src/main/kotlin/KonanToolingModelBuilder.kt @@ -18,16 +18,27 @@ package org.jetbrains.kotlin.gradle.plugin import org.gradle.api.Project import org.gradle.tooling.provider.model.ToolingModelBuilder +import org.jetbrains.kotlin.gradle.plugin.model.KonanArtifact import org.jetbrains.kotlin.gradle.plugin.model.KonanModel object KonanToolingModelBuilder : ToolingModelBuilder { override fun canBuild(modelName: String): Boolean = KonanModel::class.java.name == modelName override fun buildAll(modelName: String, project: Project): KonanModel { - return KonanModelImpl(project.konanVersion) + val artifacts = project.supportedCompileTasks + .toList() + .map { KonanArtifactImpl(it.artifactName, it.artifactPath) } + return KonanModelImpl(project.konanVersion, artifacts) } } private class KonanModelImpl( - override val konanVersion: String + override val konanVersion: String, + override val artifacts: List ) : KonanModel + + +private class KonanArtifactImpl( + override val name: String, + override val path: String +) : KonanArtifact diff --git a/tools/kotlin-native-gradle-plugin/src/main/kotlin/model/KonanModel.kt b/tools/kotlin-native-gradle-plugin/src/main/kotlin/model/KonanModel.kt index e6a7e91991f..18509a7ece9 100644 --- a/tools/kotlin-native-gradle-plugin/src/main/kotlin/model/KonanModel.kt +++ b/tools/kotlin-native-gradle-plugin/src/main/kotlin/model/KonanModel.kt @@ -24,4 +24,10 @@ import java.io.Serializable */ interface KonanModel : Serializable { val konanVersion: String + val artifacts: List +} + +interface KonanArtifact : Serializable { + val name: String + val path: String }