Slackbot
10/27/2022, 12:16 PMVampire
10/27/2022, 12:29 PMabstract val jvm: Property<Boolean>
Dunnot what Delegates.notNull does.Giuseppe Barbieri
10/27/2022, 12:57 PMjvm to return the corresponding targetDir later on
@get:Input
abstract val jvm: Property<Boolean>
@get:OutputDirectory
val targetDir: DirectoryProperty
get() {
val platform = if(jvm.get()) "jvm" else "nonJvm"
val dir = project.layout.buildDirectory.dir("generated/$platform")
return project.objects.directoryProperty().convention(dir)
}
val generateJvmCode by registering(GenerateCode::class) { jvm.set(true) }
val generateNonJvmCode by registering(GenerateCode::class) { jvm.set(false) }
kotlin.sourceSets {
named("jvmMain") { kotlin.srcDir(generateJvmCode) }
named("nativeMain") { kotlin.srcDir(generateNonJvmCode) }
// named("jsMain") { kotlin.srcDir(generateNonJvmCode) }
}
however, on sync:
com.intellij.openapi.externalSystem.model.ExternalSystemException: Could not create task ':generateJvmCode'.
Could not create task of type 'GenerateCode'.
Cannot query the value of task ':generateJvmCode' property 'jvm' because it has no value available.is a dependency between properties allowed?
Giuseppe Barbieri
10/27/2022, 1:12 PMabstract class GenerateJvmCode : GenerateCode(true)
abstract class GenerateNonJvmCode : GenerateCode(false)
abstract class GenerateCode(
@Internal
val jvm: Boolean): DefaultTask() {Vampire
10/27/2022, 1:18 PM@get:Inject
abstract val layout: ProjectLayout
@get:Input
abstract val jvm: Property<Boolean>
@get:OutputDirectory
val targetDir = jvm.flatMap {
val platform = if (it) "jvm" else "nonJvm"
layout.buildDirectory.dir("generated/$platform")
}Giuseppe Barbieri
10/27/2022, 1:19 PMGiuseppe Barbieri
10/27/2022, 1:20 PMlayout to be extracted into a property itself?Vampire
10/27/2022, 2:14 PMproject usually.
Accessing project of a task during configuration time is ok, during execution time it is deprecated and will be forbidden.
So better to simply avoid using it whenever possible.Giuseppe Barbieri
10/27/2022, 4:21 PM