Gradle plugin: add artifacts to the IDE project model

This commit is contained in:
Aleksey Kladov
2017-05-25 15:36:09 +03:00
committed by ilmat192
parent f1256edb02
commit 7d901dc610
4 changed files with 38 additions and 5 deletions
@@ -36,7 +36,7 @@ open class KonanCompileTask: DefaultTask() {
// Output artifact --------------------------------------------------------
protected lateinit var artifactName: String
lateinit var artifactName: String
@OutputDirectory
lateinit var outputDir: File
@@ -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<KonanCompileTask>
get() = project.tasks.withType(KonanCompileTask::class.java).matching { it.target?.isSupported() ?: true }
internal val Project.supportedInteropTasks: TaskCollection<KonanInteropTask>
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>(
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)
}
}
@@ -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<KonanArtifact>
) : KonanModel
private class KonanArtifactImpl(
override val name: String,
override val path: String
) : KonanArtifact
@@ -24,4 +24,10 @@ import java.io.Serializable
*/
interface KonanModel : Serializable {
val konanVersion: String
val artifacts: List<KonanArtifact>
}
interface KonanArtifact : Serializable {
val name: String
val path: String
}