Gradle plugin: add artifacts to the IDE project model
This commit is contained in:
@@ -36,7 +36,7 @@ open class KonanCompileTask: DefaultTask() {
|
|||||||
|
|
||||||
// Output artifact --------------------------------------------------------
|
// Output artifact --------------------------------------------------------
|
||||||
|
|
||||||
protected lateinit var artifactName: String
|
lateinit var artifactName: String
|
||||||
|
|
||||||
@OutputDirectory
|
@OutputDirectory
|
||||||
lateinit var outputDir: File
|
lateinit var outputDir: File
|
||||||
|
|||||||
@@ -23,6 +23,7 @@ import org.gradle.api.Task
|
|||||||
import org.gradle.api.file.FileCollection
|
import org.gradle.api.file.FileCollection
|
||||||
import org.gradle.api.internal.AbstractNamedDomainObjectContainer
|
import org.gradle.api.internal.AbstractNamedDomainObjectContainer
|
||||||
import org.gradle.api.internal.project.ProjectInternal
|
import org.gradle.api.internal.project.ProjectInternal
|
||||||
|
import org.gradle.api.tasks.TaskCollection
|
||||||
import org.gradle.internal.reflect.Instantiator
|
import org.gradle.internal.reflect.Instantiator
|
||||||
import org.gradle.tooling.provider.model.ToolingModelBuilderRegistry
|
import org.gradle.tooling.provider.model.ToolingModelBuilderRegistry
|
||||||
import javax.inject.Inject
|
import javax.inject.Inject
|
||||||
@@ -56,6 +57,21 @@ internal val Project.konanCompilerDownloadTask get() = tasks.getByName(KonanPlu
|
|||||||
internal val Project.konanVersion
|
internal val Project.konanVersion
|
||||||
get() = findProperty(KonanPlugin.KONAN_VERSION_PROPERTY_NAME) as String? ?: KonanPlugin.DEFAULT_KONAN_VERSION
|
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>(
|
class KonanArtifactsContainer(val project: ProjectInternal): AbstractNamedDomainObjectContainer<KonanCompilerConfig>(
|
||||||
KonanCompilerConfig::class.java,
|
KonanCompilerConfig::class.java,
|
||||||
project.gradle.services.get(Instantiator::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)
|
project.delete(project.konanBuildRoot)
|
||||||
}
|
}
|
||||||
getTask(project, "build").apply {
|
getTask(project, "build").apply {
|
||||||
dependsOn(project.tasks.withType(KonanCompileTask::class.java).matching { it.target?.isSupported() ?: true })
|
dependsOn(project.supportedCompileTasks)
|
||||||
dependsOn(project.tasks.withType(KonanInteropTask::class.java).matching { it.target?.isSupported() ?: true })
|
dependsOn(project.supportedInteropTasks)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -18,16 +18,27 @@ package org.jetbrains.kotlin.gradle.plugin
|
|||||||
|
|
||||||
import org.gradle.api.Project
|
import org.gradle.api.Project
|
||||||
import org.gradle.tooling.provider.model.ToolingModelBuilder
|
import org.gradle.tooling.provider.model.ToolingModelBuilder
|
||||||
|
import org.jetbrains.kotlin.gradle.plugin.model.KonanArtifact
|
||||||
import org.jetbrains.kotlin.gradle.plugin.model.KonanModel
|
import org.jetbrains.kotlin.gradle.plugin.model.KonanModel
|
||||||
|
|
||||||
object KonanToolingModelBuilder : ToolingModelBuilder {
|
object KonanToolingModelBuilder : ToolingModelBuilder {
|
||||||
override fun canBuild(modelName: String): Boolean = KonanModel::class.java.name == modelName
|
override fun canBuild(modelName: String): Boolean = KonanModel::class.java.name == modelName
|
||||||
|
|
||||||
override fun buildAll(modelName: String, project: Project): KonanModel {
|
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(
|
private class KonanModelImpl(
|
||||||
override val konanVersion: String
|
override val konanVersion: String,
|
||||||
|
override val artifacts: List<KonanArtifact>
|
||||||
) : KonanModel
|
) : KonanModel
|
||||||
|
|
||||||
|
|
||||||
|
private class KonanArtifactImpl(
|
||||||
|
override val name: String,
|
||||||
|
override val path: String
|
||||||
|
) : KonanArtifact
|
||||||
|
|||||||
@@ -24,4 +24,10 @@ import java.io.Serializable
|
|||||||
*/
|
*/
|
||||||
interface KonanModel : Serializable {
|
interface KonanModel : Serializable {
|
||||||
val konanVersion: String
|
val konanVersion: String
|
||||||
|
val artifacts: List<KonanArtifact>
|
||||||
|
}
|
||||||
|
|
||||||
|
interface KonanArtifact : Serializable {
|
||||||
|
val name: String
|
||||||
|
val path: String
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user