Search code examples
gradle-kotlin-dsl

Error defining delete task


I am getting errors with the following block of DSL script.

val DerbyDbDataFolder: File = file("DerbyDbData")
val DerbyLog: File = file("derby.log")

tasks {
    var cleanDerbyDbData by creating (Delete::class) {
        delete(DerbyDbDataFolder)
        delete(DerbyLog)
    }

    "clean" {
        dependsOn(cleanDerbyDbData)
    }
}

But I get the following error message.

       var cleanDerbyDbData by creating (Delete::class) {
                               ^ Missing 'setValue(Nothing?, KProperty<*>, Delete)' method on delegate of type 'PolymorphicDomainObjectContainer<Delete>'

What is this error message and how do I fix it?


Solution

  • TLDR

    Define cleanDerbyDbData as a val instead of var:

    val DerbyDbDataFolder: File = file("DerbyDbData")
    val DerbyLog: File = file("derby.log")
    
    tasks {
        val cleanDerbyDbData by creating (Delete::class) {
            delete(DerbyDbDataFolder)
            delete(DerbyLog)
        }
    
        "clean" {
            dependsOn(cleanDerbyDbData)
        }
    }
    

    Details

    cleanDerbyDbData is a delegated property, and for it to be a var, the expression to the right of by must return a mutable value. The PolymorphicDomainObjectContainerDelegateProvider returned by the creating() function doesn't provide any setters, and this is the error you're seeing.