Changelog for Groovy 6.0.0-beta-2

Bug

  • [GROOVY-9585] - CompilerConfiguration copy constructor does not copy compilation customizers *
  • [GROOVY-12225] - STC: property access to a record component fails for precompiled records
  • [GROOVY-12228] - STC: multiple assignment ignores the declared type of the target variables
  • [GROOVY-12229] - STC: cannot call the generated setter of a String property with a GString
  • [GROOVY-12230] - STC: String/GString conditional not accepted where String is expected
  • [GROOVY-12231] - validate the four hex digits of a json \u escape
  • [GROOVY-12233] - StringEscapeUtils.unescapeJava mis-decodes and silently drops malformed \u escapes
  • [GROOVY-12235] - Interface default method without dynamic calls references unemitted call-site helper under indy=false
  • [GROOVY-12242] - instanceof pattern variable scope is not aligned with Java flow scoping (JEP 394) *
  • [GROOVY-12245] - @AnnotationCollector(processor=…) value that isn't a constant produces GroovyBugError: unexpected NullPointerException
  • [GROOVY-12247] - NPE "Cannot invoke MetaMethod.isAbstract() because method is null" on super call to inherited generic method with default parameter

Dependency upgrade

Improvement

  • [GROOVY-12223] - Introduce hidden class support
  • [GROOVY-12224] - Add a no-arg findingResults(Iterator) DGM method to avoid an NPE
  • [GROOVY-12227] - GeneratedDispatcher: avoid runtime class definition so packed closures work in native images
  • [GROOVY-12234] - Indy: AOT link mode so dynamic Groovy dispatch works in GraalVM native images
  • [GROOVY-12236] - Allow @ASTTest to be disabled via a groovy.asttest.enable system property
  • [GROOVY-12238] - SecureASTCustomizer does not check constructors, initializer blocks or field initializers
  • [GROOVY-12240] - Initialize argument-less enum constants with a direct constructor call *
  • [GROOVY-12244] - SecureASTCustomizer does not check authored code relocated into a synthetic method
  • [GROOVY-12250] - NullChecker: narrow arguments of null-validator and assertion methods (requireNonNull, assertNotNull, assertThat(x).isNotNull())
  • [GROOVY-12251] - NullChecker: check @NonNull fields are definitely initialized (strict mode)
  • [GROOVY-12252] - NullChecker: honour @Nullable type arguments reaching results via generics (get(0), xs[0], head())

* potentially breaking change (read issue for details - even minor differences are sometimes flagged as potentially breaking changes)