Gradle plugin: add artifacts to the IDE project model
This commit is contained in:
@@ -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
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user