anchor.diff:  ====
   
   [[sec:closure_delegate]]
  -=== Closure delegate
  -
  -Each closure has a `delegate` object, which Groovy uses to look up variable and method references which are not local variables or parameters of the closure. Gradle uses this for _configuration closures_, where the `delegate` object is set to the object to be configured.
  +=== Closure Delegates
  +
  +Each closure has a `delegate` object. Groovy uses this delegate to look up variable and method
  +references to nonlocal variables and closure parameters. Gradle uses this for _configuration closures_,
  +where the `delegate` object refers to the object being configured.
   
   .Closure delegates
   ====
  
positive.code: ====
  
  [.multi-language-text.lang-groovy]
  In this example, an `ext` block adds two extra properties to the `project` object. Additionally, a property named `purpose` is added to each source set by setting `ext.purpose` to `null` (`null` is a permissible value). Once the properties have been added, they can be read and set like predefined properties.
  
  [.multi-language-text.lang-kotlin]
  In this example, two extra properties are added to the `project` object using `by extra`. Additionally, a property named `purpose` is added to each source set by setting `extra["purpose"]` to `null` (`null` is a permissible value). Once the properties have been added, they can be read and set on `extra`.
  
  By requiring special syntax for adding a property, Gradle can fail fast when an attempt is made to set a (predefined or extra) property but the property is misspelled or does not exist. Extra properties can be accessed from anywhere their owning object can be accessed, giving them a wider scope than local variables. Extra properties on a project are visible from its subprojects.
  
  For further details on extra properties and their API, see the link:{groovyDslPath}/org.gradle.api.plugins.ExtraPropertiesExtension.html[ExtraPropertiesExtension] class in the API documentation.
  
  [[sec:configuring_arbitrary_objects]]
  == Configuring arbitrary objects
  
  You can configure arbitrary objects in the following very readable way.
  
  .Configuring arbitrary objects
  ====
  include::sample[dir="snippets/tutorial/configureObject/groovy",files="build.gradle[]"]
  include::sample[dir="snippets/tutorial/configureObject/kotlin",files="build.gradle.kts[]"]
  
negative.code: ====
  
  [[sec:closures_as_the_last_parameter_in_a_method]]
  === Last Closure Parameter Syntax
  
  The Gradle DSL uses closures in many places.
  You can find out more about closures https://docs.groovy-lang.org/latest/html/documentation/index.html#_closures[here].
  When the last parameter of a method is a closure, you can place the closure after the method call:
  
  .Closure as method parameter
  ====
  