Changelog for Groovy 4.0.1

Bug

  • [GROOVY-10290] - Dynamic Groovy code in Gradle doesn't compile because of $getLookup() method is not static
  • [GROOVY-10458] - Path to a problematic file isn't shown in the error message sometimes if compilation fails with IndexOutOfBoundsException
  • [GROOVY-10461] - Gradle multimodule project fails with NoClassDefFoundError in groovyjarjarasm.asm.signature.SignatureReader.parseType
  • [GROOVY-10464] - Wrong cast for type parameter in generated stubs
  • [GROOVY-10465] - Consolidation of VMPlugin didn't account for API calls in the Groovy runtime
  • [GROOVY-10467] - Compilation fails with method detected as transient
  • [GROOVY-10472] - @AutoImplement is failing when covariant returns are involved
  • [GROOVY-10478] - Groovy4: java.lang.VerifyError: Bad invokespecial instruction: interface method reference is in an indirect superinterface.
  • [GROOVY-10483] - Source encoding incorrectly set in v4.0.0
  • [GROOVY-10484] - NamedVariant: NamedParam not checked when added by transform
  • [GROOVY-10496] - Wrong IntRange.by(...) behaviour for left-open ranges
  • [GROOVY-10497] - NamedVariant: default value overrides supplied value if it's falsy
  • [GROOVY-10500] - NamedVariant: non-trivial default value of NamedDelegate property
  • [GROOVY-10502] - NamedVariant: improve consistency of default value treatment
  • [GROOVY-10519] - v9 ClassFinder closes existing FileSystems that it doesn't own
  • [GROOVY-5726] - Source locations of command chain expressions
  • [GROOVY-6510] - Problems with implicit closures inside of @Category-annotated classes
  • [GROOVY-7802] - MapWithDefault should be able to be configured to not store its default value
  • [GROOVY-8448] - Local variable is accessible via explicit this
  • [GROOVY-9259] - Implementing Groovy interface with default methods can cause compile issues.

Dependency upgrade

Documentation

  • [GROOVY-10468] - Ability to define system properties for groovyc using CompilerConfiguration
  • [GROOVY-10508] - DefaultGroovyMethods.get() unexpectedly puts the default value into the origin map

Improvement

  • [GROOVY-10476] - STC: for-each loop on iterable-like types
  • [GROOVY-10477] - SC: optimize for-in loop on array with dynamic variable
  • [GROOVY-10505] - TraitComposer should mark generated methods as @Generated
  • [GROOVY-8133] - Static type checking failure for streams and spread operator

New Feature

  • [GROOVY-10512] - groovy.sql.Sql : provide a way to get the SQLWarning of a Statement

Task

  • [GROOVY-10479] - Disable Ant tests which don't fork under JDK18