Ahh ok, that makes sense:
task("testTask") {
println "before doLast()"
doFirst {
println "hello doFirst"
}
doLast {
println "hello doLast"
}
println "after doLast()"
}
Output:
./gradlew testTask
> Configure project :
before doLast()
after doLast()
> Task :testTask
hello doFirst
hello doLast
The manual should probably make this more clear.